在 python 中查找随机列表的浮点平均值

Finding float average of random list in python

我查看了几个网站、书籍和文档,但我无法弄清楚我做错了什么。我尝试寻求帮助作为最后的手段,这样我就可以自己学习,但是我花了太长时间试图弄清楚这个问题,而且我确信我做错的事情非常简单,但是我我正在学习。代码每次为 运行 时都会产生一个不同的结果。该代码产生以下错误: 26.8 追溯(最近一次通话): 文件 "main.py",第 7 行,位于 tot = sum(运行d)/len(运行d) 类型错误:'float' 对象不可迭代

import random
for x in range (10000):
   rand = random.uniform(10, 100)
   print(round(rand, 1))

   tot = sum(rand)/len(rand)
   print (round(tot, 1))

在 sum 函数中,您必须解析一个可迭代对象,但您解析的是一个浮点对象。 为避免此错误,您应该将最后两行放在 for 循环之外,并将 rand 附加到列表中。我不知道这是不是你想做的,但它告诉你如何使用 sum:

import random
l = []
for x in range(10000):
    rand = random.uniform(10, 100)    
    l.append(rand)
    print(round(rand, 1))

tot = sum(l)/len(l)
print(round(tot, 1))

您实际上并不是在生成列表,而是在生成单个值。 您真的要在获得最终结果的过程中打印出 10000 个值吗?

如果答案是"no!",那么你的代码可以简化为:

import random

N = 10000
print(round(sum(random.uniform(10, 100) for _ in range(N)) / N, 1))

或者,如果您更愿意将其分解一些以提高可读性:

import random

N = 10000
total = sum(random.uniform(10, 100) for _ in range(N))
average = total / N
print(round(average, 1))

如果这超出了您所学的范围,您可以在初始化为零的循环外创建 total,在遍历循环时用每个新值更新它,然后计算最终答案:

import random

N = 10000
total = 0.0
for _ in range(N):     # use '_' instead of x, since x was unused in your prog
    total += random.uniform(10, 100)
average = total / N
print(round(average, 1))

这避免了为包含 10000 个值的列表浪费存储空间,并避免了您还不熟悉的 append()。当然,如果您稍后出于其他目的需要这 10000 个值,则需要将它们隐藏在列表中:

import random

N = 10000
l = [random.uniform(10, 100) for _ in range(N)]
total = sum(l)
print(round(total / N, 1))

附录

只是为了好玩,你也可以递归地这样做:

import random

def sum_of_rands(n):
    if n > 1:
        half_n = n // 2
        return sum_of_rands(half_n) + sum_of_rands(n - half_n)
    elif n == 1:
        return random.uniform(10, 100)

N = 10000
print(round(sum_of_rands(N) / N, 1))
print(sum_of_rands(0))  # returns None because nothing is being summed

在每个递归调用中将问题分成两半(平均)使堆栈保持为 O(log N)。

我实际上建议您坚持使用列表理解或循环,但我想向您展示有很多不同的方法可以得到相同的结果。