2015-05-07 2 views
0

Я создал программу, которая выводит 1000 номеров, а затем печатает их сумму.Петля и добавьте результат в список на каждой итерации

Как я могу зацикливать это так, чтобы он делал это 100 раз, каждый раз добавляя сумму в новый список?

import random 

output=[] 
new_output=[] 
outcome =[] 


choices = [('0.1', -1), ('0.3', 0), ('0.3', 3), ('0.3', 4)] 
prob = [cnt for val, cnt in choices] 
for i in range (1000): 
    output.append(random.choice(prob)) 
    for item in new_output: 
     new_output.append(float(item)) 

amount = len(new_output) 
print(new_output) 

print('The end positon is', amount) 
+2

Поместите цикл в другой цикл, используя другую переменную (не 'i', возможно' j') –

+1

Вы уже знаете, как писать циклы и как создавать списки и добавлять к ним. Где именно проблема? –

+1

Я немного смущен 'new_output' в вашем коде. Кажется, он никогда не получит какие-либо элементы, добавленные к нему, поскольку вы только вызываете 'new_output.append' в цикле над (пока что неэксстатирующим) содержимым' new_output'. Не могли бы вы привести пример того, как будут выглядеть ваши желаемые результаты, если, скажем, вы выбрали 4 номера 3 раза, а не 1000x100? – Blckknght

ответ

2

Во-первых, ваш код не делает то, что вы заявляете в заголовке. С небольшим изменением он будет: переменные new_output, output и result будут замешаны.

После кусок коды присоединяет к output переменным:

for i in range (1000): 
    output.append(random.choice(prob)) 

, но позже, вы итерация new_output, который является пустым списком.

for item in new_output: 
    new_output.append(float(item)) 

Причина для второй петли в этом случае неизвестна, поэтому давайте ее пропустим пока. О суммировании вывода - len(new_output) всегда будет 0, так как len сам возвращает количество элементов в итерабельном, а new_output - пустой список. Если вы хотите длину выходного цикла, вы должны ссылаться на правильном переменном:

amount = len(output) 

Но это не сумма вывода - для этого есть удобная функция называется sum, что делает что тебе нужно.

amount = sum(new_output) 

Исправлен код может выглядеть следующим образом:

import random 

output = [] 
new_output = [] 
outcome = [] 


choices = [('0.1', -1), ('0.3', 0), ('0.3', 3), ('0.3', 4)] 
prob = [cnt for val, cnt in choices] 
for i in range(1000): 
    new_output.append(random.choice(prob)) 

amount = sum(new_output) 

print new_output 
print('The end positon is', amount) 

Теперь переменные не смешивается, и вы подведением выхода. Для того, чтобы сделать это в 100 раз, вложить эту функцию в другом цикле, который будет работать в 100 раз:

import random 

output = [] 
new_output = [] 
outcome = [] 


choices = [('0.1', -1), ('0.3', 0), ('0.3', 3), ('0.3', 4)] 
prob = [cnt for val, cnt in choices] 
for j in range(100): 
    for i in range(1000): 
     new_output.append(random.choice(prob)) 

    amount = sum(new_output) 
    output.append(amount) 

print output 
print('The end positon is', sum(output)) 

Этот код также предполагает, что конечное положение является суммой всех new_outputs (сумма случайных чисел). Просто бонусный совет: если вам не важно значение в диапазоне, используйте _ - (for _ in range(100)). Это немного уменьшит загрязнение пространства имен.

Там все еще может быть проблема с вероятностью -

choices = [('0.1', -1), ('0.3', 0), ('0.3', 3), ('0.3', 4)] 
prob = [cnt for val, cnt in choices] 

Создаёт список, который выглядит как

[-1, 0, 3, 4] 

и собирание из него с random.choice результатов в одном из них, с вероятностью игнорировали ,

Смежные вопросы