Первое предложение состоит в том, чтобы изменить это:
number = int(input('How many students took the test: '))
причина в том, что, как написано, он принимает пользовательский ввод и неявно предполагает, что он может быть приведен к int
. Что произойдет, если пользователь введет « hello, world! » в качестве ввода? Сначала необходимо взять пользовательский ввод в виде строки и проверить, будет ли он правильно преобразован:
number = input("enter a number:")
if number.isdecimal():
number = int(number)
Далее, у функции в целом есть некоторые структурные проблемы:
def getNumber(number):
number = int(input('How many students took the test: '))
return number
while number < 2 or number > 30:
print('Please enter a number between 2 and 30')
number = int(input('How many students took the test: '))
число передается в качестве аргумента getNumber
. Затем имя number
переназначается на результат чтения пользовательского ввода и возвращается ... Убедитесь, что вы понимаете, что делает оператор return
: когда поток управления достигает оператора возврата, эта функция завершается и отправляет это значение обратно к абоненту. Так что ваш while
l oop никогда не запускается.
Может быть, это будет работать лучше:
def getNumber():
while number := input("enter a number"):
if number.isdecimal() and int(number) in range(0, 31):
return int(number)
print('Please enter a number between 2 and 30')