如果输入不在索引中,如何在列表中打印特定项目

时间:2019-01-14 16:44:09

标签: python python-3.x

我试图让此代码返回列表项(如果它在索引之内),但如果不在索引中,则默认为索引中的特定项

下面的代码是一个示例:

messages = ["Hello", "Howdy", "Greetings"]
user_num = int(input("Enter a Number Between 1-3: "))
def message_prompt(num):
    num_check = num - 1
    message = messages[num_check]
    if message in messages:
        print(message)
    else:
        print(messages[2])
message_prompt(user_num)

使用此代码,由于变量不在索引范围之外,因此只会在消息中出错。 我该怎么做才能解决此问题?

3 个答案:

答案 0 :(得分:2)

Python不支持使用无效索引对列表进行索引。一种惯用的解决方案是使用try / except

messages = ["Hello", "Howdy", "Greetings"]
user_num = int(input("Enter a Number Between 1-3: "))

def message_prompt(num):
    try:
        print(messages[num - 1])
    except IndexError:
        print(messages[2])

message_prompt(user_num)

请注意,允许使用负索引。因此,如果输入-2,上述解决方案将不会出错;在这种情况下,将打印倒数第二个列表项。

答案 1 :(得分:2)

如果您更愿意使用询问权限,则可以先进行测试:

array(1) {\n  ["videos"]=>\n  string(43) "https://www.youtube.com/watch?v=TxvpctgU_s8"\n}\n`

尽管python传播 "Ask forgiveness not permission"(即messages = ["Hello", "Howdy", "Greetings"] user_num = int(input(f"Enter a Number Between 1-{len(messages)}: ")) - 1 # make it zero based def message_prompt(num): print(messages[num if num < len(messages) else -1]) # default to the last one message_prompt(user_num)

try: ... except: ...是三元表达式,如果足够小,则使用num if num < len(messages) else -1,否则默认为-1(最后一个元素)。

请参阅:Does Python have a ternary conditional operator?

答案 2 :(得分:0)

您可以使用try else,也可以在while循环中验证该值,直到指定了合法的输入为止:

messages = ["Hello", "Howdy", "Greetings"]
user_num = int(input("Enter a Number Between 1-3: "))
def message_prompt(num):
num_check = num - 1
    try:
        message = messages[num_check]
        print(message)

    except IndexError:
        print(messages[2])

message_prompt(user_num)

我建议您先试读try块,以防止用户输入。