2016-01-21 1 views
-1

Мой код генерирует случайные результаты списка «результаты». Я запускаю партии в 10 000+, и мне нужен способ подсчитать партии и суммировать их внизу. Как мне это сделать?Подсчет количества раз, когда определенный случай появляется при случайном выборе из списка возможных результатов.

Вот мой код:

import random 
import time 
from time import sleep 
outcomes = ['TT','Tt','Tt','tt'] 
for x in range (0, 5): 
    b = "LOADING OUTCOMES" + "." * x 
    print (b, end="\r") 
    time.sleep(0.5) 
print("4 Possible Genetic Outcomes Will Be Shown. . . ") ; sleep(1) 
for x in range (0, 10000): 
    print(random.choice(outcomes)) 
    time.sleep(0.001)   
x=input("Done determining outcomes!! Press enter to close") 
+2

Скопируйте код в вопрос. Нет необходимости открывать внешнюю ссылку, чтобы знать, что происходит. –

+0

Было бы полезно посмотреть, что у вас уже есть, чтобы мы могли улучшить код. Кроме того, что вы хотите, чтобы ваш код делал? Вывести общий итог каждого результата? TT - 1 Tt - 2 tt - 16? – Logan

+0

Я попытался опубликовать код, но он не показал должным образом, поэтому я опубликовал pciture – KYHS

ответ

1

Это использует код, представленный в скриншоте. Вот как я буду заниматься этим. Проверьте, работает ли это решение для вас. В следующий раз, пожалуйста, введите код внутри самого вопроса, а не как изображение. Это привлечет больше людей, чтобы помочь вам, так как они могут просто скопировать ваш код и быстрее помочь вам вместо того, чтобы набирать код самостоятельно.

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

import random 
import time 
from time import sleep 

outcomes = ["TT", "Tt", "Tt", "tt"] 
outcomesCount = {"TT":0, "Tt":0, "tt":0} 

for x in range(0,5): 
    b = "LOADING OUTCOMES" + "." * x 
    print(b, end="\r") 
    time.sleep(0.5) 
print("4 Possible Genetic Outcomes Will Be Shown. . . ") 
sleep(1) 

for x in range(0,10000): 
    choice = (random.choice(outcomes)) 
    time.sleep(0.001) 
    outcomesCount[choice] += 1 
    print(choice) #This is something you were doing in original code. I would not do this because there are too many print statements, and will cause the program to run for a while. 

print("The number of times each outcome appeared was: ") 
print("TT : %s" %(outcomesCount["TT"])) 
print("Tt : %s" %(outcomesCount["Tt"])) 
print("tt : %s" %(outcomesCount["tt"])) 
x = input("Done determining outcomes!! Press enter to close") 

Выход запуска выше программы была нота это только последние заявления печати:

The number of times each outcome appeared was: 

TT : 2484 
Tt : 4946 
tt : 2570 
Done determining outcomes!! Press enter to close 

улучшений: 1. избавиться от сна, потому что вы просто задерживая выполнение программы. Вам это не нужно. Если вы хотите, чтобы пользователь увидел загрузочное сообщение для второго из двух, вы можете просто добавить 1 паузу в конце.

  1. Сон во втором цикле не нужен вообще. Это компьютер и способен делать потрясающие вещи. Это ничто по сравнению с тем, что он может справиться.

  2. Не печатайте все результаты, так как он будет печатать 10000 разных строк.

Удачи и надеюсь, что это помогло.

+0

работает как шарм ty ty – KYHS

+0

@KYHS, рад, что я смог помочь вы, я тоже редактировал вопрос для людей, поэтому в будущем они знают, что вы имели в виду. Вопрос не был чист вначале. – deltashade

+0

Спасибо, человек, действительно чистый и быстрый. Кроме того, для тех, кто задается вопросом, это такой дерьмовый скрипт, потому что я изначально заставил его наложить список оскорблений на моего друга, я понял, что могу сделать это для биографии. - Вот почему он спит. Я хотел, чтобы он увидел оскорбление каждые пару секунд и не думали тянуть его – KYHS

2
from collections import Counter 
from random import choice 

outcomes = ["TT", "Tt", "Tt", "tt"] 

totals = Counter(choice(outcomes) for _ in range(10000)) 

который дает что-то вроде

Counter({'TT': 2528, 'Tt': 4914, 'tt': 2558}) 
+0

Хорошее решение. гораздо чище, чем тот, который я предоставил. – deltashade

+0

Как я могу добавить это? я получаю ошибки, когда я запускаю с этим вместо решения deltas – KYHS

+0

@KYHS, «я получаю ошибки». Какие ошибки? –