@xochubounty

Не могу решить задачу на подбрасывание монетки, что делать?

нужно решить задачу, суть которой заключается в том, что бы подбрасывать монету до тех пор, пока не выпадет 3 раза подряд орёл либо решка и повторять это 10 раз
вот пример:
О Р Р Р (попыток: 4)
О О Р Р О Р О Р Р О О Р О Р Р О Р Р Р (попыток: 19)
Р Р Р (попыток: 3)
Р О О О (попыток: 4)
О О О (попыток: 3)
Р О Р Р О Р О О Р Р О О Р О Р О О О (попыток: 18)
О Р Р О О О (попыток: 6)
Р О Р Р Р (попыток: 5)
Р Р О Р Р О Р О Р О О О (попыток: 12)
Р О Р Р Р (попыток: 5)
Среднее количество попыток: 7,9.

сам пока додумался только до этого:
from random import randrange, random, randint
from itertools import repeat

pop = range(1, 11)
sch = 0
sch_2 = 0
for j in range(10):
    z = []
    sch += 1
    for i in range(100):
        a = randrange(2)
        z.append(a)
    for x in z:
        if z[x] == z[x+1] == z[x+2]:
            del z[x+3:-1]
    print(z)
  • Вопрос задан
  • 347 просмотров
Решения вопроса 2
@twistfire92
Python backend developer
Раз уж свой вариант какой-то приложили, то можно сделать так:

import random as rd

total_attempts = 0

for _ in range(10):
	attempts = 0
	last_result = None
	counter = 0
	results = []
	while True:
		current_result = rd.choice(["О", "P"])
		results.append(current_result)
		if current_result == last_result:
			counter += 1
		else:
			counter = 1
		last_result = current_result
		attempts += 1
		if counter == 3:
			break
	print(f"{' '.join(results)} (Попыток: {attempts})")
	total_attempts +=attempts

print(f"Среднее количество попыток: {total_attempts / 10:.1f}")
Ответ написан
@Wispik
from random import randint


attempts = []

for i in range(10):
    res = []
    while True:
        res.append(randint(0, 1))
        if len(res) >= 3 and (res[-1]==res[-2]==res[-3]):
            break
    s = ''.join(['О' if s else 'Р' for s in res])
    print(f'{s} (попыток: {len(s)})')
    attempts.append(len(s))

print(f'Среднее количество попыток: {sum(attempts) / len(attempts)}.')
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Maksim_64
@Maksim_64
Data Analyst
import random

result = {}
for n in range(10):
    experiment = []
    while True:
        experiment.append('О' if random.random() < 0.5 else 'Р')
        for i in range(len(experiment) - 2):
            if (experiment[i] == experiment[i+1]) and (experiment[i+1] == (experiment[i+2])):
                break
        else: 
            continue
        break
            
    result[f'Попытка Номер {n+1}'] = experiment
print(result)


среднее количество попыток допишите сами. Эксперимент сгенерирован результаты в словаре result, так что это не составит труда. Обратите внимание на else, continue и последний break. Первый break принадлежит циклу for, затем else принадлежит тоже циклу for (именно так) он запускается если первый break не состоялся внутри цикла for, затем мы имеем continuous который возвращает нас на начало цикла while и код запускается снова, когда наконец то условие выполнено внутри цикла for срабатывает первый break (мы вышли из цикла for) затем else и continuous игнорируются ( потому что else принадлежит к for не к if обращаю ваше внимание еще раз ) и наконец последний break прекращает вечный цикл while. Поработайте с кодом, что бы почувствовать механику.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы