輸入(這是檔案 mygrades.txt 包含的內容)
CS1:5.75
#
CS 2:5.5
數學 1:5.75
@!
經濟 1: 5.5
物理:6
化學:5.75
!#
@
輸出:5.70
代碼:
import os
def get_average_grade(path):
grades = []
filesize = os.path.getsize("C:\\Users\Documents\mygrades.txt")
if not os.path.exists(path):
return None
with open("C:\\Users\Documents\mygrades.txt", "r") as f:
filesize = os.path.getsize("C:\\Users\Documents\mygrades.txt")
if filesize == 0: # not entirely correct because it might contain "#@$%$^&^&*^" for example which means no grade but wont return 0.0
return 0.0
else:
for line in f.readlines():
if ":" in line:
searchforcolon = line.find(":")
number1 = float(line[searchforcolon 1:])
grades.append(number1)
average = sum(grades)/len(grades)
return average
print(get_average_grade("C:\\Users\Documents\mygrades.txt"))
uj5u.com熱心網友回復:
您的代碼的以下表達可以完成這項作業。我假設您想將平均值四舍五入到小數點后第二位:
v = []
with open(PATH_TO_FILE, "r") as f:
for l in f.readlines():
if ":" in l:
v.append(float(l.split(":")[1].strip()))
print(f'{int(100 * sum(v)/len(v))/100:.2f}' if len(v) > 0 else None)
uj5u.com熱心網友回復:
似乎你想要這樣的東西:
import os
def get_average_grade(path):
if not os.path.exists(path):
return None
grades = []
with open(path) as file:
for line in file:
if ':' in line:
_, grade = line.strip().split(':')
if ''.join(grade.strip().split('.', maxsplit=1)).isnumeric():
grades.append(float(grade))
return (grades and round(sum(grades) / len(grades), 2)) or 0.0
print(get_average_grade('myfile.txt'))
首先,你沒有path在你的函式中正確使用引數,你必須把它放在你使用路徑的任何地方。
這個函式的作業非常簡單,首先檢查路徑是否存在,如果不回傳 None。然后定義一個串列并打開檔案(使用for line in f而不是for line if f.readlines())。然后檢查分號是否在該行中并由該分號拆分,而不是嘗試查找其索引,這將回傳一個串列,該串列將包含該行中每個分號前后的文本。因此,通過使用解包來提取等級,然后檢查它是否可以轉換為浮點數,如果不可能,則只需繼續(如果無法轉換為浮點數,您可能希望以某種方式提醒用戶)。然后有一個簡單的短路,首先檢查成績串列是否為空,如果是,則回傳0.0(因此未找到成績),否則回傳四舍五入到小數點后兩位的平均值
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/334678.html
