Случайные числа Python, почему выпадает всегда 0?
Сразу извинюсь, за может быть простой вопрос, я сам начинаю только изучать программирование, как хобби. Если я выбираю постоянно число количество раз подбрасывания монеты равным 1, тогда выпадает всегда Орёл. Если 2 подбрасывания, то может быть ситуация 50 на 50 или Орёл 2 раза, а Решка никогда 2 раза не выпадает. На больших числах вроде всё нормально.
import random
while True:
x = 0
st = str(input("Подбросить монетку? y - да, n - нет "))
if st == 'n':
break
elif st != 'y':
print("Выберите да - y или нет - n")
continue
elif st == 'y':
y = int(input("Введите количество раз подбрасывания монетки: "))
coin = 0
x = 0
orel = 0
reshka = 0
while x < y:
if coin == 1:
reshka += 1
x += 1
coin = random.randint(0, 1)
elif coin == 0:
orel += 1
x += 1
coin = random.randint(0, 1)
print(f"\nОрел выпал раз(а) {orel}, решка раз(а) {reshka} ")
procent = 100/(orel + reshka)
orel *= procent
reshka *= procent
print(f"\nОрёл {orel:.3f}% Решка {reshka:.3f}%")
print("Пока")
Ответы (1 шт):
Потому что первое "подбрасывание" здесь никакое не подбрасывание, оно всегда считается за орла, без самого "подбрасывания". Когда мы попадаем сюда - while x < y:, то coin = 0, и выполнение передается в elif coin == 0:, где орел становится 1. И если у нас всего одно подбрасывание, то на этом все заканчивается. В итоге орел = 1, решка = 0.
Ну и если подбрасываний больше 1, то первое всегда считается за орла, а остальные уже случайно.
Простейшее решение: сразу присваивать coin случайное значение, т.е.:
coin = random.randint(0, 1)
вместо
coin = 0
Еще лучше переместить "подбрасывание" в начало каждой итерации:
while x < y:
coin = random.randint(0, 1)
if coin == 1:
reshka += 1
x += 1
# и т.д.