如果输入超出索引范围,如何打印列表中的特定项

4

我正在尝试让这段代码在索引内返回列表项,但如果不在索引中,则默认返回索引中的特定项

下面的代码是一个例子:

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)

使用这段代码时,由于变量在索引的范围之外,它只会在消息处出错。我该怎么办才能修复它?


2
为什么不进行if检查以查看输入的数字是否在列表的索引范围内,如果是,则返回列表项,否则... - Paritosh Singh
3个回答

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,上述解决方案不会出错; 在这种情况下,将打印倒数第二个列表项。

2
如果你宁愿使用“请求许可”,你可以先测试一下:
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)

尽管Python传播“先行请求原谅,而不是事先征得许可”(即try: ... except: ...),但这个num if num < len(messages) else -1是一个三元表达式,如果小于消息长度则使用num,否则默认为-1(最后一个元素)。
参见:Python是否有三元条件运算符?

0

你可以使用try except,或者在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 except块以保护用户输入的内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接