Форум сайта python.su
Помогите решить задачу минимальными методами для начинающего.
Цикл зависает. Где-то нужно вставить промежуточное условие проверки для остановки цикла.
Или может вообще всё сделать иначе.
Офлайн
"""Лист всех возможностей выигрыша""" possibilities = ['a', 'b', 'c', 'd', 'e', 'g', 'k', 'l'] """Выигрышная комбинация""" winn_list = ['b', 'd', 'g'] """Результат попытки угадать выигрышную комбинацию из листа winn_list и записать её в новый лист""" attempt_list = [] """Пока два листа не равны, перебирать лист возможностей и заполнять лист попытки """ while attempt_list != winn_list: for n in possibilities: attempt_list.append(n) print(attempt_list)
Отредактировано sssony (Март 29, 2024 10:00:23)
Офлайн
а в чем смысл задания? напиши полностью задание
В твоем коде первый внешний цикл while с условием список attempt_list не равен списку winn_list , это условие никогда не станет false. всегда true, бесконечный цикл.
Вложенный цикл for перебирает список possibilities, получает текущий элемент списка и добавляет его в список attempt_list. По окончанию цикла for, attempt_list заполняется полной копией списка possibilities, затем внешний цикл дает второй проход, добавляет еще раз список, и так бесконечное число раз.
ты смотрел в отладке что делает твой код?
Нужно задание, не понятно каким образом нужно заполнить пустой список attempt_list чтобы он стал равен winn_list, вышел из внешнего цикла и выполнил последнюю строку print вывел результат
Офлайн
Это перебор с подсвечиванием всех попыток
>>> import random >>> >>> """Лист всех возможностей выигрыша""" 'Лист всех возможностей выигрыша' >>> possibilities = ['a', 'b', 'c', 'd', 'e', 'g', 'k', 'l'] >>> """Выигрышная комбинация""" 'Выигрышная комбинация' >>> winn_list = ['b', 'd', 'g'] >>> """Результат попытки угадать выигрышную комбинацию из листа winn_list и записать её в новый лист""" 'Результат попытки угадать выигрышную комбинацию из листа winn_list и записать её в новый лист' >>> attempt_list = [] >>> """Пока два листа не равны, перебирать лист возможностей и заполнять лист попытки """ 'Пока два листа не равны, перебирать лист возможностей и заполнять лист попытки ' >>> >>> i = 0 >>> while attempt_list != winn_list: ... i += 1 ... attempt_list = [] ... for _ in range(len(winn_list)): ... n = random.choice(possibilities) ... attempt_list.append(n) ... if attempt_list != winn_list: ... print('wrong', attempt_list) ... else: ... print('right!', attempt_list) ... wrong ['a', 'd', 'k'] wrong ['k', 'e', 'a'] wrong ['c', 'b', 'd'] wrong ['b', 'c', 'a'] wrong ['k', 'e', 'g'] wrong ['l', 'c', 'b'] wrong ['c', 'e', 'd'] wrong ['k', 'a', 'g'] wrong ['b', 'c', 'b'] wrong ['l', 'g', 'g'] wrong ['k', 'k', 'e'] wrong ['l', 'd', 'g'] wrong ['b', 'b', 'b'] wrong ['b', 'k', 'g'] wrong ['b', 'c', 'b'] wrong ['k', 'l', 'd'] wrong ['a', 'k', 'k'] wrong ['k', 'l', 'd'] wrong ['b', 'l', 'b'] wrong ['d', 'l', 'l'] wrong ['k', 'b', 'c'] wrong ['l', 'k', 'c'] wrong ['e', 'k', 'a'] wrong ['e', 'e', 'b'] wrong ['c', 'c', 'g'] wrong ['e', 'a', 'b'] wrong ['g', 'a', 'k'] wrong ['l', 'b', 'a'] wrong ['g', 'a', 'a'] wrong ['l', 'e', 'g'] wrong ['c', 'a', 'c'] wrong ['b', 'a', 'g'] wrong ['c', 'g', 'b'] wrong ['e', 'c', 'g'] wrong ['g', 'k', 'k'] wrong ['k', 'e', 'g'] wrong ['e', 'k', 'c'] wrong ['e', 'd', 'b'] wrong ['b', 'g', 'l'] wrong ['b', 'g', 'd'] wrong ['b', 'd', 'l'] wrong ['b', 'c', 'g'] wrong ['c', 'a', 'c'] wrong ['c', 'k', 'g'] wrong ['a', 'a', 'c'] wrong ['d', 'd', 'b'] wrong ['l', 'g', 'l'] right! ['b', 'd', 'g'] >>> print(attempt_list, 'attempts =', i) ['b', 'd', 'g'] attempts = 48 >>>
>>> import random >>> >>> # Лист всех возможностей выигрыша ... possibilities = ['a', 'b', 'c', 'd', 'e', 'g', 'k', 'l'] >>> # Выигрышная комбинация ... winn_list = ['b', 'd', 'g'] >>> # Результат попытки угадать выигрышную комбинацию из листа winn_list и записать её в новый лист ... attempt_list = [] >>> # Пока два листа не равны, перебирать лист возможностей и заполнять лист попытки ... i = 0 >>> while attempt_list != winn_list: ... i += 1 ... attempt_list = [] ... for _ in range(len(winn_list)): ... n = random.choice(possibilities) ... attempt_list.append(n) ... if attempt_list != winn_list: ... print('wrong', attempt_list) ... else: ... print('right!', attempt_list) ... wrong ['k', 'b', 'l'] wrong ['d', 'c', 'l'] wrong ['a', 'b', 'a'] wrong ['c', 'e', 'c'] wrong ['a', 'k', 'b'] wrong ['g', 'c', 'k'] wrong ['e', 'l', 'd'] right! ['b', 'd', 'g'] >>> print(attempt_list, 'attempts =', i) ['b', 'd', 'g'] attempts = 8 >>>
sssonyЯ не стал писать минимальными методами, потому что при разработке важно уметь выуживать нужные крупицы информации из тонны всякого разного чужого кода, написанного разными стилями. Это очень частое явление. Поэтому условие выхода из цикла ты можешь найти в этой тонне кода, которую я привёл. Описывай словесно всё, что замечаешь в коде. Вообще, надо научиться делать наоборот - сначала нужно словесно всё описывать, что должно происходить в будущем коде, а потом уже писать код весь, когда это словесное описание готово и всё ясно и понятно выглядит.
Помогите решить задачу минимальными методами для начинающего.
Отредактировано py.user.next (Март 30, 2024 23:32:13)
Офлайн