Самый быстрый способ (я знаю) использует Counter()
из коллекций (см. Дно для замены только для диктовок):
import random
from collections import Counter
# create our 6-sided dice
sides = range(1,7)
num_throws = 1000
# generates num_throws random values and counts them
counter = Counter(random.choices(sides, k = num_throws))
print (counter) # Counter({1: 181, 3: 179, 4: 167, 5: 159, 6: 159, 2: 155})
collections.Counter([iterable-or-mapping])
) - это специализированный словарь, который считает вхождения в итерируемом вами сообщении.
random.choices(population, weights=None, *, cum_weights=None, k=1)
использует данную итерацию (диапазон (1,7) == 1,2,3,4,5,6 и рисует k
вещи из него, возвращая их в виде списка.
range(from,to[,steps])
генерирует неизменную последовательность и заставляет random.choices
работать даже лучше, чем при использовании списка.
Как более полная программа, включающая ввод количества лиц и бросков с проверкой:
def inputNumber(text,minValue):
"""Ask for numeric input using 'text' - returns integer of minValue or more. """
rv = None
while not rv:
rv = input(text)
try:
rv = int(rv)
if rv < minValue:
raise ValueError
except:
rv = None
print("Try gain, number must be {} or more\n".format(minValue))
return rv
from collections import Counter
import random
sides = range(1,inputNumber("How many sides on the dice? [4+] ",4)+1)
num_throws = inputNumber("How many throws? [1+] ",1)
counter = Counter(random.choices(sides, k = num_throws))
print("")
for k in sorted(counter):
print ("Number {} occured {} times".format(k,counter[k]))
Вывод:
How many sides on the dice? [4+] <b>1</b>
Try gain, number must be 4 or more
How many sides on the dice? [4+] <b>a</b>
Try gain, number must be 4 or more
How many sides on the dice? [4+] <b>5</b>
How many throws? [1+] <b>-2</b>
Try gain, number must be 1 or more
How many throws? [1+] <b>100</b>
Number 1 occured 22 times
Number 2 occured 20 times
Number 3 occured 22 times
Number 4 occured 23 times
Number 5 occured 13 times
ВыИспользуя способ форматирования строки Python 2.x, прочитайте о format(..)
и его примерах форматирования .
Посмотрите на очень хорошие ответы для проверки вводаот пользователя: Запрашивая у пользователя ввод, пока он не даст действительный ответ
Замена на Counter
, если вам не разрешено его использовать:
# create a dict
d = {}
# iterate over all values you threw
for num in [1,2,2,3,2,2,2,2,2,1,2,1,5,99]:
# set a defaultvalue of 0 if key not exists
d.setdefault(num,0)
# increment nums value by 1
d[num]+=1
print(d) # {1: 3, 2: 8, 3: 1, 5: 1, 99: 1}