【问题标题】:Print only a valid input in Python仅打印 Python 中的有效输入
【发布时间】:2021-11-16 23:29:53
【问题描述】:

如何修复以下代码以仅打印有效输入:

x = input("Y/N? ")
while x not in ["Y","N"]:
    x = input("Y/N? ")

如果我输入了无效的输入,这个会打印出来

 Y/N? what
 Y/N? is
 Y/N? Y

我不想打印whatis 之类的无效输入,我只想打印Y

【问题讨论】:

  • 它没有打印输入。这只是用户在输入时所输入的内容。
  • 你打电话给input() 提示信息,输入文字并希望这一切消失?
  • @Barmar 好的,这是有道理的。那么也许我的问题是错误的。我想我的问题是,有没有办法让用户输入而不显示在屏幕上?
  • stackoverflow.com/questions/4616813/…。这通常只用于密码。
  • @Barmar 每次该人未能输入 Y/N 时,它仍会打印一个新的空行。如果您正在寻找单键输入,您可以查看键盘事件

标签: python input


【解决方案1】:

您的代码实际上没有打印任何内容。您在终端窗口中看到的只是您要求用户输入的输入。当您在 python 中调用input("Message") 时,消息会打印到终端并等待用户输入

input("Please enter Y/N: ")

> [input]: Please enter Y/N: ...

此时,如果您键入“what”,您的 for 循环会检查它是否在您提供的列表中。由于它不存在,它会再次打印输入消息。在您的情况下,它会在您输入正确的值之前打印 3 次消息。

要看到程序成功,你可以在最后打印一些东西

x = input("Y/N? ")

while x not in ["Y","N"]:
    x = input("Please enter Y/N: ")
print("YaY, you finally entered:", x)

将输出:

> [input] Please enter Y/N: what
> [input] Please enter Y/N: is
> [input] Please enter Y/N: Y
> [output] YaY, you finally entered: Y

【讨论】:

    【解决方案2】:

    不是打印输入,而是用户输入的内容。如果您想将它放在单独的行中,请在 ? 之后添加 \n在字符串中。 如果您希望它打印值,只有在它们正确的情况下,您可以使用布尔值并不断检查它是否已更新。

    bool = False
    while not bool:
       x = input("Y/N?\n")
       if x.lower() == "y" or x.lower() == "n":
          bool = True
    #do whatever else you want
    

    【讨论】:

      猜你喜欢
      • 2021-02-15
      • 2018-06-11
      • 2023-02-20
      • 2021-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 2020-04-28
      相关资源
      最近更新 更多