首页 > 解决方案 > 有没有办法让这个更小?

问题描述

我想要得到的只是输入list_只有0-10当它不是时,让用户再次输入,直到他们输入。因此,如果他们输入“空格键”、“p”、“[”或任何类似的内容,它应该只对 0-10 有效。这就是我能想到的:

list1 = ["bacon", "cheese", "cheddar", "milk", "apples", "lamp", "door", "blanket", "rug", "windows", "coat"]
list_ = input("What item do you want? (0-10) ")
while True:
    if (list_ != "0") and (list_ != "1") and (list_ != "2") and (list_ != "3") and (list_ != "4") and (list_ != "5"):
        list_ = input("What do you want from the list? (0-10)")
        if (list_ != "6") and (list_ != "7") and (list_ != "8") and (list_ != "9") and (list_ != "10"):
            list_ = input("What do you want from the list? (0-10)")
    elif list_ == "0":
        print(list1[0])
        break
    elif list_ == "1":
        print(list1[1])
        break
    elif list_ == "2":
        print(list1[2])
        break
    elif list_ == "3":
        print(list1[3])
        break
    elif list_ == "4":
        print(list1[4])
        break
    elif list_ == "5":
        print(list1[5])
        break
    elif list_ == "6":
        print(list1[6])
        break
    elif list_ == "7":
        print(list1[7])
        break
    elif list_ == "8":
        print(list1[8])
        break
    elif list_ == "9":
        print(list1[9])
        break
    elif list_ == "10":
        print(list1[10])
        break

标签: python

解决方案


列表按整数索引,因此如果将输入从字符串转换为整数,则它是一个单行。但是您必须担心输入数据错误。通常在 python 中,您只需尝试操作并捕获发生的任何异常。

list1 = ["bacon", "cheese", "cheddar", "milk", "apples", "lamp", "door", "blanket", "rug", "windows", "coat"]
while True:
    list_ = input("What item do you want? (0-10) ")
    try:
        print(list1[int(list_)])
        break
    except (IndexError, ValueError):
        print(list_, "is not a number between 0 and 10")

推荐阅读