Python while循环布尔只显示为True

时间:2018-03-12 01:52:21

标签: python loops while-loop boolean

我遇到了麻烦。我希望代码循环并询问'Hey, are you hungry?',但前提是饥饿变量不是TrueFalse。但是,无论我输入什么答案,它就好像它是True

在我看来,如果我输入的是“是”的变体,那么饥饿应该是True并且代码应该停止。如果我输入的变体为no,则代码应为False并停止。如果我没有输入任何这些,那么饥饿将不会是TrueFalse并且应该循环,再次提出问题。

hungry = None
while hungry != True or False:
    hungry = input('Hey, are you hungry?')
    if hungry == 'yes' or 'ye' or 'y' or 'yeah':
        print ('oh you hungry huh')
        hungry = True
    elif hungry == 'no' or 'n' or 'nah' or 'nope':
        print ('no food for you then')
        hungry = False
    else:
        print ('its a simple yes or no question pls')

6 个答案:

答案 0 :(得分:1)

你在这里遇到一些问题,尤其是为了一些不同的目的使用相同的变量名称,这不是好的风格,也没有真正使用python中的控制流原语 - 查找它(https://wiki.python.org/moin/WhileLoop )。

简明扼要的工作解决方案如下:

while True:
    hungry = input('hungry?')
    if hungry in ('y','yes'):
        print('Eat up')
        break
    elif hungry in ('n','no'):
        print('Ok not hungry')
        break
    else:
        print('You need to tell me')

我们上面得到的是:

  • 我们正在开始一个无限循环(同时为True)

  • 我们将用户输入分配给饥饿变量 - 这就是它的全部内容

  • 如果用户在'是'上输入变体或者没有'它会打印一个响应并突破while循环

  • 如果他们没有提供是/否答案,则会再次回到循环的开头(即没有休息)

答案 1 :(得分:0)

你不能在Python中说if x == a or b or c并让它做你想做的事。您需要改为使用if x in [a, b, c]

答案 2 :(得分:0)

条件hungry == 'yes' or 'ye' or 'y' or 'yeah'不会检查hungry == 'yes'hungry == 'ye'hungry == 'y'hungry == 'yeah'是否为真。它会检查(hungry == yes) or 'ye' or 'y' or 'yeah'(除hungry == yes之外的任何内容都有真值)

同样hungry != True or False正在检查(hungry != True) or False,因此条件的False部分无法执行任何操作。

你应该把它写成:

hungry = None
while hungry not in (True, False):
    hungry = input('Hey, are you hungry?')
    if hungry in ('yes', 'ye', 'y', 'yeah'):
        print ('oh you hungry huh')
        hungry = True
    elif hungry in ('no', 'n', 'nah', 'nope'):
        print ('no food for you then')
        hungry = False
    else:
        print ('its a simple yes or no question pls')

答案 3 :(得分:0)

以这种方式尝试:

sorted(my_list, key=lambda x: sum(x))

答案 4 :(得分:0)

这是因为你编写的代码就像英文一样。当您将变量与两个布尔值进行比较时,首先要将变量与第一个布尔值进行比较,然后将变量与第二个布尔值进行比较。因此while hungry != True or False应为while hungry != True or hungry != False。如果你使用后者,你会得到错误的答案。对所有其他ifwhile语句执行相同操作。所以你的代码应该是:

hungry = None
while hungry != True or hungry == False:
    hungry = input('Hey, are you hungry?')
    if hungry == 'yes' or hungry == 'ye' or hungry == 'y' or hungry == 'yeah':
        print ('oh you hungry huh')
        hungry = True
    elif hungry == 'no' or hungry =='n' or hungry =='nah' or hungry =='nope':
        print ('no food for you then')
        hungry = False
    else:
        print ('its a simple yes or no question pls')

编辑: 其他人则建议会员发言也有效。但是,既然看起来你是你编写的代码的初学者,我想我的解释会更容易理解。

答案 5 :(得分:0)

您的代码无效,因为您使用了错误的语句,例如hungry != True or False,这是您的代码的工作版本:

hungry = None
while hungry not in (True, False): # Check if hungry is not True or False
    hungry = input('Hey, are you hungry?')
    if hungry in ('yes', 'ye', 'y', 'yeah'):
        print ('oh you hungry huh')
        hungry = True
    elif hungry in ('no', 'n', 'nah', 'nope'):
        print ('no food for you then')
        hungry = False
    else:
        print ('its a simple yes or no question pls')