【问题标题】:Python bool + bool returns value 2 [duplicate]Python bool + bool 返回值 2 [重复]
【发布时间】:2021-11-11 23:48:09
【问题描述】:

当我在 python3 中执行这段代码时

x= bool(input())
y= bool(input())
print(x+y)

当我输入True TrueFalse FalseTrue False时,
我的输出为2
为什么会这样?我希望 10 作为输出。

【问题讨论】:

  • 给那些投票关闭它的人的说明,因为它已经有了答案:不,它没有。 OP 清楚地表明他们已经知道 FalseTrue 的行为类似于 01。这就是链接的答案。但这不是这里的问题。 Here 混淆是关于 input() 返回的内容,链接的答案没有说明。链接的答案本身就很好 - 但它与 this 问题完全无关。

标签: python python-3.x boolean


【解决方案1】:

Input 将您的输入转换为string 格式!
bool(str) 为您提供True 状态!然后你尝试做True + True 所以你得到2!

x = bool(input()) #--> x= True
y = bool(input()) #--> y= True
print(x+y) #--> True + True = 2

【讨论】:

【解决方案2】:

input() 在 Python 3 中返回一个字符串。不执行数据转换。所以你得到的输入是字符串"True" 和/或"False"。然后将bool() 应用于非空字符串返回True

>>> bool("True")
True
>>> bool("False")
True
>>> bool("just about anything")
True
>>> bool("") # except an empty string
False

这就是为什么无论你输入什么,你总是得到 2。两个输入都变为True,在数字上下文中等于 1。

>>> True == 1
True

如果你这样做,人们会冲你大喊大叫,eval() 是最方便(尽管危险!)的方式来评估字符串,就像它是 Python 代码一样:

>>> eval("True")
True
>>> eval("False")
False

这很危险,因为eval() 将评估任何 Python 表达式,因此如果您不信任您的输入,它可能会诱使您的程序执行任何操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2023-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多