程序未输出预期结果(python)

时间:2019-02-03 14:15:51

标签: python

编程新手。在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?

2 个答案:

答案 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