【问题标题】:Python always returning False in the boolean comparisonPython 在布尔比较中总是返回 False
【发布时间】:2015-02-12 15:41:06
【问题描述】:

这是我的代码。无论我为 A 和 B 输入什么,它总是返回 false..

def TorF():
    for i in range(10):
        A = input('A: ')
        B = input('B: ')
        print((A and not B) or (B and not A))

TorF()

结果:

>>> 
A: True
B: False
False
A: True
B: True
False
A: False
B: True
False

【问题讨论】:

    标签: python python-3.x boolean


    【解决方案1】:

    在 3.X 中,input 返回一个字符串,因此您实际上并没有在布尔值上执行布尔逻辑。它总是评估为False,因为对于任何非空字符串snot sFalse;对于s 的任何值,s and FalseFalse;当然False or FalseFalse。尝试事先显式转换 A 和 B 的类型。

    def TorF():
        for i in range(10):
            A = input('A: ').lower() == "true"
            B = input('B: ').lower() == "true"
            print((A and not B) or (B and not A))
    
    TorF()
    

    结果:

    A: True
    B: False
    True
    A: True
    B: True
    False
    A: False
    B: True
    True
    

    【讨论】:

    • 你也可以考虑在这里使用ast.literal_eval();它将接受 TrueFalse 文字字符串,返回布尔值。
    • 我应该从哪里导入 ast?我收到一条错误消息,提示未定义名称“ast”。
    • 你事先做了import ast吗?
    猜你喜欢
    • 2017-04-22
    • 1970-01-01
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多