2009-09-08 86 views
4

我正在學習Python和我有這個簡單的代碼麻煩:故障與簡單的Python代碼

a = raw_input('Enter a number: ') 

if a > 0: 
    print 'Positive' 
elif a == 0: 
    print 'Null' 
elif a < 0: 
    print 'Negative' 

它的偉大工程,除了因爲它總是打印「積極的」,無論我輸入正數還是負數還是零。我猜有一個簡單的解決方案,但我不能找到它;-)提前

回答

7

由於您使用raw_input你所得到的值作爲一個字符串,它始終被認爲是大於0(即使String爲「-10」)

相反,嘗試使用輸入('輸入數字:')和python會爲你做類型轉換。

最後的代碼應該是這樣的:

a = input('Enter a number: ') 
if a > 0: 
    print 'Positive' 
elif a == 0: 
    print 'Null' 
elif a < 0: 
    print 'Negative' 

然而,由於許多人都指出,使用輸入()可能會導致一個錯誤,因爲它實際上解釋傳入的Python對象

一個更安全的方法來處理這可投用的raw_input所需的類型,如:

a = int(raw_input('Enter a number: ')) 

但要注意,你仍然需要做一些錯誤韓德林g在這裏避免麻煩!

+0

謝謝!做了這個工作;-) – trolle3000 2009-09-08 18:46:27

+4

input()以這種方式工作的原因是因爲任何由用戶鍵入的內容都由解釋器評估......這是非常不安全的。搜索互聯網將提供很多原因,但足以說在try-catch中執行int(raw_input())應該被認爲是更好的做法。 – nilamo 2009-09-08 20:00:32

+2

沒錯,你可以在這裏找到這方面的討論: http://mail.python.org/pipermail/tutor/2003-January/019634.html 最初的例子對於讓一個剛剛接觸python的人很有用。一旦你開始考慮錯誤處理,你會想驗證任何和所有的用戶輸入,並在那時raw_input(...)將證明更有用。 – 2009-09-08 20:16:43

2

raw_input

由於被存儲爲一個字符串,而不是一個整數。

在執行比較之前嘗試使用a = int(a)a = int(a)

5
raw_input 

,所以你需要轉換a這是一個字符串整數第一返回一個字符串。在進行數字比較之前,使用int()將其轉換爲整數。

a = int(raw_input('Enter a number: ')) 
if a > 0: 
    print 'Positive' 
elif a == 0: 
    print 'Null' 
elif a < 0: 
    print 'Negative' 

或者,input()將爲您做類型轉換。

a = input('Enter a number: ') 
7

這是因爲a是一個字符串作爲輸入:

1

原始輸入將返回一個字符串,而不是一個整數。要轉換它,試試你的raw_input語句後立即加入這一行:

一個= INT(一)

這將字符串轉換爲整數。儘管如此,您可以通過爲其提供非數字數據來使其崩潰,所以要小心。

+0

也工作正常。 – trolle3000 2009-09-08 18:48:21

7

擴展我對accepted answer的評論,這裏是我該怎麼做的。

value = None 
getting_input = True 

while getting_input: 
    try: 
     value = int(raw_input('Gimme a number: ')) 
     getting_input = False 
    except ValueError: 
     print "That's not a number... try again." 

if value > 0: 
    print 'Positive' 
elif value < 0: 
    print 'Negative' 
else: 
    print 'Null' 
+0

你不需要在這裏獲得輸入,你可以使用'while not value'。 :P – monkut 2009-09-09 03:43:15

+0

雖然是真的,但我更喜歡對發生的事情相當明確,所以代碼的意圖一目瞭然,沒有任何額外的想法。 – nilamo 2009-09-09 05:35:27