【问题标题】:Logical error in while statement when used with or operator与或运算符一起使用时,while 语句中的逻辑错误
【发布时间】:2019-05-11 10:24:16
【问题描述】:

我编写了以下代码块。该代码在语法上是正确的,但有一些我找不到的逻辑错误。该代码接受名称、作者并根据用户输入分配一个要读取的布尔值。 while 循环部分有一些逻辑错误,由于解释器永远无法进入 while 循环,因此 add_book 函数失败,因为 read 没有分配值。

name = input("Title: ").lower()
author = input("Author: ").lower()
has_read = input("Mark as Read (y/n): ").lower()
while has_read not in ['n', 'y']:
    if has_read == 'y':
        read = True
    else:
        read = False
    add_book(name, author, read)      

【问题讨论】:

  • 开头:"if has_read not in [n, y]: if has_read equals y"…怎么会是不是“y”而等于“y”……?
  • 您的 while 循环条件导致无法进入循环。您要求用户输入 y 或 n,但如果他们输入了其他内容,您只能进入循环!
  • 我猜如果你得到的不是y 或n,你想重新要求用户输入一些东西。一旦你得到那个答案,你就可以退出 while 循环并标记你的书。
  • 你可能想要 " 而不是 y/n: 再次询问用户",然后在 while 之外执行 if。

标签: python python-3.x loops boolean


【解决方案1】:

如果他们没有提供有效的输入,您可能需要重新询问用户。也许是这样的:

name = input("Title: ").lower()
author = input("Author: ").lower()
valid = False
while not valid:
    has_read = input("Mark as Read (y/n): ").lower()
    if had_read in ['n', 'y']:
        valid = True
        if has_read == 'y':
            read = True
        else:
            read = False
        add_book(name, author, read)   

【讨论】:

    猜你喜欢
    • 2015-04-03
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 2017-01-01
    • 2012-11-22
    • 2020-11-29
    相关资源
    最近更新 更多