【问题标题】:How to cleanly ask user for input and allow several types?如何干净地要求用户输入并允许多种类型?
【发布时间】:2016-08-09 15:44:13
【问题描述】:

所以这是用户输入的提示,它工作得很好。我在控制台上打印了一些名称和相关的(基于 1 的)数字,供用户选择。我还可以通过输入 q 来选择退出。 数字有效的条件是 a) 它是一个数字 b) 它小于或等于名称的数量且大于 0。

while True:    
    number = str(input("Enter number, or q to quit. \n"))
    if number == "q":
        sys.exit()
    try:
        number = int(number)
    except:
        continue
    if number <= len(list_of_names) and number > 0:
        name = list_of_names[number-1]
        break

这段代码没有问题,只是我觉得它很难阅读,而且不是很漂亮。由于我是python新手,我想问你们,你们如何更干净地编写这个提示?更具体地说:我如何要求用户输入可以是字符串或整数的输入?

【问题讨论】:

  • 除了缩进,看起来还不错。您可以使用elsefinally 或多个excepts。另外,if number in range(..)。而且t认为输入已经返回了一个字符串。
  • if number.isdigit() and int(number) in range(len(list_of_names)):
  • @StevenRumbalski 这并没有真正帮助,因为当您索引列表时,您必须将输入转换为 int 再次,并且数字也是从 1 开始的。
  • 这可能属于code-review
  • @Rawing:我不确定你的反对是基于性能还是优雅。如果性能真的没关系。

标签: python python-3.x coding-style code-cleanup


【解决方案1】:

简单一点:

while True:    
    choice = str(input("Enter number, or q to quit. \n"))
    if choice.lower() == "q":
        sys.exit()
    elif choice.isdigit() and (0 < int(choice) <= len(list_of_names)):
        name = list_of_names[int(choice)-1] 
        break

【讨论】:

  • 所以这行得通。你正在避免 try/except 部分,我喜欢这样。 :)
【解决方案2】:

只是小写它。

number = str(input("Enter number, or q to quit. \n"))
number = number.lower()

这将使 q 小写,所以如果他们按其他东西,是否按 shift 也没关系,只需创建一个 if 语句,将 while 循环设置为 true。

【讨论】:

    猜你喜欢
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多