python - Tkinter: String variables not working -
i have made program science asks symbol of n element , must type in element problem can't tell if got answer wrong keeps saying correct!,
here code,
# import modules tkinter import * import random, time # window setup root = tk() root.title('element finder') root.state('zoomed') # elements """ = h, hydrogen b = he, helium c = o, oxygen d = c, carbon e = n, nitrogen f = ne, neon g = u, uranium h = na, sodium = ar, argon j = k, potassium k = mg, magnesium l = cl, chlorine m = b, boron n = au, gold o = pd, palladium p = kr, krypton q = ca, calcium r = pm, promethium s = ag, silver t = rb, rubidium u = y, yurium v = ir, iridium w = pt, platnium x = ti, titanium y = hg, mercury z = er, erbium """ # variables element = stringvar() guess = stringvar() answer = stringvar() def question(): guess.set('') element.set('') r = random.randint(1, 26) if r == 1: element.set('h') elif r == 2: element.set('he') elif r == 3: element.set('o') elif r == 4: element.set('c') elif r == 5: element.set('ne') elif r == 6: element.set('u') elif r == 7: element.set('na') elif r == 8: element.set('ar') elif r == 9: element.set('k') elif r == 10: element.set('mg') elif r == 11: element.set('cl') elif r == 12: element.set('b') elif r == 13: element.set('au') elif r == 14: element.set('pd') elif r == 15: element.set('kr') elif r == 16: element.set('ca') elif r == 17: element.set('pm') elif r == 18: element.set('ag') elif r == 19: element.set('rb') elif r == 20: element.set('y') elif r == 21: element.set('ir') elif r == 22: element.set('pt') elif r == 23: element.set('ti') elif r == 24: element.set('n') elif r == 25: element.set('hg') elif r == 26: element.set('er') def check(): e = element.get() g = guess.get() if e == 'h' , g == 'hydrogen' or 'hydrogen' or 'hydrogen': answer.set('correct!') if e == 'he' , g == 'helium' or 'helium' or 'helium': answer.set('correct') if e == 'o' , g == 'oxygen' or 'oxygen' or 'oxygen': answer.set('correct!') if e == 'c' , g == 'carbon' or 'carbon' or 'carbon': answer.set('correct!') if e == 'ne' , 'neon' or 'neon' or 'neon': answer.set('correct!') if e == 'u' , g == 'uranium' or 'uranium' or 'uranium': answer.set('correct!') if e == 'na' , g == 'sodium' or 'sodium' or 'sodium': answer.set('correct!') if e == 'ar' , g == 'argon, argon' 'argon': answer.set('correct!') if e == 'k' , g == 'potassium' or 'potassium' or 'potassium': answer.set('correct!') if e == 'mg' , g == 'magnesium' or 'magnesium' or 'magnesium': answer.set('correct!') if e == 'cl' , g == 'chlorine' or 'chlorine' or 'chlorine': answer.set('correct!') if e == 'b' , g == 'boron' or 'boron' or 'boron': answer.set('correct!') if e == 'au' , g == 'gold' or 'gold' or 'gold': answer.set('correct!') if e == 'pd' , g == 'palladium' or 'palladium' or 'palladium': answer.set('correct!') if e == 'kr' , g == 'krypton' or 'krypton' or 'krypton': answer.set('correct!') if e == 'ca' , g == 'calcium' or 'calcium' or 'calcium': answer.set('correct!') if e == 'pm' , g == 'promethium' or 'promethium' or 'promethium': answer.set('correct!') if e == 'ag' , g == 'silver' or 'silver' or 'silver': answer.set('correct!') if e == 'rb' , g == 'rubidium' or 'rubidium' or 'rubidium': answer.set('correct!') if e == 'y' , g == 'yurium' or 'yurium' or 'yurium': answer.set('correct!') if e == 'ir' , g == 'iridium' or 'iridium' or 'iridium': answer.set('correct!') if e == 'pt' , g == 'platnium' or 'platnium' or 'platnium': answer.set('correct!') if e == 'ti' , g == 'titanium' or 'titanium' or 'titanium': answer.set('correct!') if e == 'n' , g == 'nitrogen' or 'nitrogen' or 'nitrogen': answer.set(g + ' correct') if e == 'hg' , g == 'mercury' or 'mercury' or ' mercury': answer.set('correct!') if e == 'er' , g == 'erbium' or 'erbium' or 'erbium': answer.set('correct!') else: answer.set('incorrect.') question() # question label(root, text='what element has symbol:', fg='black', font='20').pack(side=top) e = label(root, textvariable=element, fg='blue', font='20').pack(side=top) = entry(root, textvariable=guess, font=20).pack(side=top) button(root, text='check', fg='green', command=check).pack(side=top) c = label(root, textvariable=answer, font=20, fg='blue').pack(side=top) question()
thanks in advance!
instead of 'g == hydrogen' or 'hydrogen' or 'hydrogen'
you can g.lower() == 'hydrogen'
the issue here is:
if g == 'hydrogen' or 'hydrogen' or 'hydrogen'
evaluates as
if (g == 'hydrogen') or ('hydrogen') or 'hydrogen'
the latter parts of expression evaluate true
hence error.
you can simplify code great deal creating dictionary:
d = {1: 'h', 2: 'he', ... }
and replace huge chunk of if
element.set(d.get(r))
Comments
Post a Comment