使用多个输入的函数[Python]

时间:2016-05-03 05:22:08

标签: python function

我是python的新手,现在正在我的第一堂课,仅用了大约4周。

分配是计算测试平均值并显示输入的每个测试的等级。

部分作业是使用一个函数来计算平均值,以及决定分配给每个分数的字母等级。

据我所知,函数应该有助于减少全局变量。

我的问题是: 如何压缩此代码?

我不知道如何使用函数来决定字母等级,然后在不为已输入的每个等级创建全局变量的情况下显示该字母。

如果您发现我的代码中存在任何冗余,我会很高兴能够提出一些有关如何减少代码的问题。如果我按原样转动它,我已经可以闻到我会得到的标记......

 def main():



    grade1=float(input( "Enter score (0-100):"))
    while (grade1 <0 or grade1 >100 ):
        if grade1 <0 or grade1 >100:
            print("Please enter a valid grade")
            grade1=float(input( "Enter score (0-100):"))


    grade2=float(input( "Enter score (0-100):"))
    while (grade2 <0 or grade2 >100 ):
        if grade2 <0 or grade2 >100:
            print("Please enter a valid grade")
            grade2=float(input( "Enter score (0-100):"))


    grade3=float(input( "Enter score (0-100):"))
    while (grade3 <0 or grade3 >100 ):
        if grade3 <0 or grade3 >100:
            print("Please enter a valid grade")
            grade3=float(input( "Enter score (0-100):"))

    grade4=float(input( "Enter score (0-100):"))
    while (grade4 <0 or grade4 >100 ):
        if grade4 <0 or grade4 >100:
            print("Please enter a valid grade")
            grade4=float(input( "Enter score (0-100):"))

    grade5=float(input( "Enter score (0-100):"))
    while (grade5 <0 or grade5 >100 ):
        if grade5 <0 or grade5 >100:
            print("Please enter a valid grade")
            grade5=float(input( "Enter score (0-100):"))

    total=grade1+grade2+grade3+grade4+grade5
    testAverage=calcAverage(total)
    eachGrade1=determineGrade(grade1)
    eachGrade2=determineGrade(grade2)
    eachGrade3=determineGrade(grade3)
    eachGrade4=determineGrade(grade4)
    eachGrade5=determineGrade(grade5)

    print("\nTest #1 grade:", (eachGrade1))
    print("Test #2 grade:", (eachGrade2))
    print("Test #3 grade:", (eachGrade3))
    print("Test #4 grade:", (eachGrade4))
    print("Test #5 grade:", (eachGrade5))
    print("\nTest average:", (testAverage),("%"))


def calcAverage(total):
    average=total/5
    return average


def determineGrade(grade):
    if grade >=90:
        return "A"
    elif grade >=80:
        return "B"
    elif grade >=70:
        return "C"
    elif grade >=60:
        return "D"
    else:
        return "F"

2 个答案:

答案 0 :(得分:1)

我不会重构你的整个代码,但这里有一些指示:

首先,您需要一个函数来获取用户输入,我们称之为get_score。我不会在这里详细介绍,因为这里有一个关于如何编写函数的优秀资源:Asking the user for input until they give a valid response。该函数应该返回一个浮点数或整数,所以不要忘记input(假设你使用的是Python 3)返回一个你必须手动转换为int或float的字符串。

要获得n分数列表,我建议使用以下功能:

def get_n_scores(n):
    return [get_score() for _ in range(n)]

方括号中的内容是列表理解,相当于:

scores = []
for _ in range(n):
    scores.append(get_score())

如果您对理解不满意,请使用此代码(不要忘记返回result)。

变量名_通常用于表示未使用的临时值(迭代除外)。

您可以通过调用grade1来避免声明grade5 ... all_scores = get_n_scores(5),这将返回包含用户输入的列表。请注意,索引是从零开始的,因此您将能够访问all_scores[0] ... all_scores[4]

您可以只应用内置的total函数sum,而不是硬编码total = sum(all_scores),假设all_scores包含整数或浮点数。

最后,您可以将功能determineGrade应用于all_scores中的每个分数,以确定每个分数的分数。同样,您可以使用理解:

all_grades = [determineGrade(score) for score in all_scores]

或传统:

all_grades = []
for score in all_scores:
    all_grades.append(determineGrade(score))

其他东西看起来没问题,只是为了打印成绩,你可以循环all_grades并打印项目。如果你想编写更多函数来包含我们正在进行的几个函数调用,这取决于你。

一般情况下,请始终避免使用repeating yourself,而是编写函数。

答案 1 :(得分:0)

我写的如下:

def get_grade():
    while(True):
        grade = float(input("Enter score (0-100):"))
        if grade >= 0 and grade <= 100:
            return grade
        print("Please enter a valid grade!")

def get_average(sum_val, counter):
    return sum_val/counter


def determine_grade(grade):
    if grade >=90:
        return "A"
    elif grade >=80:
        return "B"
    elif grade >=70:
        return "C"
    elif grade >=60:
        return "D"
    else:
        return "F"

test_num = 5
sum_val = 0
result = {}

for i in range(test_num):
    grade = get_grade()
    result[i] = determine_grade(grade)
    sum_val += grade

for key in result:
    print ("Test %d Grade is %s" % (key+1, result[key]))
avg = get_average(sum_val, test_num)
print ("Average is %d" % avg)

像这样工作:

>>> ================================ RESTART ================================
>>> 
Enter score (0-100):89
Enter score (0-100):34
Enter score (0-100):348
Please enter a valid grade!
Enter score (0-100):34
Enter score (0-100):90
Enter score (0-100):85
Test 1 Grade is B
Test 2 Grade is F
Test 3 Grade is F
Test 4 Grade is A
Test 5 Grade is B
Average is 66
>>>