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

对多个输入使用函数[Python],python,function,Python,Function,我是python新手,现在正在上第一堂课,大约4周后 任务是计算测试平均值并显示输入的每个测试的分数 作业的一部分是使用一个函数来计算平均值,并决定每个分数的字母等级 据我所知,函数应该有助于减少全局变量 我的问题是:如何压缩此代码 我不知道如何使用一个函数来决定字母等级,然后显示,而不为输入的每个等级创建一个全局变量 如果您注意到我的代码中有任何冗余,我希望您能给我一个提示,并给我上一堂关于如何减少冗余的课。我已经闻到了如果我照原样把它交上来我会得到的折扣 def main():

我是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"
def main():
等级1=浮动(输入(“输入分数(0-100):”)
而(一年级100分):
如果等级为1 100:
打印(“请输入有效等级”)
等级1=浮动(输入(“输入分数(0-100):”)
等级2=浮动(输入(“输入分数(0-100):”)
而(二级100):
如果等级为2 100:
打印(“请输入有效等级”)
等级2=浮动(输入(“输入分数(0-100):”)
等级3=浮动(输入(“输入分数(0-100):”)
而(三级100):
如果等级为3 100:
打印(“请输入有效等级”)
等级3=浮动(输入(“输入分数(0-100):”)
等级4=浮动(输入(“输入分数(0-100):”)
而(四级100):
如果等级为4 100:
打印(“请输入有效等级”)
等级4=浮动(输入(“输入分数(0-100):”)
等级5=浮动(输入(“输入分数(0-100):”)
而(五级100):
如果等级为5 100:
打印(“请输入有效等级”)
等级5=浮动(输入(“输入分数(0-100):”)
总计=1级+2级+3级+4级+5级
testAverage=平均值(总计)
每个等级1=确定等级(等级1)
每个等级2=确定等级(等级2)
每个等级3=确定等级(3级)
每个等级4=确定等级(等级4)
每个等级5=确定等级(等级5)
打印(“\n测试1级:,(每级1))
打印(“测试2级:,(每个等级2))
打印(“测试3级:,(每个等级3))
打印(“测试4级:,(每个等级4))
打印(“测试5级:,(每个级别5))
打印(“\n测试平均值:”,(测试平均值),(“%”)
def平均值(总计):
平均数=总数/5
平均回报率
def测定等级(等级):
如果等级>=90:
返回“A”
elif等级>=80:
返回“B”
elif等级>=70:
返回“C”
elif等级>=60:
返回“D”
其他:
返回“F”

我不会重构您的整个代码,但这里有几点提示:

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

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

def get_n_scores(n):
    return [get_score() for _ in range(n)]
方括号中的内容是一个列表,相当于:

scores = []
for _ in range(n):
    scores.append(get_score())
如果您对理解不满意,请使用此代码(不要忘记返回
结果

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

您可以避免声明
grade1
grade 5
调用
all_scores=get_n_scores(5)
,将返回一个包含用户输入的列表。请记住,索引是以零为基础的,因此您可以访问
所有分数[0]
<代码>所有分数[4]

不必硬编码
total
,只需应用内置的
sum
函数:
total=sum(all_分数)
,假设
all_分数
包含整数或浮点数

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

all_grades = [determineGrade(score) for score in all_scores]
或者传统的:

all_grades = []
for score in all_scores:
    all_grades.append(determineGrade(score))
其他的东西看起来没问题,只是为了打印分数,你可以循环所有的分数,然后打印项目。若您想编写更多的函数来封装我们正在进行的几个单独的函数调用,这取决于您


一般来说,总是避免编写函数。

我将编写如下内容:

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)

编码规则#1,切勿复制和粘贴。无论何时你复制和粘贴,这都是一个功能。恐怕我不明白,你指的是什么?你可能需要仔细阅读与本作业相关的课程材料。它可能讨论函数、返回值和列表等主题。您有5个相同的代码块,唯一的区别是变量gradeX。您是否复制并粘贴了该代码,然后更改了变量名?我猜是你干的。与其这样做,不如做一个函数。当然这是你的问题,但这里没有人对你的家庭作业感兴趣。@kurt这肯定不是本文的目的。我第一次上编码课才几周,有些概念对我来说很难理解,我觉得我无法从书中构思出来,只是想寻求帮助。谢谢你花时间把这些都写出来。在使用您的建议并尝试更恰当地使用函数的同时,重新执行整个操作。不要忘记列表中所有数字的平均值是
average=sum(my_list)/len(my_list)
,您也不必硬编码长度。@ByteCommander的确,
CalAverage
应该包含两个参数(如果你想要一个功能的话)。我错过了。谢谢你的参与
>>> ================================ 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
>>>