2010-04-11 59 views
4

我的問題是,爲什麼這些表達式是錯誤的?爲什麼這個邏輯表達式在python False中?

Python 2.6.4 (r264:75706, Dec 7 2009, 18:45:15) 
[GCC 4.4.1] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 

>>> num = raw_input("Choose a number: ") 
Choose a number: 5 
>>> print num 
5 
>>> print (num < 18) 
False 
>>> print (num == 5) 
False 

,因爲如果我試試這個:

>>> print (num > 0) 
True 

表達正常工作。

+0

只是說明:如果您在交互式控制檯中執行了'num'而不是'print num',那麼您會立即注意到您的錯誤,因爲它會打印出'5''而不是'5' – 2010-04-11 18:31:46

回答

9

本聲明:

num = raw_input("Choose a number: ") 

使得num一個,不是一個數字,儘管它的誤導性名稱。恰巧Python 2允許您將字符串與數字進行比較,並且在您的版本中認爲所有字符串都大於所有數字(該字符串的內容不起作用)。

在開始比較之前,使用num = int(num)來製作一個整數(並且確保使用try /除了在用戶鍵入數字以外的其他字符時捕獲可能的錯誤!)。

(在Python 3,函數的名稱更改,從raw_inputinput,它仍然返回一個字符串;但是在Python 3比較數字的字符串被認爲是一個錯誤,那麼你會得到一個例外,而不是TrueFalse在每次比較嘗試中)。

1

嘗試num = float(raw_input("Choose..."))

你評估你的布爾表達式的字符串。

3

變量num實際上並不包含數字5;它包含字符串"5"。因爲Python是強類型的,所以5 == "5"False。嘗試將其轉換成一個整數第一:

>>> print (int(num) < 18) 
True 
2

num是一個字符串。你不能將一個字符串與一個整數進行有意義的比較,並且一個字符串永遠不會等於一個整數(所以==返回false並且<>會返回他們想要的任何東西)。在比較字符串和整數時,<>不會拋出錯誤(在python 3之前)的原因是爲了能夠對異類列表進行排序。

相關問題