我试图让此代码返回列表项(如果它在索引之内),但如果不在索引中,则默认为索引中的特定项
下面的代码是一个示例:
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)
使用此代码,由于变量不在索引范围之外,因此只会在消息中出错。 我该怎么做才能解决此问题?
答案 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(最后一个元素)。
答案 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块,以防止用户输入。