2012-10-15 88 views
1

我做了簡單的python函數,它接受兩個輸入並輸出一些文本。簡單的Python函數

這,

def weather(): 
    israining_str=input("Is it raining (1 or 0) ? ") 
    israining = bool(israining_str) 

    temp_str=input("What is the temp ? ") 
    temp = float(temp_str) 

    if israining==True and temp<18: 
     return "Umbrella & Sweater" 
    elif israining==True and temp>=18: 
     return "Umbrella" 
    elif israining==False and temp<18: 
     return "Sweater" 
    else: 
     return "Cap" 

測試數據 -

>>> 
Is it raining ? 0 
What is the temp ? 43 
Umbrella 
>>> ================================ RESTART ================================ 
>>> 
Is it raining ? 1 
What is the temp ? 43 
Umbrella 
>>> 

如果下雨爲false,壽衣給SweaterCap。但我的代碼給出了真正的,即使israining_str == 0israining_str == 1

我在哪裏做錯了?

+0

Python版本? –

+0

註釋,通過與True或False進行比較直接測試bool值不是一種很好的風格,因爲您可以編寫「if israining:」。與「如果bool(israining)==真:」的意義相同,但是更短更清晰。 (同樣你應該在第三個分支中寫上「如果不是israining:」) –

+0

@AshwiniChaudhary 3.x – ChamingaD

回答

7

這裏是你的問題:當轉換成布爾

>>> bool("0") 
True 

任何非空字符串爲True。你可以做bool(int(israining_str))轉換爲int,然後bool,如果該人輸入字符串"0",它會給你數字零。

2

您是否正在使用python 3.x?如果是這樣,input返回一個字符串。如果字符串非空,bool(youstring)將返回True。

+0

ya 3.x.謝謝 :) – ChamingaD

1

根據python的文檔:

布爾(X)

一個值轉換爲一個布爾值,使用標準的真理測試程序。如果x爲false或省略,則返回False。

您將非空字符串傳遞給此函數,非空字符串爲True。

你可以寫這樣的事情:

t = int(israining_str) 

# here you can check if user's input is 0 or 1 and ask user again if it is not 

israining = False 
if t: 
    israining = True