(Python)我的代码中有什么问题导致我的程序崩溃索引错误



程序将运行第一次,但在第二次循环中它有时会崩溃。有人向我指出,这可能是关于顶部线,在那里可以选择顶部。错误:"IndexError:列表索引超出范围;

import random
toppers = ['holographic', 'flakies', 'glitter', 'microshimmer']
def topper():
while True:
topper = input() #getting input
# random number between 1-3 for topper grab
randomTop = random.randint(1,4)
if topper.upper() == 'N' or topper.upper() == 'NO':
print('A clear glossy top coat it is!')
break
elif topper.upper() == 'Y' or topper.upper() == 'YES':
print('The topper you should use is ' + toppers[randomTop] + '.')
break
elif topper.upper() != ('N', 'NO', 'Y', 'YES') or topper.isalnum():
print('nPlease enter a valid input. Y or N.')
continue
playloop() 

如果用户愿意,程序可以有一个中断退出,因此可以期望程序可以无限循环,直到用户准备退出为止。虽然第一个循环运行良好,但随后的试验崩溃了。

任何帮助都是感激的。:)

toppers = ['holographic', 'flakies', 'glitter', 'microshimmer']
randomTop = random.randint(1,4)
print('The topper you should use is ' + toppers[randomTop] + '.')

toppers是一个包含四项的列表。Python列表从0开始索引,所以有效的索引是0-3。

但是你是从1到4中随机选择一个数字。如果你碰巧选了4,那就超出了范围。使用random.randint(0,3)

或者更好,使用random.choice(toppers),所以你不必担心索引值。