Python. Использование циклов со счетчиками и с проверкой списков
У меня есть код:
from random import choice
комбинация = ['w', 4, 5, 2, 'a', 8, 3, 9, 7, 6, 'g', 'r', 1, 'y']
my_ticket = []
def random():
return choice(комбинация)
def перебор():
print("Выигрышная комбинация:")
for _ in range(4):
my_ticket.append(random())
перебор()
print(my_ticket)
У меня дальше есть задача создать цикл, который будет перебирать комбинации, и когда цикл найдет нужную комбинацию (как в my_ticket), то он должен остановиться и написать сколько попыток потребовалось, чтобы найти нужную комбинацию.
Я переписал код выше:
from random import choice
комбинация = ['w', 4, 5, 2, 'a', 8, 3, 9, 7, 6, 'g', 'r', 1, 'y']
my_ticket = []
my_target = ['a', 4, 5, 'g']
def random():
return choice(комбинация)
def перебор():
for _ in range(4):
print(random())
count = 1
def цикл():
while True:
for _ in range(4):
my_ticket.append(random())
count += 1
if my_ticket == my_target:
print(my_ticket)
цикл()
но он не работает
Ответы (2 шт):
Автор решения: Ivan Main
→ Ссылка
from random import choice
def random(combination):
return choice(combination)
def enumeration(combination, my_ticket):
print("Выигрышная комбинация:")
for _ in range(4):
my_ticket.append(random(combination))
def run_times(my_ticket, combination):
count = 0
while True:
win_ticket = [random(combination) for i in range(4)]
if win_ticket == my_ticket:
break
else:
count += 1
return count, win_ticket
combination = ['w', 4, 5, 2, 'a', 8, 3, 9, 7, 6, 'g', 'r', 1, 'y']
my_ticket = []
enumeration(combination, my_ticket)
print(my_ticket)
solution = run_times(my_ticket, combination)
print(f'Мы получили ваш выигрышный билет {solution[1]}.\nДля нахождения потребовалось {solution[0]} попыток')
Автор решения: Сергей
→ Ссылка
Ниже исправленный код с комментариями в тексте по каждому исправлению. Изучите внимательно эти темы:
а) области видимости, особенно функции;
б) счетчики (просто на бумажке прикиньте, как они работают);
в) списки (рекомендация моя "не забывайте очищать список каждый раз" была проигнорирована).
from random import choice
combination = ['w', 4, 5, 2, 'a', 8, 3, 9, 7, 6, 'g', 'r', 1, 'y']
my_target = ['a', 4, 5, 'g']
def random():
return choice(combination)
def perebor():
for _ in range(4):
print(random())
def cycle():
# 1) Перенесли счетчик в область видимости функции
# 2) Начинается он с 0, так как не было еще попыток.
count = 0
while True:
# Обнуляем список каждый раз, или он бесконечно будет расти и не совпадет никогда
my_ticket = []
for _ in range(4):
my_ticket.append(random())
count += 1
if my_ticket == my_target:
# Добавили счетчик на вывод
print(my_ticket, count)
# Прервать цикл надо, если совпало, а то без конца будет работать
break
cycle()