listindex超出简单for-loop(骰子概率)范围。

问题描述 投票:0回答:2

我是编程新手,所以我不明白为什么我的这部分代码不能工作。n = 30,而它应该等于n = 35。所以错误是 "list index out of range",尽管我已经设置了一个范围和count6.Why?我怎么解决这个问题呢?

当这部分代码单独运行时,它不持有任何问题。但是当它与我的其他代码一起运行时,它出现了 "list index out of bounds "的错误... ... 这是我的全部代码中唯一会产生任何错误的部分。

count6 = [6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
freq = 10
dice = random.randrange(1,7)

print('\nProbability for 6 dices:')
for n in range(5, 36):
   percentage_6 = (count6[n - 5] / freq) * 100
   procent_6 = str(percentage_6)
   print('this is n:', n)
   print(n + 1, ':', procent_6, '%')
python list dice
2个回答
1
投票

你发布的代码并没有产生索引外的错误,所以我认为你在代码中的某个地方使用了count6[n].你使用索引而不是值本身来访问一个列表的值。

count6 =[6, 7, 8, 9, ...  35, 36]
#index   0  1  2  3  ...  29  30

所以当你的n达到 count6[31] 你试图找到列表中的第32个元素(因为索引从0开始),而这个元素并不存在,因为列表只有31个元素(索引0的元素是第一个元素),如上图所示。

即使不是这种情况,你也应该尽可能地使用index进行循环,而不是使用更多的pythonic选项。

for i in count6:
    percentage_6 = (i / freq) * 100
    ...

或者你可以简单地使用

for i in range(6, 37):
    percentage_6 = (i / freq) * 100
    ...

如果你必须使用这样的列表,我建议使用列表理解。

count6 = [number for number in range(6, 37)]

0
投票

列表中只包含31个数字,你可以从0到30:应该是选择。

for n in range(0, 30):

或者(更好):

for n in range(0, len(count6)):

这些数字是索引,而不是值本身。


0
投票

我解决了这个问题。错误是我在代码后面调用count6,停在rolled6.count(30)的时候(rolled6是我的6个骰子的rolled和的列表)。

count6 = [rolled6.count(6), rolled6.count(7), rolled6.count(8), rolled6.count(9), rolled6.count(10), rolled6.count(11),
          rolled6.count(12), rolled6.count(13), rolled6.count(14), rolled6.count(15), rolled6.count(16),
          rolled6.count(17), rolled6.count(18), rolled6.count(19), rolled6.count(20), rolled6.count(21),
          rolled6.count(22), rolled6.count(23), rolled6.count(24), rolled6.count(25), rolled6.count(26),
          rolled6.count(27), rolled6.count(28), rolled6.count(29), rolled6.count(30),]

我把它改成31、32... 36了

count6 = [rolled6.count(6), rolled6.count(7), rolled6.count(8), rolled6.count(9), rolled6.count(10), rolled6.count(11),
          rolled6.count(12), rolled6.count(13), rolled6.count(14), rolled6.count(15), rolled6.count(16),
          rolled6.count(17), rolled6.count(18), rolled6.count(19), rolled6.count(20), rolled6.count(21),
          rolled6.count(22), rolled6.count(23), rolled6.count(24), rolled6.count(25), rolled6.count(26),
          rolled6.count(27), rolled6.count(28), rolled6.count(29), rolled6.count(30), rolled6.count(31), rolled6.count(32), rolled6.count(33), rolled6.count(34), rolled6.count(35), rolled6.count(36)]
© www.soinside.com 2019 - 2024. All rights reserved.