Python 语句中的布尔逻辑


# Given three ints, a b c, print True if b is greater than a,  
# and c is greater than b. However, with the exception that if 
# "bOk" is True, b does not need to be greater than a. 
a = int(input())
b = int(input())
c = int(input())
bOk = bool(input())
print(((bOk and c > b) or (b > a and c > b)))

我的程序适用于除"3 2 4 False"以外的所有组合

我不明白为什么它为这种组合打印 True。第一个闭集应该返回 False,因为 bOk = False,第二个闭集也应该返回 False,因为 b> a 是 False。

解释将不胜感激。

布尔

值是两个常量对象 False 和 True。

对于布尔字符串

   bool('')
=> False
   bool('false')
=> True

bool 检查列表是否有对象。如果它为空,它将返回 False,如果不是空,它将返回 True。

在你的例子中,bOk = bool(input(((,有一个值,因此 bOk 返回 True,无论它有什么对象。因此,您拥有的输出。

注释和其他答案已经涵盖了对 OP 错误的解释。我宁愿展示通常在更受限制的上下文(生产?

代码没有经过全面测试,也不是最优雅的,尽管重点是:清理输入。总是。并以完全不同的方式提示用户选择问题(是/否,真/假(。

在下面的示例中,bool 提示被清理为"此值是唯一被视为 True 的值;所有其他值均为 False"。

#!/usr/bin/env python
"""Just an example."""

def input_type(prompt, type_):
    """Prompt a user to input a certain type of data.
    For a sake of simplicity type_ is limited to int and str.
    :param prompt: prompt message to print
    :param type_:  type of a data required
    :type prompt:  str
    :type type_:   int or bool
    :return: data of a required type retrieved from STDIN
    :rtype:  type_
    """
    accepted_types = [int, str]
    if isinstance(prompt, str):
        if any(type_ == atype for atype in accepted_types):
            while True:
                user_input = input(prompt)
                try:
                    return type_(user_input)
                except ValueError:
                    continue
        else:
            errmsg = 'Requested type is unsupported by this function: %s'
            errmsg = errmsg % type_.__name__
    else:
        errmsg = 'Prompt must be a string: got %s instead'
        errmsg = errmsg % type(prompt).__name__
    raise Exception(errmsg)

def input_bool(prompt, as_true):
    """Prompt user to answer positively or negatively.
    :param prompt:  prompt message to print
    :param as_true: value to interpret as True
    :type prompt:  str
    :type as_true: str
    :return: user answer
    :rtype:  bool
    """
    if isinstance(as_true, str):
        return input_type(prompt, str) == as_true
    else:
        errmsg = "'as_true' argument must be a string: got %s instead"
        errmsg = errmsg % type(as_true).__name__
    raise Exception(errmsg)

if __name__ == '__main__':
    a = input_type('Enter first integer: ', int)
    b = input_type('Enter second integer: ', int)
    c = input_type('Enter third integer: ', int)
    bOk = input_bool('Enter boolean value (True/False): ', 'true')
    # Result
    print(((bOk and c > b) or (b > a and c > b)))

希望这对如此庞大的列表有所帮助和抱歉。处理用户输入始终是一项棘手的任务。

你的代码适用于Python 2.x,

因为在Python 2.x中,input((等于eval(raw_input(prompt((。

>>> a=int(input())
3
>>> b=int(input())
2
>>> c=int(input())
4
>>> bOk=bool(input())
False
>>> print(bOk and c > b)
False
>>> bOk
False
>>> print(((bOk and c > b) or (b > a and c > b)))
False

但是在Python 3.x中,input((等于raw_input((,所以bOk等于bool("False"(,等于True。

>>> bOk=bool(input())
False
>>> print(bOk and c > b)
True
>>> bOk
True
您可以将input(

(更改为eval(input(((。

"Python 2 到 3 转换工具将用 eval(input((( 替换对 input(( 的调用,用 input(( 替换对 raw_input(( 的调用。

请参阅 https://www.python.org/dev/peps/pep-3111/

相关内容

  • 没有找到相关文章

最新更新