Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python while循环布尔值仅显示为True_Python_Loops_While Loop_Boolean - Fatal编程技术网

Python while循环布尔值仅显示为True

Python while循环布尔值仅显示为True,python,loops,while-loop,boolean,Python,Loops,While Loop,Boolean,我有麻烦了。我希望代码循环并询问‘嘿,你饿了吗?’,但前提是饥饿变量不是True或False。然而,无论我输入什么答案,它都表现得好像是真的 在我的脑海中,如果我键入一个yes的变体,那么Hunging应该是真的,代码应该停止。如果我键入no的变体,那么代码应该为False并停止。如果我都不输入,那么饥饿就不是真的或假的,应该循环,再次提问 hungry = None while hungry != True or False: hungry = input('Hey, are you

我有麻烦了。我希望代码循环并询问‘嘿,你饿了吗?’,但前提是饥饿变量不是True或False。然而,无论我输入什么答案,它都表现得好像是真的

在我的脑海中,如果我键入一个yes的变体,那么Hunging应该是真的,代码应该停止。如果我键入no的变体,那么代码应该为False并停止。如果我都不输入,那么饥饿就不是真的或假的,应该循环,再次提问

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')
在Python中,不能说x==a、b或c,然后让它做你想做的事情。您需要在[a,b,c]中使用if x。

条件饥饿=='yes'或'ye'或'y'或'yeah'不检查饥饿=='yes'或饥饿=='ye'或饥饿=='y'或饥饿=='yeah'是否为真。它检查饥饿==是或'ye'或'y'或'yeah',只有饥饿==是具有真值

同样饥饿!=对或错是检查饥饿!=True或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')
试着这样做:

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')

这是因为您编写的代码就像英语一样。当您将一个变量与两个布尔值进行比较时,您需要首先将该变量与第一个布尔值进行比较,然后将该变量与第二个布尔值进行比较。所以当你饿的时候正确或错误应该在饥饿时出现!=是真的还是饿了!=错误的如果你用后者,你会得到错误的答案。对所有其他if和while语句执行相同的操作。因此,您的代码应该是:

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')
编辑:
其他人则建议成员声明也能起作用。然而,由于您似乎是所编写代码的初学者,我认为我的解释将更容易让您理解

您的代码无法工作,因为您以错误的方式使用语句,例如饥饿!=无论正确与否,以下是代码的工作版本:

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')

这里有一些问题,尤其是使用相同的变量名用于不同的目的,这不是一种好的风格,而且在python中也没有真正使用控制流原语-请查阅

简明的工作解决方案如下所示:

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')
我们在上面得到的是:

我们正在开始一个无限循环,而这是真的

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

如果用户在“是”或“否”上输入变量,它将打印响应并中断while循环

如果他们没有提供是/否的答案,它将再次返回循环的开始部分(即不中断)


在REPL中输入'True或False',看看你得到了什么。或者你也可以使用如果a、b、cyx中的x你是对的,我还没有介绍会员声明,你的代码对我到目前为止介绍的内容很熟悉。然而,我发现PDUBS最有用,因为它看起来更干净,代码更少,而且我事先不知道in语句。谢谢你的邀请help@NathanByrne是的,我明白。没问题。这是我的荣幸。注意,你可以饿着肚子写True或False,但python短路求值on或将返回True,因此比较总是饥肠辘辘的!=是的,我认为这里有接受教育的机会。饥饿变量从无变为布尔,变为字符串,变为布尔,等等。这在这个小场景中是可行的,但我认为OP不会从这个方法中学到太多东西。我在下面添加了一个答案来解释。很好。我的重点是让他们写的东西发挥作用,但不断改变饥饿的类型肯定是不好的风格-P