Python 包括函数的循环,以便在数字不正确时要求用户重新输入数字

Python 包括函数的循环,以便在数字不正确时要求用户重新输入数字,python,python-3.8,Python,Python 3.8,我需要修改我的程序,使其包含一个带循环的主读。文档中说,对于我的getNumber函数,它应该只要求用户输入一个介于2和30之间的数字,getScores函数应该要求用户输入一个介于0和100之间的数字。如果他们没有得到一个数字,它应该告诉他们重新输入一个数字。我在运行程序时没有收到任何错误,但不确定我缺少了什么,以确保其正常运行,包括重新输入数字部分。代码如下: # main def main(): endProgram = 'no' print while endPr

我需要修改我的程序,使其包含一个带循环的主读。文档中说,对于我的getNumber函数,它应该只要求用户输入一个介于2和30之间的数字,getScores函数应该要求用户输入一个介于0和100之间的数字。如果他们没有得到一个数字,它应该告诉他们重新输入一个数字。我在运行程序时没有收到任何错误,但不确定我缺少了什么,以确保其正常运行,包括重新输入数字部分。代码如下:

# main
def main():
    endProgram = 'no'
    print
    while endProgram == 'no':
        totalScores = 0
        averageScores = 0
        number = 0
        number = getNumber(number)
        totalScores = getScores(totalScores, number)
        averageScores = getAverage(totalScores, averageScores, number)
        printAverage(averageScores)
        endProgram = input('Do you want to end the program? yes or no ')
        while not (endProgram != 'yes' or endProgram != 'no'):
            print('Enter yes or no ')
            endProgram = input('Do you want to end the program? (yes or no )')

# this function will determine how many students took the test
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: '))

# this function will get the total scores
def getScores(totalScores, number):
    for counter in range(0, number):
        score = int(input('Enter their score: '))
    return totalScores
    while score < 0 or score > 100:
            print('Please enter a number between 0 and 100')
            score = int(input('Enter their score: '))
            return score

# this function will calculate the average
def getAverage(totalScores, averageScores, number):
    averageScores = totalScores / number
    return averageScores

# this function will display the average
def printAverage(averageScores):
    print ('The average test score is: ', averageScores)  

# calls main
main()
#主
def main():
endProgram='否'
打印
而endProgram==“否”:
总分=0
平均分数=0
数字=0
number=getNumber(number)
totalScores=getScores(totalScores,数字)
averageScores=getAverage(总分、平均分、数字)
打印平均值(平均分数)
endProgram=input('是否要结束程序?是或否')
而不是(endProgram!=“是”或endProgram!=“否”):
打印('输入是或否')
endProgram=input('是否要结束程序?(是或否)')
#此函数将确定参加考试的学生人数
def getNumber(编号):
number=int(输入('参加考试的学生人数:'))
返回号码
当数量<2或数量>30时:
打印('请输入一个介于2和30'之间的数字)
number=int(输入('参加考试的学生人数:'))
#此函数将获取总分
def getScores(总分数,数字):
对于范围(0,数字)内的计数器:
分数=整数(输入('输入他们的分数:'))
返回总分
当分数<0或分数>100时:
打印('请输入一个介于0和100'之间的数字)
分数=整数(输入('输入他们的分数:'))
回击得分
#此函数将计算平均值
def getAverage(总分数、平均分数、数字):
平均分数=总分数/数字
返回平均分数
#此函数将显示平均值
def打印平均值(平均分数):
打印('平均测试分数为:',平均分数)
#主叫
main()

第一个建议是改变这一点:

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: '))
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')