Во-первых, ваш код не делает то, что вы заявляете в заголовке. С небольшим изменением он будет: переменные 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
результатов в одном из них, с вероятностью игнорировали ,
Поместите цикл в другой цикл, используя другую переменную (не 'i', возможно' j') –
Вы уже знаете, как писать циклы и как создавать списки и добавлять к ним. Где именно проблема? –
Я немного смущен 'new_output' в вашем коде. Кажется, он никогда не получит какие-либо элементы, добавленные к нему, поскольку вы только вызываете 'new_output.append' в цикле над (пока что неэксстатирующим) содержимым' new_output'. Не могли бы вы привести пример того, как будут выглядеть ваши желаемые результаты, если, скажем, вы выбрали 4 номера 3 раза, а не 1000x100? – Blckknght