題目要求(成績數(shù)據(jù)已給出)
輸入學(xué)生成績信息序列,完成對于每個學(xué)生成績數(shù)據(jù)的儲存,并將所有學(xué)生儲存于列表中;在此基礎(chǔ)上,按照總分從高到低的學(xué)生名單,總分從低到高的學(xué)生名單,三門課成績從高到低的學(xué)生名單?相同成績都按先錄入排列在前的規(guī)則處理。
成績原始數(shù)據(jù)如下:
SanZhang 70 80 61
SiLi 86 77 81
WuWang 88 90 77
MingLi 60 77 81
MiWang 71 70 60
HaiLi 88 78 89
HeWang 70 90 80
LiWang 67 71 70
- 解題思路(啰嗦的很,可直接看代碼)
- 首先進行數(shù)據(jù)的輸入,要求用字典儲存學(xué)生信息,并將學(xué)生放入列表。因此,思路為:建立一個儲存數(shù)據(jù)的列表data_list,并將字典作為列表的元素,每一個字典對應(yīng)一個學(xué)生的信息,然后通過循環(huán)結(jié)構(gòu)將輸入的數(shù)據(jù)分別作為對應(yīng)鍵的值。
- 建立數(shù)據(jù)列表后,通過調(diào)用列表中的字典,取出學(xué)生成績進行運算比較。建立data_sum,list_tmp等成績列表儲存各個學(xué)生總成績和單科成績,對這些列表進行排序,然后利用列表進行學(xué)生的排序:循環(huán)遍歷成績列表中每一個數(shù)值,然后再在字典中遍歷查找相同值,提取該值對應(yīng)的字典的Name成員,放入新建的列表sort_list中;;循環(huán)結(jié)束即得到排序的名單(即sort_list)。
- 注意到成績可能出現(xiàn)重復(fù)情況,而相同成績都按先錄入排列在前的規(guī)則處理,因此想到兩種處理方式(分別在sort_sum和sort_sin中體現(xiàn)):
(1)利用pandas去除重復(fù)項,然后在字典中遍歷找到相符值,得到值對應(yīng)的鍵
(2)不去除重復(fù)元素,在遍歷尋找相符值時,找到一個即進入下一次循環(huán)(continue)。
代碼如下:
import pandas as pd
from pandas import DataFrame # 用于刪除求和時重復(fù)項
'''
對待重復(fù)成績,本程序提供兩種處理方式(在sort_sum和sort_sin中體現(xiàn)):
1.利用pandas去除重復(fù)項,然后在字典中遍歷找到相符值,得到值對應(yīng)的鍵
2.不去除重復(fù)元素,在遍歷尋找相符值時,找到一個即進入下一次循環(huán)(continue)
'''
# 定義初始化數(shù)據(jù)函數(shù)
def input_data():
data_list = list() # 用字典儲存每個學(xué)生數(shù)據(jù),并將字典放入列表data_list中
for i in range(8):
data_list.append(dict()) # 在列表中創(chuàng)建空字典
title = ["Name", "Math", "English", "Physics"] # 創(chuàng)建鍵列表用于字典鍵值對建立
str_tmp = input() # 輸入得到字符串str_tmp
l_tmp = str_tmp.split(" ") # 將輸入由字符串轉(zhuǎn)為列表l_tmp
data_list[i][title[0]] = l_tmp[0] # 將名字作為鍵Name對應(yīng)值
j = 1
while j < 4: # 將成績分別對應(yīng)鍵放入
data_list[i][title[j]] = int(l_tmp[j])
j += 1
return data_list # 返回儲存信息的(字典)列表
# 定義總成績排序函數(shù)
def sort_sum(data_list):
sort_list = list() # 初始化排序輸出列表
data_sum = list()
for i in range(8):
ind_sum = 0 # 初始化每個人成績總和
title = ["Math", "English", "Physics"]
for j in range(3):
ind_sum += data_list[i][title[j]]
data_sum.append(ind_sum) # 得到總成績列表
data_sum = pd.DataFrame(data_sum)
data_sum.drop_duplicates(subset=None, keep='first', inplace=True) # 去除重復(fù)的總成績,以免在字典中重復(fù)檢索
data_sum = list(data_sum[0])
data_sum.sort() # 將總成績升序排列
for i in range(len(data_sum)):
for j in range(8):
if data_sum[i] == data_list[j]["Math"] + data_list[j]["English"] + data_list[j]["Physics"]:
sort_list.append(data_list[j]["Name"])
print("總成績排名(升序)為:", sort_list)
sort_list.reverse()
print("總成績排名(降序)為:", sort_list)
# 定義單項成績排列函數(shù)
def sort_sin(data_list):
sort_math = list()
sort_eng = list()
sort_phy = list()
list_tmp = list() # 用于暫時存放各個學(xué)生各科成績
for i in range(8): # 排列高數(shù)成績
list_tmp.append(data_list[i]["Math"])
list_tmp.sort(reverse=True)
for i in range(8):
for j in range(8):
if data_list[j]["Math"] == list_tmp[i] and data_list[j]["Name"] not in sort_math:
sort_math.append(data_list[j]["Name"])
continue
list_tmp.clear()
for i in range(8): # 排列英語成績
list_tmp.append(data_list[i]["English"])
list_tmp.sort(reverse=True)
for i in range(8):
for j in range(8):
if data_list[j]["English"] == list_tmp[i] and data_list[j]["Name"] not in sort_eng:
sort_eng.append(data_list[j]["Name"])
continue
list_tmp.clear()
for i in range(8): # 排列大物成績
list_tmp.append(data_list[i]["Physics"])
list_tmp.sort(reverse=True)
for i in range(8):
for j in range(8):
if data_list[j]["Physics"] == list_tmp[i] and data_list[j]["Name"]not in sort_phy:
sort_phy.append(data_list[j]["Name"])
continue
print("高數(shù)成績排名(降序)為: ", sort_math)
print("英語成績排名(降序)為: ", sort_eng)
print("大物成績排名(降序)為: ", sort_phy)
# 主函數(shù)調(diào)用
l = input_data()
print("----------第**次考試學(xué)生成績情況明細----------")
print("學(xué)生名單:")
for i in range(8):
print("(", i+1, ")", l[i]["Name"], sep='', end=' ')
print("\n詳細成績?nèi)缦拢?)
for i in range(8):
print(l[i])
print("成績排名如下:")
sort_sum(l)
sort_sin(l)
注意注意注意!??!
運行時,如果輸入數(shù)據(jù)格式不嚴格按照“數(shù)據(jù)(空格)數(shù)據(jù)(空格)…\n”,則程序無法正常運行。
原因:如果輸入格式不對,則會導(dǎo)致“ ”或“”被列入字典的值,導(dǎo)致無法比較或out of index等問題。
所以,一定嚴格按照格式輸入調(diào)試(就用題目所給數(shù)據(jù),直接復(fù)制粘貼)
運行結(jié)果:文章來源:http://www.zghlxwxcb.cn/news/detail-472872.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-472872.html
到了這里,關(guān)于Python學(xué)生成績排序(循環(huán)實現(xiàn))的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!