Python数组循环不循环/验证器问题

时间:2019-05-26 08:32:10

标签: python arrays validation user-input

我不确定自己做了什么,但是在测试我的代码时,它要么立即崩溃,要么陷入循环。如果第一个输入是值错误(字符串),而第二个输入是数字,则只要保持模式,它就会循环。但是,如果第一个用户输入为int,则程序将崩溃。请任何帮助将不胜感激。

def main():
    courseArray = []
    keepGoing = "y"
    while keepGoing == "y":
        courseArray = getValidateCourseScore()
        total = getTotal(courseArray)
        average = total/len(courseArray)
        print('The lowest score is: ', min(courseArray))
        print('The highest score is: ', max(courseArray))
        print('the average is: ', average)
        keepGoing = validateRunAgain(input(input("Do you want to run this program again? (Y/n)")))


def getValidateCourseScore():
    courseArray = []
    counter = 1
    while counter < 6:
        try:
            courseArray.append(int(input("Enter the number of points received for course: ")))
            valScore(courseArray)
        except ValueError:
            print("Please enter a valid score between 0-100")
            courseArray.append(int(input("Enter a number between 1 and 100: ")))
    counter += 1
    return courseArray


def valScore(courseArray):
    score = int(courseArray)
    if score < 0:
        print("Please enter a valid score between 0-100")
        courseArray.append(int(input("Enter a number between 1 and 100: ")))
    elif score > 100:
        print("Please enter a valid score between 0-100")
        courseArray.append(int(input("Enter a number between 1 and 100: ")))
    else:
        return courseArray

def validateRunAgain(userInput):
    if userInput == "n" or userInput == "N":
        print("Thanks for using my program")
        return "n"
    elif userInput == "y" or userInput == "Y":
        return "y"
    else:
        print("Please enter y or n")
        validateRunAgain(input("Do you want to run this program again? (Y/n)"))
        return getValidateCourseScore()

def getTotal(valueList):
    total = 0
    for num in valueList:
        total += num
    return total

main()

1 个答案:

答案 0 :(得分:0)

用户输入过多,因此我减少了输入并进行了更改。
以下是您更改的代码部分:
我假设在这里valScore()验证输入分数,因此,我还给出了要验证的元素的索引。如果无效,我们将其从数组中删除并引发ValueError,因为它引发错误,我们的counter未更新。

keepGoing = validateRunAgain()

def getValidateCourseScore():
    courseArray = []
    counter = 1
    while counter < 6:
        try:
            courseArray.append(int(input("Enter the number of points received for course: ")))
            valScore(courseArray, counter - 1)
            counter += 1
        except ValueError:
            print("Please enter a valid score between 0-100")
            continue
    return courseArray

def valScore(courseArray, counter):
    score = courseArray[counter]
    if score < 0 or score > 100:
        courseArray.pop()
        raise ValueError

def validateRunAgain():
    while True:
        userInput = input("Do you want to run this program again? (Y/n)")
        if userInput == 'y' or userInput == 'Y':
            return 'y'
        elif userInput == 'n' or userInput == 'N':
            print('thank you for using my program')
            return 'n'
        else:
             print('Enter Y or N')