向具有三个独立输入的函数添加输入验证

2024-06-26 06:45:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我让程序按我所希望的方式工作,但我似乎不知道如何为用户测试分数输入添加验证。输入值必须介于0-100之间,并验证每个输入的分数

如何修改代码以使用验证循环将输入设置为>;=0和<;=提示分数函数中的100? 我以前尝试过while循环,但在每个输入上都忽略了它


def calc_average(scoreOne, scoreTwo, scoreThree):
    average = (scoreOne + scoreTwo + scoreThree)/3
    return average

def determine_grade(studentScore):
    if studentScore < 60:
        return "F"
    elif studentScore < 70:
        return "D"
    elif studentScore < 80:
        return "C"
    elif studentScore < 90:
        return "B"
    elif studentScore < 101:
        return "A"

def prompt_scores():
    enteredScoreOne = int(input("Please enter score 1: "))
    enteredScoreTwo = int(input("Please enter score 2: "))
    enteredScoreThree = int(input("Please enter score 3: "))

    return enteredScoreOne, enteredScoreTwo, enteredScoreThree

def print_results(scoreOne, scoreTwo, scoreThree):
    print("\nScore\tLetter Grade" )
    print(str(scoreOne) + "\t\t" + determine_grade(scoreOne), \
    str(scoreTwo) + "\t\t" + determine_grade(scoreTwo), \
    str(scoreThree) + "\t\t" + determine_grade(scoreThree), sep = "\n")

def main():
    scoreOne, scoreTwo, scoreThree = prompt_scores()
    print_results(scoreOne, scoreTwo, scoreThree)
    print("-----------------------")
    print("Average score: " + str(int(calc_average(scoreOne, scoreTwo,scoreThree)))) 
    print(" Final grade: " + determine_grade(int(calc_average(scoreOne, scoreTwo, scoreThree))))

    rerun_main = input("Do you want to continue? Enter y/n: ")

    if rerun_main == "Y" or rerun_main == "y":
        main()

main()

Tags: inputreturnmaindefintgradescoreprint
2条回答
enteredScoreOne = int(input("Please enter score 1: "))
while enteredScoreOne not in range(0, 101):
    print("[!] Invalid input!")
    enteredScoreOne = int(input("Please enter score 1: "))

其他变量也是如此

如果您正在运行python2(假设您正在使用input读取字符串,那么您不会,但我会添加这个以防万一),您最好将in range(...)替换为(0 <= enteredScoreOne <= 100),因为range将返回一个列表,这将消耗一点额外的内存

如果您使用函数,并且可以使用递归强制用户输入0-100之间的值,那么您可以在获取输入时检查输入的值。我还可以看到您正在使用python本身具有内置函数的附加函数,例如:sum()。同时尽可能地节省内存和处理,现在看来这不是什么大问题,但是当你有1000行代码的时候,即使是这些小东西也能节省你的时间。在这里,我的意思是不用两次调用函数,而是将结果保存在变量中并使用它。我在代码中添加了所有这些,并给出了答案

def get_input(): 
    try:
        score=int(input("please enter score : "))
        if (score >=0 and score <100):
            return score
        else:
            print("Score should be inbetween 0-100. Try again :-(:-(:-(")
            get_input()
     except:#if user enters any special char except float or int tell him to enter int
            print("Only integer is accepted")

def determine_grade(avg):
    if studentScore < 60:
        return "E"
    elif studentScore < 70:
        return "D"
    elif studentScore < 80:
        return "C"
    elif studentScore < 90:
        return "B"
    elif studentScore < 101:
        return "A"


def print_results(*args):
     for i,j in enumerate(args):
         print("score "+str(i)+" = "+str(j)+" grade = "+determine_grade(j))


def main():
    score1 = get_input()
    score2 = get_input()
    score3 = get_input()
    print_results(score1, score2, score3)
    print("           -")
    avg=sum([score1,score2,score3])/3
    print("Average score: " + str(avg))
    print(" Final grade: " + determine_grade(avg))
    rerun_main = input("Do you want to continue? Enter y/n: ")
    if rerun_main.lower() == "y": 
        main()

main()

相关问题 更多 >