#python
Вопрос:
Я пытаюсь сгенерировать 5 уникальных случайных чисел, и для этого я написал цикл for:
for i in range(5):
print("enter a no")
x = int(input())
if x not in a:
a.append(x)
Если x
нет a
, то только тогда i
должно быть увеличено. Я могу сделать это с помощью цикла while, но хочу знать, можем ли мы сделать это с помощью цикла for.
Комментарии:
1. Предположим, что пользователь упрямо вводит один и тот же номер снова и снова. Затем программа никогда не завершается. С другой стороны, любая разумная реализация, использующая
for
цикл, должна завершаться после конечного числа итераций.
Ответ №1:
Вы можете сделать это, преобразовав диапазон в список. Пожалуйста, следуйте приведенному примеру кода.
a = list()
n = 2
myrange = list(range(n)) # converting your range into list
for i in myrange:
print("enter a no")
x = int(input())
if x not in a:
a.append(x)
else :
# add current i again in the rangelist at starting position
myrange.insert(0,i)
Ответ №2:
Вы не можете изменить, сколько раз for i in range()
выполняется цикл. Изменение i
в цикле не влияет на range()
объект.
Вы можете использовать вложенный цикл, который продолжает запрашивать, пока не получит число, которое не найдено.
for _ in range(5):
while True:
print("enter a no")
x = int(input())
if x not in a:
a.append(x)
break
Комментарии:
1. «Я могу сделать это с помощью while, но хочу знать, можем ли мы сделать это с помощью for», — отметил ОП в своем посте
Ответ №3:
Вот несколько подходов:
Вариант 1 :
Использование бесконечного значения в функции диапазона :
def to_infinity():
index = 0
while True:
yield index
index = 1
for i in to_infinity():
print("enter a no")
x = int(input())
if len(a) > 5:
break
if x not in a:
a.append(x)
Вариант 2 :
Использование itertools.count:
import itertools
for i in itertools.count(start=1):
print("enter a no")
x = int(input())
if len(a) > 5:
break
if x not in a:
a.append(x)
Комментарии:
1. Я думаю, что это не сработает, если пользователь введет только пять разных номеров и ничего больше. Может быть, вместо этого проверьте длину и перерыв
append
?2. Более четко, вы предполагаете, что пользователь введет не менее 6 номеров.
3. Да, вы правы насчет этой проблемы @hilberts_drinking_, Если хотите, внесите правку, и я ее приму