舉一個簡單的例子,大學裡面的成績我們都知道,不是一錘定音,而是有很多成績然後占比不同,最後才會有總評成績,所以注重細節才是最重要的!下面我們就來看看這個吧!
項目需求:有一份CSV文件裡面包含很多學生的成績(很多平時成績,還有姓名,學號),這個程序要做的是,利用規定好的算法和規則,把總評成績計算出來,然後排名,打印出每個階段的成績信息作為教研改革。同時必須輸出好看,寫入TXT文件文件!
涉及知識:Python全部語法!
項目特點:格式化了打印,使得輸出比較好看直觀,函數結構化,幫助代碼閱讀,項目可移植,簡單易懂
解析文件
def csv_students():
global student_infos
import csv
student_infos = []
with open(r"成績詳細.csv", encoding='utf-8-sig') as file:#將你的CSV文件和該程序文件放在一個文件夾下面
f_csv = csv.reader(file)
header = next(f_csv)
for row in f_csv:
student_info = {}
for index in range(6):
student_info[header[index]] = row[index]
student_infos.append(student_info)
# 格式化打印函數,使其輸出自動對齊
add_print1()
將其文件解析,然後以字典的形式展示,但是這裡優化了代碼,使得打印好看。這裡我們導入的CSV這個庫,對於它的一些屬性操作語法,我們可以百度看看。首先
我們建立了一個列表用於後面我們存儲字典所有,然後打開了這個文件,並用.reader()讀取表頭信息,然後將這個表頭取出來,這樣方便我們後續操作.next()
之後我們用循環創建字典,每個字典裡面的鍵和值都是我們自己加上的。6各標題,6個信息,我們就完成鍵和值的匹配,這樣就完整的創建了一個字典,最後直到我們完全讀取了這些東西,循環才結束。
實現效果:
計算成績
def scores_students():
for scores in student_infos:
total = float(scores["實驗1"]) * 1 / 10 + float(scores["實驗2"]) * 1 / 10 + \
float(scores["實驗3"]) * 2 / 10 + float(scores["期末成績"]) * 6 / 10
scores["總評成績"] = total
# 根據總評成績進行排名,並打印出來(附加功能)
student_infos.sort(key=lambda item: item["總評成績"], reverse=True)
i = 0
for score in student_infos:
i += 1
score["班級排名"] = i
add_print2()
import json
# 將解析後的CSV文件,轉換為python對象,並儲存在一個文件裡面(附加功能)
with open(r"student.txt", "w", encoding="utf_8") as file:
json.dump(student_infos, file, ensure_ascii=False, indent=0)
分段打印
def grad_students():
num1 = 0
num2 = 0
num3 = 0
num4 = 0
num5 = 0
for scores in student_infos:
grade = float(scores["總評成績"])
if grade < 60:
num1 += 1
elif grade >= 60 and grade < 70:
num2 += 1
elif grade >= 70 and grade < 80:
num3 += 1
elif grade >= 80 and grade < 90:
num4 += 1
elif grade >= 90 and grade <= 100:
num5 += 1
all = int(num1 + num2 + num3 + num4 + num5)
print("\t總的人數有%s人" % (all))
# 打印出分數段人數和所占比
print("\t[0, 60)的有 {}人 ".format(num1), "\t占比為{}".format(str(num1 / all * 100)[:4] + "%"))
print("\t[60,70)的有{}人".format(num2), "\t占比為{}".format(str(num2 / all * 100)[:4] + "%"))
print("\t[70,80)的有{}人".format(num3), "\t占比為{}".format(str(num3 / all * 100)[:4] + "%"))
print("\t[80,90)的有{}人".format(num4), "\t占比為{}".format(str(num4 / all * 100)[:4] + "%"))
print("\t[90,100]的有{}人".format(num5), "\t占比為{}".format(str(num5 / all * 100)[:4] + "%"))
查找學生
def find_students():
while True:
study_num = input("請輸入您要查找的學號: ")
for score in student_infos:
if score["學號"] == study_num:
print("姓名:", score["姓名"], "學號:", score["學號"], "實驗1:",
score["實驗1"], "實驗2:", score["實驗2"], "實驗3:",
score["實驗3"], "期末成績:", score["期末成績"], "總評成績:",
score["總評成績"], "班級排名:", score["班級排名"])
continue
這樣結束了,當然這裡我們叫做後端開發項目,一般我們手機或者教務系統裡面的我們叫做圖形界面操作開發,這個就需要我們後面的知識了。
點擊此處下載源碼進行操作!!!