【问题标题】:If And not taking second input [duplicate]如果不接受第二个输入[重复]
【发布时间】:2018-08-19 01:49:11
【问题描述】:

我的随机数猜测器代码如下所示:

if answer == 'n' and 'N':
    print 'I hope to see you next time, %s' % user
    exit()

但是,如果我输入 'N',控制台会空白并退出,而不是打印语句。 'n' 仍然有效,'Y' and 'y' 声明完美。所以我不确定'N' 发生了什么,但我可能忽略了一些简单的事情。谢谢

【问题讨论】:

标签: python pycharm


【解决方案1】:

让你失望的是你的奇怪语法。

解释器将其解释为

if (answer=='n') and 'N':

请注意,无论内容如何,​​非空字符串都被评估为True,因此这相当于

if (answer=='n')

要解决此问题,请将此行替换为

if answer=='n' and answer=='N':

请注意,此行永远不应评估为真。

如果你想让它工作,你应该尝试

if answer=='n' or answer=='N':

【讨论】:

    【解决方案2】:

    这里有两个错误。

    首先,if answer == 'n' and 'N' 不是检查两个值的正确方法。

    在英语中,我们可以说“If the house is big or red”,我们理解“big”和“red”都是指房子。但是 Python 不是这样的。您必须明确说明每个条件,如下所示:

    if answer == 'n' and answer == 'N':
    

    但是,即使你这样做了,你仍然有一个逻辑错误:答案怎么可能同时等于nN?它不能。使用or 而不是and

    【讨论】:

    • 我们不能让三个答案本质上相同
    • @RushabhMehta 这个问题显然是个骗局。这里甚至不需要一个答案。
    • @pault 这也很公平。我没有检查是否有欺骗,但我现在完全明白了
    【解决方案3】:

    更简洁和 Pythonic 的方式是:

    if answer in {'n', 'N'}:
    

    您将andor 混淆了。您希望在满足两个条件之一时打印print。所以,你应该这样做:

    if answer == 'n' or answer == 'N':
    

    或者,使用建议的第一种方式。

    【讨论】:

      【解决方案4】:

      你的说法是错误的。

      首先,当您检查互斥输入(在本例中为nN)时,您必须使用or 而不是andand 用于同时满足这两个条件的情况。

      其次,您必须使用 if answer == 'n' or answer == 'N',因为您的语句仅表示 if answer is 'n' and True,因为非空字符串的计算结果为 True。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多