Как проверить пользовательский ввод для диапазона случайного размера в python

#python #range

#python #диапазон

Вопрос:

ОБНОВЛЕНИЕ: Как мне проверить, что «upperInteger» действительно выше, чем «lowerInteger»?

Я хочу создать диапазон из пользовательского ввода и заставить его не только проверять правильность ввода, но и не позволять пользователю двигаться вперед, пока не будет получен приемлемый ввод. Я считаю, что следует использовать цикл while, но я не уверен, как реализовать его с неопределенным размером диапазона.

Код просто добавит простые числа внутри диапазона в список, который затем будет напечатан.

 prime_range = []
try:
    lowerInteger = int(input("Enter lower range limit: "))
    upperInteger = int(input("Enter upper range limit: "))
except:
    print("Invalid input.  Please input an integer and try again.")

else:
    for i in range(lowerInteger, (upperInteger   1)):
        ##Test if i is a prime number
        primeflag = True
        for j in range (2,i):
            if(i % j == 0):
                primeflag = False
                break
        
        if (primeflag == True):
            prime_range.append(i)


print(prime_range) 
 

Комментарии:

1. я думаю, что здесь нет необходимости использовать else part

2. Интересно. Итак, все, что мне нужно было бы сделать, это убрать «else» и удалить отступ из «for»?

3. да, например, зачем использовать else part, даже если вы знаете это с помощью while и try, за исключением того, что вы принимаете пользовательский ввод как int и обрабатываете эти входные данные, поэтому нет второго условия, о котором нужно позаботиться

Ответ №1:

Вы можете использовать логическую переменную, чтобы узнать, когда пользователь вставил допустимые значения:

 prime_range = []

correct = False
while not correct:
    try:
        lowerInteger = int(input("Enter lower range limit: "))
        upperInteger = int(input("Enter upper range limit: "))
        correct = True
    except:
        print("Invalid input.  Please input an integer and try again.")

else:
    for i in range(lowerInteger, (upperInteger   1)):
        ##Test if i is a prime number
        primeflag = True
        for j in range(2, i):
            if i % j == 0:
                primeflag = False
                break

        if primeflag == True:
            prime_range.append(i)


print(prime_range)
 

Ответ №2:

Вы на правильном пути с циклом while.

Чтобы упростить задачу, я бы выделил выборку входных данных как собственную функцию. В этой функции вы можете проверить все правила для входных данных.

 def parse_inputs():
    while True:
        lower = input("Enter lower range limit: ")
        if not lower.isnumeric():
            print("lower range must be an integer. Please try again.")
            continue
        lower = int(lower)

        upper = input("Enter upper range limit: ")
        if not upper.isnumeric():
            print("upper range must be an integer. Please try again.")
            continue
        upper = int(upper)
        
        if upper < lower:
            print("lower range must be less than upper range. Please try again.")
            continue
        
        return lower, upper
 

Теперь вы можете использовать это в своем цикле:

 lower, upper = parse_inputs()
for i in range(lower, upper   1):
    ...