2013-04-02, 20:13
#805
Kommit en lång väg, har bara ett litet problem tills jag slutar besvära er.
Det är min metod fortsatta jag har problem med. Jag vill att om nu användaren angett att den vill träna på atomnummer, så ska han ha möjligheten att fortsätta att träna på det utan att behöva gå till huvudmenyn och välja "träna på atomnummer" igen. Jag får felmeddelandet "NameError: global name 'strang' is not defined"
Hur ska jag göra för att uppnå det?
Edit: Undrar också hur jag gör för att vid val 3 där jag bara visar läxföret, att återgå till huvudmenyn igen, utan att behöva calla metoden fortsatta()
Kod:
import random
import time
class option1(object):
def __init__(self):
self.atomnummer=0
self.fel1 = 0
self.beteckning =""
self.svar =0
self.strang1 = ""
self.dic={}
self.valet = ""
self.val = 0
def __str__(self):
return self.strang1
def meny(self):
val = int(input("Vill du\n1.Träna på atomnummer\n2.Träna på atombeteckningar\n3.Visa läxförhöret\n4.Avsluta\n"))
if val == 1:
self.val = 1
elif val == 2:
self.val = 2
elif val == 3:
self.val = 3
else:
print ("Dags att sluta plugga, gör något vettigt istället")
time.sleep(5)
exit
def dictionary1(self):
dict1 = {}
dict2 = {}
dict1list = []
dict2list = []
file = open("worth.txt", "r")
for line in file:
(key,val) = line.split()
val_float = float(val) # Gör om värderna (atomvikterna) till flyttal.
dict1[str(key)] = val_float
for key, val_float in dict1.items(): # Gör om dictionary till en lista med tuppler.
temporary = (key, val_float)
dict1list.append(temporary)
dict1list.sort( key= lambda x:x[1]) # Här sorterar jag listan, så att den sorteras efter atomvikt.
for i, (atombeteckning, none) in enumerate(dict1list, start = 1): # Här numrerar jag atomerna och lägger till i ett tomt dictionary.
dict2[atombeteckning] = i
dict2["Ar"] = 19
dict2["K"] = 18
dict2["Co"] = 28 # Byter ut vissa, då vissa felmätningar uppkom vid atomvikten.
dict2["Ni"] = 27
dict2["Te"] = 53
dict2["I"] = 52
dict2["Th"] = 91
dict2["Pa"] = 90
dict2["U"] = 93
dict2["Np"] = 92
self.dic = dict2
for i,k in dict2.items():
temp2 = (i,k)
dict2list.append(temp2)
random_num = random.randrange(0,103)
random_pair = dict2list[random_num]
self.beteckning= random_pair[0]
self.atomnummer = random_pair[1]
def get_answer(self):
count = 0
while self.fel1 < 3 and self.svar != self.atomnummer and self.svar != self.beteckning:
if self.val == 1:
svar = int(input("Vilket atom nummer har " +self.beteckning+"?"))
self.svar = svar
if self.svar == self.atomnummer:
self.strang1 += "Du har svarat rätt"
print (self.strang1)
self.strang1 = ""
else:
self.strang1 += "Du har tyvärr svarat fel"
self.fel1 +=1
print (self.strang1)
self.strang1 = ""
elif self.val == 2:
svar = input("Vilken beteckning har " +self.atomnummer +"?")
self.svar = svar
if self.svar == self.beteckning:
self.strang1 += "Du har svarat rätt"
print (self.strang1)
self.strang1 = ""
fortsatta()
else:
self.strang1 += "Du har tyvärr svarat fel"
self.fel1 += 1
print (self.strang1)
self.strang1 = ""
elif self.val == 3:
while count == 0:
visa_laxa()
count += 1
exit
def forsatta(self):
fort_satta = input("Vill du forsätta y/n ?")
if fort_satta == "y":
strang.dictionary1()
strang.get_answer()
else:
pass
def visa_laxa():
dict1 = {}
dict2 = {}
dict1list = []
dict2list = []
file = open("worth.txt", "r")
for line in file:
(key,val) = line.split()
val_float = float(val) # Gör om värderna (atomvikterna) till flyttal.
dict1[str(key)] = val_float
for key, val_float in dict1.items(): # Gör om dictionary till en lista med tuppler.
temporary = (key, val_float)
dict1list.append(temporary)
dict1list.sort( key= lambda x:x[1]) # Här sorterar jag listan, så att den sorteras efter atomvikt.
for i, (atombeteckning, none) in enumerate(dict1list, start = 1): # Här numrerar jag atomerna och lägger till i ett tomt dictionary.
dict2[atombeteckning] = i
dict2["Ar"] = 19
dict2["K"] = 18
dict2["Co"] = 28 # Byter ut vissa, då vissa felmätningar uppkom vid atomvikten.
dict2["Ni"] = 27
dict2["Te"] = 53
dict2["I"] = 52
dict2["Th"] = 91
dict2["Pa"] = 90
dict2["U"] = 93
dict2["Np"] = 92
for i,k in dict2.items():
print (i,k)
def main():
while True:
strang = option1()
strang.meny()
strang.dictionary1()
strang.get_answer()
strang.forsatta()
main()
Det är min metod fortsatta jag har problem med. Jag vill att om nu användaren angett att den vill träna på atomnummer, så ska han ha möjligheten att fortsätta att träna på det utan att behöva gå till huvudmenyn och välja "träna på atomnummer" igen. Jag får felmeddelandet "NameError: global name 'strang' is not defined"
Hur ska jag göra för att uppnå det?
Edit: Undrar också hur jag gör för att vid val 3 där jag bara visar läxföret, att återgå till huvudmenyn igen, utan att behöva calla metoden fortsatta()
__________________
Senast redigerad av Jesstess123 2013-04-02 kl. 20:47.
Senast redigerad av Jesstess123 2013-04-02 kl. 20:47.