Случайные числа Python, почему выпадает всегда 0?

Рейтинг: 0Ответов: 1Опубликовано: 23.02.2023

Сразу извинюсь, за может быть простой вопрос, я сам начинаю только изучать программирование, как хобби. Если я выбираю постоянно число количество раз подбрасывания монеты равным 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("Пока")

Ответы

▲ 0Принят

Потому что первое "подбрасывание" здесь никакое не подбрасывание, оно всегда считается за орла, без самого "подбрасывания". Когда мы попадаем сюда - 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
    # и т.д.