【HackerRank 解题笔记】寻找百分比(Finding the percentage)

题目为给出一个纪录学生成绩的数量n,接着会给包含学生姓名与分数的资料,每个值都使用空格分隔。
最后一行query_name即要查询的学生的姓名,需要我们找到特定学生获得的分数的平均值,并且取到小数点后两位。

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()    print()

首先第一步,仍然还是要先了解程式码再讲些什么,大致上解读后,除了* line以外,其他都还能认得,于是便先开始寻找* line的涵义。

主要用途为分解可叠代的(Iterable)物件元素,在进行建立或合併时非常的实用。

根据网路上查到的资料,得知假设以下述的程式码而言,line其实就等同于第一个资料以后,代表其他资料的一个运算子,如下方程式码

name, *line = input().split()#如果我input进去题目中的範例:Krishna 67 68 69#则Krishna则为name *line则是67 68 69#print一下就知道了print(name)print(*line)#得到的答案分别为#Krishna#67 68 69

于是便知道了,题目中的初始程式码中,意思是使用for in 将题目给予的答案,分别切割为name * line,
接着便要开始想如何print出特定学生获得的分数的平均值,并且取到小数点后两位。

由于我们已知sum()可以找列表的总和,而len()则是可以计算列表的个数
平均值即为round(sum(我们要找的那个学生的列表)/len(我们要找的那个学生的列表),2)

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()    print(round(sum(student_marks[query_name])/len(scores)))

但当我输入进题目后,却是错的,因为我没有找到小数点后两位,但我不是已经round小数点后两位了吗?
我就开始搜寻python如何保留小数点后两位,最后得知原来round并不是取到小数俩后两位的方式

round採用的并不是四捨五入, 而是依照指定的位数, 往前或是往后取最接近的数

于是在找寻了许多资料后,去除掉需要引进模组(decimal)的方式,便剩下字符串格式化(%.2f)的方式
将字符串格式化代入到程式码运行后,便成功了这次的题目

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 #student_marks[krishna] = {67,68,69}    query_name = input()    score = sum(student_marks[query_name])/len(student_marks[query_name])    print("%.2f" % score)

参考资料:

保留小数点后两位的方式: https://blog.csdn.net/Jerry_1126/article/details/85009810
round的解释: https://dev.to/codemee/python-de-round-yu-decimal-mo-zu-269a
开箱运算子的解释: https://www.learncodewithmike.com/2019/12/python-unpacking.html


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章