Увеличение изнутри для цикла

#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_, Если хотите, внесите правку, и я ее приму