Вы можете использовать понимание списка и сразу суммировать в нем два или три броска кубика:
Я также убрал ваше использование инициализированных массивов, поскольку оно не нужно. Лучше использовать значение return
, чем изменять массивы.
import numpy as np
import matplotlib.pyplot as plt
# A function that will return a random int between 1-6.
def roll_die():
return np.random.random_integers(6)
# A function to calculate the sum of 2 dice rolls.
def rolling2(rolls):
return [(roll_die() + roll_die()) for n in range(rolls)]
# A function to calculate the sum of 3 dice rolls.
def rolling3(rolls):
return [(roll_die() + roll_die() + roll_die()) for n in range(rolls)]
rolls = int(input("How many times will you roll 2 dice?"))
array2 = rolling2(rolls)
array3 = rolling3(rolls)
print(array2)
print(array3)
# Plot graph using matplotlib methods and functions.
fig, ax = plt.subplots(2,1)
ax[0].hist(array2, bins=11)
ax[0].set_xlabel("Sum of 2 dices")
ax[0].set_label("Frequency")
ax[0].set_title("Frequency of the Sum of Rolling 2 dice")
ax[1].hist(array3, bins=16)
ax[1].set_xlabel("Sum of 3 dices")
ax[1].set_label("Frequency")
ax[1].set_title("Frequency of the Sum of Rolling 3 dice")
plt.show()
Было бы также неплохо написать функцию, которая бросает любое количество кубиков любое количество раз. Вот он:
def roll_dices(dices, rolls):
return [sum(roll_die() for _ in range(dices)) for _ in range(rolls)]
Тогда вы можете звонить roll_dices(2, rolls)
вместо rolling2(rolls)
.