Почему if-else не зацикливается

Я считаю, что моя прога if-else не зацикливается, почему это происходит и как я могу это исправить для проверки?

моя прога предполагала, что хранит пользовательские входы, которые должны быть между 10 и 100, а затем удаляет дублированные входы. Примеры: num=[11,11,22,33,44,55,66,77,88,99]результат: `[22,33,44,55,66,77,88,99]

inList=[]    
for x in range(1,11):
    num = int(input("Please enter number "+str(x)+" [10 - 100]: "))

    if num >= 10 and num <= 100:
        inList.append(num)
    else:
        num = int(input("Please enter a valid number: "))

print(inList)

Я обнаружил, что if-else сделал только один раз, поэтому, когда я вхожу недопустимый номер во второй раз, программа все еще переносит меня к следующей процедуре ввода. Что происходит происходит?

Please enter number 1 [10 - 100]: 1
Please enter a valid number: 1
Please enter number 2 [10 - 100]:

Кроме того, могу ли я спросить, как я могу проверить inList на наличие дублирующегося числа, а затем удалить оба числа из списка?

2 ответа

Я также предложил бы цикл времени. Однако цикл while следует вводить только в том случае, если первая подсказка ошибочна:

Рассмотрим этот пример:

inList = []

for x in range(1,11):
    num = int(input("Please enter number "+str(x)+" [10 - 100]: "))

    while not (num >= 10 and num <= 100):
        num = int(input("Please enter a valid number [10 - 100]: "))

    inList.append(num)

print(inList)

Однако могу я предложить что-то еще:

Этот код создает список допустимых входных данных ["10","11"...."100"], и если входные данные, которые по умолчанию являются строками, не находятся внутри этого списка, мы запрашиваем новый ввод. Наконец, мы возвращаем int этой строки. Таким образом, мы гарантируем, что ввод "ашашах" не выдаст ошибку. Попробуйте это:

inList = []

valid = list(map(str,range(10,101)))

for x in range(1,11):

    num = input("Please enter number {} [10 - 100]: ".format(x))

    while num not in valid:
        num = input("Please enter a valid number [10 - 100]: ")

    inList.append(int(num))

print(inList)

Я не эксперт по Python, и у меня нет настройки среды, чтобы проверить это, но я вижу, откуда возникла ваша проблема.

По сути, внутри вашего цикла for вы говорите

if num is valid then
    add to array
else
    prompt user for num

end loop

С этим вторым приглашением ничего не происходит, это просто приглашение> конец цикла. Вам нужно использовать другой цикл внутри цикла for, чтобы получить num и убедиться, что он действителен. Следующий код - пример того, что должно работать, но, как сказано выше, не эксперт и не тестовая среда, поэтому он может иметь синтаксические ошибки.

for x in range(1,11):
    i = int(0)
    num = int(0)

    while num < 10 or num > 100:
        if i == 0:
            num = int(input("Please enter number "+str(x)+" [10 - 100]: "))
        else:
            num = int(input("Please enter a valid number: "))

        i += 1

    inList.append(num)

print(inList)
Другие вопросы по тегам