我有以下代码,当我运行它时,它大部分时间都能工作:
marvel_heroes = ['Wolverine','Spider-Man','Thor','Iron Man','Hulk','Captain America','Deadpool',
'Daredevil','Cyclops','Mr Fantastic','Professor X', 'Doctor Strange','Thing','Black Panther','Black Widow','Hawkeye','Vision','Shang-Chi', 'Ant-Man','Quicksilver','Star Lord',
'Rocket Raccoon','Drax','War Machine','Falcon']
marvel_heroes.append('Captain Marvel')
#print(marvel_heroes)
length = len(marvel_heroes)
print(length)
team = [marvel_heroes[random.randint(0, length)],marvel_heroes[random.randint(0, length)], marvel_heroes[random.randint(0, length)] ]
print('My team is:')
print(team)
print("n")
偶尔我会遇到这样的错误:
Traceback (most recent call last):
File "main.py", line 12, in <module>
team = [marvel_heroes[random.randint(0, length)],marvel_heroes[random.randint(0, length)], marvel_heroes[random.randint(0, length)] ]
IndexError: list index out of range
我真的不明白,当我用长度变量来限制它时,它怎么会超出范围,这是某种内存溢出问题,还是有时存在重复值的问题?
random.randint
的上边界包括,因此您必须执行
random.randint(0, length - 1)
话虽如此,我建议你使用
team = random.sample(marvel_heroes, 3)
randint()
上的文档是清晰的:
返回一个随机整数N,使得<=N<=b.randrange(a,b+1(的别名。
请注意,这包括可以同时返回a
和b
的可能性。因此,长度为5时,randint
可以生成5
,这将超出零索引列表的范围。CCD_ 7或CCD_。
team = random.sample(marvel_heroes, 3)
choices()
会复制你当前的行为,但sample()
会给你一个随机的unique
选择,这似乎是你想要的。
根据官方文档,randint(a,b)
将返回值x
,因此a <= x <= b
为true。
你可以选择randrange()
来获得a <= x < b
。