2013-05-21 3 views
0

과학에 대한 프로그램을 만들었습니다. n 요소의 기호를 묻습니다. 요소를 입력해야하지만 문제는 답을 잘못했는지 여부를 알 수 없다는 것입니다 여기 Tkinter : 문자열 변수가 작동하지 않습니다

내 코드입니다! 올바른 사전에

# Import Modules 
from tkinter import * 
import random, time 

# Window Setup 
root = Tk() 
root.title('Element Finder') 
root.state('zoomed') 

# Elements 

""" 

a = H, Hydrogen 

b = He, Helium 

c = O, Oxygen 

d = C, Carbon 

e = N, Nitrogen 

f = Ne, Neon 

g = U, Uranium 

h = Na, Sodium 

i = 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' and g == 'Hydrogen' or 'hydrogen' or 'HYDROGEN': 
     answer.set('Correct!') 
    if e == 'He' and g == 'Helium' or 'helium' or 'HELIUM': 
     answer.set('Correct') 
    if e == 'O' and g == 'Oxygen' or 'oxygen' or 'OXYGEN': 
     answer.set('Correct!') 
    if e == 'C' and g == 'Carbon' or 'carbon' or 'CARBON': 
     answer.set('Correct!') 
    if e == 'Ne' and 'Neon' or 'neon' or 'NEON': 
     answer.set('Correct!') 
    if e == 'U' and g == 'Uranium' or 'uranium' or 'URANIUM': 
     answer.set('Correct!') 
    if e == 'Na' and g == 'Sodium' or 'sodium' or 'SODIUM': 
     answer.set('Correct!') 
    if e == 'Ar' and g == 'Argon, argon' 'ARGON': 
     answer.set('Correct!') 
    if e == 'K' and g == 'Potassium' or 'potassium' or 'POTASSIUM': 
     answer.set('Correct!') 
    if e == 'Mg' and g == 'Magnesium' or 'magnesium' or 'MAGNESIUM': 
     answer.set('Correct!') 
    if e == 'Cl' and g == 'Chlorine' or 'chlorine' or 'CHLORINE': 
     answer.set('Correct!') 
    if e == 'B' and g == 'Boron' or 'boron' or 'BORON': 
     answer.set('Correct!') 
    if e == 'Au' and g == 'Gold' or 'gold' or 'GOLD': 
     answer.set('Correct!') 
    if e == 'Pd' and g == 'Palladium' or 'palladium' or 'PALLADIUM': 
     answer.set('Correct!') 
    if e == 'Kr' and g == 'Krypton' or 'krypton' or 'KRYPTON': 
     answer.set('Correct!') 
    if e == 'Ca' and g == 'Calcium' or 'calcium' or 'CALCIUM': 
     answer.set('Correct!') 
    if e == 'Pm' and g == 'Promethium' or 'promethium' or 'PROMETHIUM': 
     answer.set('Correct!') 
    if e == 'Ag' and g == 'Silver' or 'silver' or 'SILVER': 
     answer.set('Correct!') 
    if e == 'Rb' and g == 'Rubidium' or 'rubidium' or 'RUBIDIUM': 
     answer.set('Correct!') 
    if e == 'Y' and g == 'Yurium' or 'yurium' or 'YURIUM': 
     answer.set('Correct!') 
    if e == 'Ir' and g == 'Iridium' or 'iridium' or 'IRIDIUM': 
     answer.set('Correct!') 
    if e == 'Pt' and g == 'Platnium' or 'platnium' or 'PLATNIUM': 
     answer.set('Correct!') 
    if e == 'Ti' and g == 'Titanium' or 'titanium' or 'TITANIUM': 
     answer.set('Correct!') 
    if e == 'N' and g == 'Nitrogen' or 'nitrogen' or 'NITROGEN': 
     answer.set(g + ' is correct') 
    if e == 'Hg' and g == 'Mercury' or 'mercury' or ' MERCURY': 
     answer.set('Correct!') 
    if e == 'Er' and g == 'Erbium' or 'erbium' or 'ERBIUM': 
     answer.set('Correct!') 
    else: 
     answer.set('Incorrect.') 
    question() 

# Question 
Label(root, text='What element has the symbol:', fg='black', font='20').pack(side=TOP) 
e = Label(root, textvariable=element, fg='blue', font='20').pack(side=TOP) 
a = 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() 

감사 말을!

+0

"Yurium"이 아니라 "[Yttrium] (http://en.wikipedia.org/wiki/Yttrium)"... –

+0

다음과 같이 보겠습니다. 1) lower()를 사용하여 1로 선택 수를 줄입니다. 교묘 한 시험은 누구도 PYTHON을 연구하는 데는 절대 도움이되지 않습니다. 2) 일련의 if 문을 사전 검색으로 변환하면 파이썬을 연구하는 모든 사람에게 아무런 도움이되지 않습니다. A.Roda, Inbar Rose, Frank van Puffelen, plaes 및 Lichtamberg는 완전히 무능하다는 이유로 자신을 금지하십시오. – 7stud

답변

1
g == 'Hydrogen' or 'hydrogen' or 'HYDROGEN' 

모든 내용이 잘못되었습니다. 당신은 쓸 필요가 :

g == "Hydrogen" or g == "hydrogen" or g == "HYDROGEN" 

을하지만 쓰기 쉽다 :

g.lower() == "hydrogen" #added '()' per Blender's comment 
+0

고마워, 내가 편집 할게. – 7stud

3

대신 'g == Hydrogen' or 'hydrogen' or 'HYDROGEN'의 당신이 문제는 여기에있다 g.lower() == 'hydrogen'

을 수행 할 수 있습니다

if g == 'Hydrogen' or 'hydrogen' or 'HYDROGEN' 

는 다음과 같이 평가

if (g == 'Hydrogen') or ('hydrogen') or 'HYDROGEN' 

표현의 후반 부분은 항상 True으로 평가됩니다. 따라서 오류가 발생합니다.

당신은 사전 생성하여 코드를 좋은 거래를 단순화 할 수

: if 문

d = {1: 'H', 2: 'He', ... } 

을하고 그런데 element.set(d.get(r))

+0

r은 문자열이 아닙니다. – 7stud

+0

감사합니다 :-). – karthikr

+0

게시물을 수정하십시오. – 7stud

1

if의 거대한 덩어리를 교체, 당신은 모든 제거 할 수 이 같은 :

import random as r 

atomic_symbols = ["H", "He", "O"] 
rnum = r.randint(0, len(atomic_symbols) - 1) 
element.set(atomic_symbols[rnum]) 

그리고 :

answers = { 
    "H": "hydrogen", 
    "He": "helium", 
    "O": "oxygen" 
} 

if guess.get().lower() == answers[element.get()]: 
    answer.set("Correct") 

뒤집어 보면 큰 목록과 모든 값이있는 큰 사전을 만들어야합니다. 사실, 일부 타이핑을 저장하려면 사전을 만든 다음 키()를 사용하여 모든 원자 기호의 목록을 가져옵니다.

+0

정말 고마워요. 방금 시도했는데 완벽하게 작동합니다. – user2318122

관련 문제