輸出該學生的平均分數,正確到小數點後兩位。

问题描述 投票:0回答:1

这个问题是在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。

python python-3.x dictionary anaconda python-2.x
1个回答
0
投票

旁注:因为 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

© www.soinside.com 2019 - 2024. All rights reserved.