На самом деле вы не создаете список, вы генерируете отдельные значения. Вы действительно хотите распечатать 10000 значений на пути к окончательному результату?
Если ответ «нет!», То ваш код можно уменьшить до:
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
за пределами инициализированного l oop до нуля, обновляйте его с каждым новым значением по мере прохождения l oop, а затем вычисляйте окончательный ответ:
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).
Я бы посоветовал вам придерживаться понимания списков или циклов, но хотел показать вам, что есть много разных способов получить тот же результат.