【问题标题】:Calculate the average of marks obtained and store it in list format and return back to function计算获得的分数的平均值并以列表格式存储并返回函数
【发布时间】:2021-03-09 19:12:09
【问题描述】:

xyz学校进行了5年级标准班的年考,他们要计算所有参加年考的学生的成绩。每个学生有5个科目分数。让我们帮助他们计算学生的成绩。定义一个名为 calculategrade 的函数,它接受一个参数。第一个参数是学生成绩列表。函数定义代码存根在编辑器中给出。计算列表中给定的所有学生的成绩,存储到列表中,然后返回。计算学生成绩的步骤 迭代每个学生,计算平均分,根据一个学生的平均成绩求成绩 将每个学生的成绩存储到一个列表中,然后返回。

这是我尝试过的

def calculateGrade(students_marks):
    grade = []
    for x in range(len(students_marks)):
        avg = (sum(students_marks[x]))//len(students_marks[x])
        if(avg >= 90):
            grade.append('A+')
        elif avg in range(80,90):
            grade.append('A')
        elif avg in range(70,80):
            grade.append('B')
        elif avg in range(60,70):
            grade.append('C')
        elif avg in range(50,60):
            grade.append('D')
        elif (avg < 40):
            grade.append('F')
    return grade

if __name__ == '__main__':
fptr = open(os.environ['OUTPUT_PATH'], 'w')

students_marks_rows = int(input().strip())
students_marks_columns = int(input().strip())

students_marks = []

for _ in range(students_marks_rows):
    students_marks.append(list(map(int, input().rstrip().split())))

result = calculateGrade(students_marks)
fptr.write('\n'.join(result))
fptr.write('\n')

fptr.close()

用户输入2 5 [50,68,88,85,25] [45,85,88,56,14]

预期输出 C D

我的输出 C

【问题讨论】:

  • 您的问题是什么?当您检查/打印程序中各个点的值和/或条件时,是否有明显的行为不端的地方?您是否使用已知输入测试了您的功能?有用吗?
  • calculateGrade([[50,68,88,85,25], [45,85,88,56,14]]) 工作。
  • 我没有得到想要的输出。因为输入了两个列表,即 ([[50,68,88,85,25], [45,85,88,56,14]]) 两个输入的等级都应该显示,但只能看到一个等级作为输出
  • 请修正你的例子中的缩进。
  • 您也可以像for x in students_marks 这样简单地迭代二维数组,而不是引入range()len()。那么它将是avg = sum(x) // len(x)

标签: python list average


【解决方案1】:

嗯,这很奇怪。它对我来说没问题,但问题可能是 fptr 变量,虽然我不确定。

import os

def calculateGrade(students_marks):
    grade = []
    for x in range(len(students_marks)):
        avg = (sum(students_marks[x]))//len(students_marks[x])
        print(avg)
        if(avg >= 90):
            grade.append('A+')
        elif avg in range(80,90):
            grade.append('A')
        elif avg in range(70,80):
            grade.append('B')
        elif avg in range(60,70):
            grade.append('C')
        elif avg in range(50,60):
            grade.append('D')
        elif (avg < 40):
            grade.append('F')
    return grade


students_marks_rows = int(input().strip())
students_marks_columns = int(input().strip())

students_marks = []

for _ in range(students_marks_rows):
    students_marks.append(list(map(int, input().rstrip().split())))

result = calculateGrade(students_marks)
print(result)
fptr = open("text.txt","w")
fptr.write('\n'.join(result))
fptr.write('\n')

fptr.close()

这就是我定义这个变量的方式,输出是:

C D

【讨论】:

  • 你得到的输出是由于 print(result) 语句。该声明是错误添加的。我现在已经编辑了代码并删除了 print(result) 语句。现在只生成并显示 1 个输出。
  • 这是我在文本文件中的输出。问题可能出在 os.environ['OUTPUT_PATH'] 但我不知道。
  • 问题是黑客等级,只有函数是可编辑的,所以 os.environ['OUTPUT_PATH' 是不可编辑的
【解决方案2】:
elif (avg < 40): 
    grade.append('F') 
return grade

这里你提到了avg&lt;40,但应该是avg&lt;50。为什么?因为你没有提到分数在40-50之间的情况。这就是你只得到一个输出的原因。请尝试将其更改为avg&lt;50 并运行代码。

【讨论】:

    【解决方案3】:

    一切正常,但最后一步需要修改,而不是 avg

    以下是我尝试过的并且有效的方法:

    elif (平均

    【讨论】:

      【解决方案4】:

      这只是语句“返回等级”的问题...如果你在 if-elif 语句中缩进它,你只会得到一个等级,如果你用 for 语句缩进它,你会得到两个等级的预期结果

      【讨论】:

        【解决方案5】:
        def calculateGrade(students_marks):
            result=[]
            marks=students_marks
            for x in marks:
                avg=sum(x)/len(x)
                if avg >=90:
                    grade="A+"
                    result.append(grade)
                elif avg >= 80 and avg <90:
                    grade="A"
                    result.append(grade)
                elif avg >= 70 and avg <80:
                    grade="B"
                    result.append(grade)
                elif avg >= 60 and avg <70:
                    grade="C"
                    result.append(grade)
                elif avg >= 50 and avg <60:
                    grade="D"
                    result.append(grade)
                elif avg < 50:
                    grade="F"
                    result.append(grade)
            return result
        
        if __name__ == '__main__':
            fptr = open(os.environ['OUTPUT_PATH'], 'w')
            
            students_marks_rows = int(input().strip())
            students_marks_columns = int(input().strip())
            
            students_marks = []
            
            for _ in range(students_marks_rows):
                students_marks.append(list(map(int, input().rstrip().split())))
            
            result = calculateGrade(students_marks)
            
            fptr.write('\n'.join(result))
            fptr.write('\n')
            
            fptr.close()
        

        【讨论】:

        • 如果您使用像elif 80 &lt;= avg &lt; 90: 这样的链式比较,您的代码可能会更容易阅读。我已经修复了你的格式并实现了我认为你想要的缩进,但你应该检查一下。最后,请考虑进行编辑以添加有关此代码如何回答问题的说明。
        • 你不需要重复result.append(grade)这么多次,只需将它添加到if块的末尾,这样无论grade var的值是多少,它都会被追加。
        • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-21
        • 2016-03-30
        • 1970-01-01
        • 2018-06-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多