【问题标题】:Triple nesting while loops Python 3.6.5 is not indefinite [duplicate]三重嵌套while循环Python 3.6.5不是无限的[重复]
【发布时间】:2018-07-01 14:58:42
【问题描述】:

我正在尝试对 while 循环进行三重嵌套。 如果输入十进制数会返回错误,然后如果输入大于 31 的数字会返回错误,但如果再次尝试输入十进制数代码会停止。无论用户输入错误格式多少次或以何种顺序,都需要帮助使其无限循环。还需要验证输入的日期在给定月份的天数内是否有效?

import string

varD= input("Enter Date/Day:")

while varD.isdigit() or varD.isspace()\
    or varD.isdecimal or int(varD)>31 \
    or int(varD)==26 or int(varD)<=0:
    print ("Error: Enter Valid Number!")
    varD= input("Enter Day:")

else:
    print ("You have entered:", varD)

【问题讨论】:

  • 你有 3 个不同的连续循环。为什么不直接使用一个 while True 循环呢?

标签: python python-3.x


【解决方案1】:

使用无限循环并仅在满足所有条件时才中断。

while True:
    varD = input("Enter Day:")
    if varD.isdigit() and not varD.isspace() and varD.isdecimal() \
            and int(varD) < 32 and int(varD) != 26 and int(varD) > 0:
        break
    print("Error: Enter Valid Number!")
print("You have entered: %s" % varD)

另外,您对术语三重嵌套的理解是不正确的。三重嵌套的意思是这样的:

while expression1:
    while expression2:
        while expression3:
            do_something()

【讨论】:

  • 我会考虑将那长条条件拆分成单独的行。
  • 确实,我也会。
  • 我实际上是指几个if 声明,对不起。
  • 我不认为我现在写它的方式比两个if 语句的可读性差,但我可以看到你来自哪里。
  • 是的,我刚刚意识到我必须在最后一个打印语句上完成代码,因为你的只是占位符,它可以工作。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多