令人困惑的循环语句

时间:2020-11-03 15:44:05

标签: python

在下面的代码中,为什么没有将值分配给while循环和if语句?没有它,代码如何运行?

name = ""
while not name: 
    print ("Enter your name:")
    name = input()
    print ("How many guests will you have?")
    numOfGuests = int(input())
    if numOfGuests:
        print ("Be sure to have enough room for all you guests.")
        print ("Done")

为什么没有为while和if语句分配值?

4 个答案:

答案 0 :(得分:1)

while循环检查布尔条件(真/假)。对于您而言,在开始循环之前,变量select 'field1'||chr(9)||'field2' 的值为空字符串,因此语句name的计算结果为True。

将一个非空字符串添加到not name后,您将发现语句name的计算结果为False,因此您将退出while循环。

答案 1 :(得分:0)

在python中,无需明确将其与特定值进行比较即可评估值的“真实性”。判断真假的规则因对象而异。

  • 列表:空列表[]False。其他任何列表为True
  • 字典:空字典{}False。其他任何字典都是True
  • 字符串:空字符串""False。其他任何字符串是True
  • None:始终为False
  • 数字:0False。正数或负数为True

答案 2 :(得分:0)

不确定您要问什么。

只要name是空字符串,循环就会继续,前面的赋值确保第一次通过时都是正确的。

但是请注意,在name = input()行之后没有检查该条件。这意味着即使您只按回车键并 leave name为空,代码也会继续执行下一条语句,并询问您的来宾人数。我怀疑您想让这些 not 成为循环的一部分,这意味着应该将其与while而不是print对齐:

name = ""
while not name: 
    print ("Enter your name:")
    name = input()

print ("How many guests will you have?")
numOfGuests = int(input())
if numOfGuests:
    print ("Be sure to have enough room for all you guests.")
    print ("Done")

这样,在您键入非空名称之前,代码将不会继续通过名称提示。

但是,如果您输入空白行或类似“数字”的数字,但仍会出现异常,则异常终止。

答案 3 :(得分:0)

您似乎希望看到类似而名称== false 如果numOfGuests> 0:

if和while语句均检查是否为真。有时候这很明显,例如 numnumGuests> 0 。如果它大于0,那显然是对的;如果不是,那是错误的。

但是,当您考虑可以表示真假的所有方式时,则不需要显式语句。 如果numOfGuests 单独检查 numOfGuests 的评估结果是否为true。如果不是假,那是真的。如果值为 false,0,“” -即为空字符串,则为false。 (任何其他空容器也应显示为false)

因此,在这种情况下,while循环将检查 name 是否为非空字符串(因此为实际名称),而if语句正在检查非零数量的来宾。 / p>