Выбор подходящей структуры данных для максимального использования основных возможностей языка является одним из наиболее ценных навыков, которые может развить программист.
Для этого конкретного случая использования лучше всего использовать итеративный тип данных, который облегчает операции (например, сортировка, получение максимума) над набором чисел. Поскольку мы хотим связать число (1-6) с числом раз, когда это число было свернуто, словарь кажется самой простой структурой данных для выбора.
Я переписал программу, чтобы показать, как ее существующая функциональность может быть повторно реализована с использованием словаря в качестве структуры данных. С комментариями код должен быть достаточно понятен.
Самое сложное в том, что этот вопрос на самом деле задает: определить число выпавших чаще всего. Вместо того, чтобы вручную реализовывать алгоритм сортировки, мы можем использовать встроенную в Python функцию max
. Он может принимать необязательный аргумент key
, который определяет функцию, которая должна применяться к каждому элементу в итерируемом объекте перед выполнением сравнения. В этом случае я выбрал метод dict.get()
, который возвращает значение, соответствующее ключу. Таким образом, словарь результатов бросков сравнивается по количеству бросков для каждого результата, чтобы определить количество бросков чаще всего. Обратите внимание, что max()
возвращает только один элемент, поэтому в случае сопоставления будет напечатан только один из результатов (см. Какой максимум выбирает Python в случае сопоставления? ).
См. Также: Как отсортировать словарь по значению?
import random
NUM_ROLLS = 100
DIE_SIDES = 6
# Create the dictionary to store the results of each roll of the die.
rolls = {}
#Loop for rolling the die NUM_ROLLS times
for r in range(NUM_ROLLS):
roll_result = random.randint(1, DIE_SIDES)
if roll_result in rolls:
# Add to the count for this number.
rolls[roll_result] += 1
else:
# Record the first roll result for this number.
rolls[roll_result] = 1
# Print how many times each number was rolled
for roll_result in range(1, 7):
print("The number", str(roll_result), "was rolled", str(rolls[roll_result]), "times.")
#How many times the 3 was rolled
print("The number three was rolled", str(rolls[3]), "times.")
#Average roll between all of them
sum = 0
for roll_result in rolls:
sum += roll_result * rolls[roll_result]
print("The average roll result was", str(sum/NUM_ROLLS))
# The number rolled most often.
print(str(max(rolls, key=rolls.get)), "is the most common roll result.")