2013-08-29 211 views
0

我的程序工作正常檢查與元素週期表數量和元素與此程序的文件:Python文件需要幫助

userline=input('Enter element number or element name: ') 
userline=userline.capitalize() 
f=open('periodic_table.txt') 
while userline: 
for line in f: 
    number,element=line.split() 

,但如果我加入到這樣的程序:

else: 
    print('Thats not an element!') 
    userline=input('Enter element number or element name: ') 
    userline=userline.capitalize() 

保持它打印,即使我們把正確的元素數或正確的名稱,而不是一個元素,

+0

嘗試使用調試器 - 插入'import pdb; pdb.set_trace()'後面的輸入法和步驟通過代碼,看看發生了什麼 –

回答

0

你目前的方法不工作的原因是因爲你迭代通過一個列表。如果您執行userline != element,那麼您第一次遇到與用戶輸入不相同的元素或數字時,程序將打印錯誤消息。由於你正在循環每個週期表元素,所以你會得到一堆錯誤消息!

請嘗試先將每個元素週期表元素和數字添加到字典或列表中。這樣,您可以檢查用戶輸入的內容是否在字典內,並返回一條錯誤消息,而不必遍歷整個事物。

這裏是你可能想嘗試,而不是什麼簡單的例子:

# The "with" statement automatically closes the file for you! 
with open('periodic_table.txt') as f: 
    numbers = {} 
    elements = {} 
    for line in f: 
     num, element = line.split() 
     numbers[num] = element 
     elements[element] = num 

while True: 
    userline = input('Enter element number or element name: ') 
    userline = userline.capitalize() 

    if userline in numbers: 
     print('Element number ' + userline + ' is ' + numbers[userline]) 
    elif userline in elements: 
     print('Element number for ' + userline + ' is ' + elements[userline]) 
    else: 
     print("That's not real!") 

(警告:我沒有嘗試運行這個,所以你可能不得不調整它有點以確保其工作正常)

+0

仍然然後我想結束循環時,用戶輸入空白,所以當我再次輸入上面的輸入時,同樣的錯誤,什麼都不打印但再次輸入n n –

+0

@MystIcAce - 嘗試修改「if」語句,以便檢查userline ==「」(如果它等於空字符串)。如果是,則使用'break'關鍵字來結束while循環。 – Michael0x2a

+0

排序出來,謝謝alott SIR –