1

我做了简单的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
>>> 

如果下雨是假的,它会覆盖SweaterCap。但是我的代码甚至给出了 trueisraining_str == 0israining_str == 1

我在哪里做错了?

4

3 回答 3

7

这是你的问题:

>>> bool("0")
True

任何非空字符串在转换为布尔值时都是 True。您可以bool(int(israining_str))转换为intthen bool,如果该人输入字符串,它将为您提供数字零"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。

您将非空字符串传递给此函数,非空字符串为 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 回答