编程新手。在python中,我正在修改,并编写了如下程序:
from random import randint
n = 0
m = 0
list = []
sum_list = []
while m < 50:
while n < 1000:
random = randint(1, 10000)
if random < 5000:
list.append("a")
n = n + 1
else:
n = n + 1
sum_list.append(len(list))
del list[:]
m = m + 1
print(sum(sum_list) / len(sum_list))
这是否不会打印趋向于500的内容?它一直趋向于10。
我的目标是研究在给出越来越多的迭代次数时概率的表现方式。我希望这里的程序取一个介于1到10,000之间的随机整数,并评估它是否小于5000。如果是,则将一个元素附加到列表中,在两种情况下(是,否),将n递增到n +1。然后将len(list)附加到sum_list。对此重复50次。然后采用sum_list / len(sum_list)得出结果。 sum_list不应为50〜500的列表,len(sum_list)是否为50?要获得〜500?
答案 0 :(得分:0)
如果在外循环的第二次迭代开始时查看n
的值,应该会发现问题。
(顺便说一下,几乎任何调试都应该指出了这一点。)
答案 1 :(得分:0)
之所以发生这种情况,是因为您忘记重置要在while循环内再次迭代的n的值,该循环在50次迭代中仅运行一次。由于n
已经达到最大值,因此您的条件不满足,因此无法获得预期的输出。
只需在删除列表后添加以下行:
n = 0 # reset value
当您刚接触编程时,我想指出一些您需要注意的可选事项:
list
之类的可选关键字,该关键字本身用于初始化空列表或从可迭代对象构造列表random
并创建一个具有相同名称的变量这是另一种实现,您可以避免使用列表来跟踪小于5000
的值的数量:
from random import randint
m = 0
expected_val = 0
while m < 50:
m += 1 # increment by one
n = 0 # initialize at each iteration
while n < 1000:
random = randint(1, 10000)
if random < 5000:
expected_val += 1 # increment values lesser than 5000
n = n + 1
print(expected_val/m) # it's obvious that if you were appending only once to append single value in sum_list in every iteration then it's length would be equal to m which is 50