2013-05-31 159 views
-1

這段代碼是否合法?是否可以將字符串與變量進行比較?

def ask_to_leave(): 
    if answer == 'y': 
    return False 
    elif answer == 'n': 
    return True 

我收到此錯誤:

Traceback (most recent call last): 
     File "MACROCALC.py", line 62, in <module> 
     main() 
     File "MACROCALC.py", line 17, in main 
     answer = input("Are you done using the calculator?(y/n)") 
     File "<string>", line 1, in <module> 
    NameError: name 'y' is not defined 

這裏是一個鏈接到我的代碼

http://pastebin.com/EzqBi0KG

+8

你沒有得到'NameError's用繩子... – Volatility

+1

這Python代碼是有效的 - 使用字符串時,你沒有得到'NameError'。除了這段代碼之外,你還有其他問題。 –

+3

你能展示完整的追溯? –

回答

8

你是在Python 2中,這解釋輸入與使用input() function Python代碼。改爲使用raw_input() function

answer = raw_input("Are you done using the calculator?(y/n)") 

當使用input(),所輸入的文本發送到eval()這需要一個有效的Python表達式,並y被看作是一個變量名:

>>> input('Enter a python expression: ') 
Enter a python expression: 1 + 1 
2 
>>> input('Enter a python expression: ') 
Enter a python expression: y 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<string>", line 1, in <module> 
NameError: name 'y' is not defined 
>>> input('Enter a python expression: ') 
Enter a python expression: 'y' 
'y' 

注意我是如何進入'y'與報價爲它工作;一個文字Python字符串表達式。 raw_input()有沒有這樣的限制:

>>> raw_input('Enter the second-last letter of the alphabet: ') 
Enter the second-last letter of the alphabet: y 
'y' 
+1

您的最後一點對於新用戶來說是完全誤導性的。以'2 + 2'爲例,而不是''y''比較好。 – kirelagin

+1

@ kirelagin:爲什麼這是誤導?我正在展示'input()'是用來處理'是/否'的問題。' –

+2

@kirelagin:這是第一個例子。 –

相關問題