Цикл генерации случайного списка
имеется задача:
Анализ лотереи: напишите цикл, который проверяет, насколько сложно выиграть в смоделированной вами лотерее. Создайте список или кортеж с именем my_ticket . Напишите цикл, который продолжает генерировать комбинации до тех пор, пока не выпадет выигрышная комбинация. Выведите сообщение с информацией о том, сколько выполнений цикла понадобилось для получения выигрышной комбинации.
Я написал к ней код, но хотел бы узнать как можно его оформить покороче/полаконичнее?
from random import randint
my_ticket = [1,3,7,2,3]
count = 0
numbers = []
while my_ticket != numbers:
count += 1
for i in range(5):
numbers.append(randint(1, 7))
if my_ticket != numbers:
numbers = []
else:
print(numbers)
print(f'Количество итераций {count}')
А именно как можно сбрасывать список из неподходящих чисел кроме как :
if my_ticket != numbers:
numbers = []
Ответы (3 шт):
Сравнение вообще не требуется, потому что оно уже есть в инициализации цикла while. Поэтому if можно смело убрать.
while my_ticket != numbers:
numbers = []
count += 1
for i in range(5):
numbers.append(randint(1, 7))
print(numbers)
print(f'Количество итераций {count}')
Если совсем коротко, то как-то вот так:
from random import randint
my_ticket = [1,3,7,2,3]
count = 1
while my_ticket != [randint(1, 7) for _ in range(5)]:
count += 1
print(f'Количество итераций {count}')
Или очень-очень коротко :)
from random import randint
my_ticket = [1,3,7,2,3]
print('Количество итераций', sum(1 for _ in iter(lambda: [randint(1, 7) for _ in range(5)], my_ticket)))
Можно так
from random import randint
from itertools import count
my_ticket = [1,3,7,2,3]
numbers = []
for j in count(1):
numbers = [randint(1, 7) for _ in my_ticket]
if numbers == my_ticket:
break
print(numbers)
print(f'Количество итераций {j}')
а можно без создания второго списка:
from random import randint
my_ticket = [1,3,7,2,3]
count = 0
win = False
while not win:
count += 1
win = True
for i in my_ticket:
if i != randint(1, 7):
win = False
break
print(my_ticket)
print(f'Количество итераций {count}')