iT邦幫忙

2

【HackerRank 解題筆記】尋找百分比(Finding the percentage)

  • 分享至 

  • xImage
  •  

題目為給出一個紀錄學生成績的數量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


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言