这个问题在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。
3条答案
按热度按时间cu6pst1q1#
旁注:由于
sum
是内置的,所以不应该覆盖它。请为变量使用其他名称。我看到你使用scores变量,这是不正确的。因此,修复sum
相关的东西,您将得到以下解决方案:vxbzzdmp2#
For value in items已经指示了列表中的标记,所以你不需要另一个for循环。这是我想出的解决办法。谢谢
jtw3ybtb3#
我在Hackerrank上遇到了同样的问题,因为他们没有很好地解释这个问题。我希望下面的解决方案能有所帮助:
只对“Malika”这样做的结果应该是56。00
下面我将进一步解释这个解决方案中使用的一些代码:
1.这一行从input(控制台)读入一个字符串,将其拆分为一个字符串列表,然后将列表中的第一个字符串赋给变量“name”,其余字符串赋给列表“line”。“line”前的“*”用于将列表中剩余的字符串解压缩到“line”中,以便它包含除第一个字符串之外的所有字符串。当您不知道列表中将有多少元素时,这是一种有用的技术。
1.这一行使用map()函数和float()函数将字符串列表“line”转换为浮点数列表“scores”。map()函数将float()函数应用于列表中的每个元素,将其转换为浮点数,并返回一个生成转换后值的迭代器。然后使用list()函数从迭代器创建一个新的列表,包含所有转换后的浮点值。
1.这一行将学生的名字“name”作为键添加到空的“student_marks”字典中,并将其值设置为分数列表“scores”。这允许我们将每个学生的分数存储在字典中,使用他们的名字作为键。
这三行代码用于从input()读取学生的姓名和分数,将分数转换为浮点数,并将它们存储在以学生姓名为键的字典中。