python-3.x 输出该学生获得的平均百分分数,精确到小数点后两位

bweufnob  于 2023-05-02  发布在  Python
关注(0)|答案(3)|浏览(88)

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

cu6pst1q

cu6pst1q1#

旁注:由于sum是内置的,所以不应该覆盖它。请为变量使用其他名称。我看到你使用scores变量,这是不正确的。因此,修复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
vxbzzdmp

vxbzzdmp2#

For value in items已经指示了列表中的标记,所以你不需要另一个for循环。这是我想出的解决办法。谢谢

for i,j in student_marks.items():
    if query_name == i:
        a = 0
        a += sum(j)

        a1 = a/len(j)
        
        print("%.2f" % a1)
jtw3ybtb

jtw3ybtb3#

我在Hackerrank上遇到了同样的问题,因为他们没有很好地解释这个问题。我希望下面的解决方案能有所帮助:

# Enter the number of grades a student has:
# for ex. n = 3 for "Malika 52 56 60"
n = int(input())

# NOTE: The below is just data to test this:
# Krishna 67 68 69
# Arjun 70 98 63
# Malika 52 56 60

student_marks = {}

for _ in range(n):
    # Enter the student(s) with their data each time seperately in the "input()" for ex. Malika 52 56 60
    name, *line = input().split()
    scores = list(map(float, line))
    student_marks[name] = scores

# Enter the students name: "Malika"
query_name = input() 

if query_name in student_marks:
    grades = student_marks[query_name]
    average_grade = sum(grades) / len(grades)
    print("{:.2f}".format(average_grade))
else:
    print("Student NOT found.")

只对“Malika”这样做的结果应该是56。00
下面我将进一步解释这个解决方案中使用的一些代码:

name, *line = input().split()

1.这一行从input(控制台)读入一个字符串,将其拆分为一个字符串列表,然后将列表中的第一个字符串赋给变量“name”,其余字符串赋给列表“line”。“line”前的“*”用于将列表中剩余的字符串解压缩到“line”中,以便它包含除第一个字符串之外的所有字符串。当您不知道列表中将有多少元素时,这是一种有用的技术。

scores = list(map(float, line))

1.这一行使用map()函数和float()函数将字符串列表“line”转换为浮点数列表“scores”。map()函数将float()函数应用于列表中的每个元素,将其转换为浮点数,并返回一个生成转换后值的迭代器。然后使用list()函数从迭代器创建一个新的列表,包含所有转换后的浮点值。

student_marks[name] = scores

1.这一行将学生的名字“name”作为键添加到空的“student_marks”字典中,并将其值设置为分数列表“scores”。这允许我们将每个学生的分数存储在字典中,使用他们的名字作为键。
这三行代码用于从input()读取学生的姓名和分数,将分数转换为浮点数,并将它们存储在以学生姓名为键的字典中。

相关问题