1

2つの入力を取り、テキストを出力する単純な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
>>> 

raining が false の場合、シュラウドはSweaterまたはを与えCapます。しかし、私のコードは trueisraining_str == 0またはisraining_str == 1

私はどこで間違っていますか?

4

3 に答える 3

7

これがあなたの問題です:

>>> bool("0")
True

ブール値に変換されると、空でない文字列はすべて True になります。bool(int(israining_str))人が文字列を入力するintbool、数値ゼロが得られます"0"

于 2012-10-15T18:28:13.300 に答える
2

Python 3.x を使用していますか? その場合input、文字列を返します。 bool(youstring)文字列が空でない場合は True を返します。

于 2012-10-15T18:28:26.310 に答える
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
于 2012-10-15T18:31:19.337 に答える