输出该学生获得的平均百分比分数,精确到小数点后两位

2024-04-26 12:55:56 发布

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

这个问题是在hackerrank中提出的。嗯,我看到了“讨论”选项卡,但我更喜欢用我自己的方式。但是我得到了错误的输出

if __name__ == '__main__':
n = int(input())
student_marks = {}
for _ in range(n):
    name, *line = input().split()
    scores = list(map(float, line))
    student_marks[name] = scores
query_name = input()
sum=0

for key, value in student_marks.items():
    if query_name == value:
        for i, p in enumerate(scores):
            #sum=0
            sum=sum+p
        per = float(sum/(i+1))
        print("{:.2f}".format(per))
        break
    else:
        print("try again")

所以我得到的输出

--Input (stdin)--
2 
ram 34 56 67
anish 78 98 54
ram
--Your Output (stdout)--
try again
try again

我知道这个过程看起来很长很无聊,但我真的想通过这个逻辑来解决这个问题。因为我刚刚开始学习python


Tags: nameinforinputifvaluelinefloat
1条回答
网友
1楼 · 发布于 2024-04-26 12:55:56

旁注:因为sum是一个内置的,所以不应该重写它。请为变量使用其他名称。 我看到您使用了分数变量,这是不正确的。因此,修复sum相关内容后,您将得到以下解决方案:

import statistics

if __name__ == '__main__':
    n = int(input())
    student_marks = {}
    for _ in range(n):
        name, *line = input().split()
        scores = list(map(float, line))
        student_marks[name] = scores
    query_name = input()

    while True:
        try:
            marks = student_marks[query_name]
        except KeyError:
            print("Student does not exist")
        else:
            print("{:.2f}".format(statistics.mean(marks)))
            break

相关问题 更多 >