『壹』 python輸入若干個0–100的成績,計算所有成績的平均分
python3.6代碼:
cnt=0
whileTrue:
print("請輸入分數:")
i=input()
if(noti):
print("輸入有誤!")
print("學生人數:"+str(cnt))
int i;
min = max = score[0];
avg = 0;
for(i=0; i<n; i++)
avg += score[i];
if(score[i] > max)
規范的代碼:
Python採用強制縮進的方式使得代碼具有較好可讀性。而Python語言寫的程序不需要編譯成二進制代碼。Python的作者設計限制性很強的語法,使得不好的編程習慣(例如if語句的下一行不向右縮進)都不能通過編譯。其中很重要的一項就是Python的縮進規則。
一個和其他大多數語言(如C)的區別就是,一個模塊的界限,完全是由每行的首字元在這一行的位置來決定(而C語言是用一對花括弧{}來明確的定出模塊的邊界,與字元的位置毫無關系)。
『貳』 python編程
錄入學號和各科成績以「,」分隔,每行一個學生,輸入字母「q」(不區分大小寫)退出錄入並列印,代碼如下:
『叄』 Python設計 依次輸入三名同學五門功課得分,計算並輸出每位同學的總分,並將每位同學的總分保存在列表
一次瘦肉,三名同學五門功課的得分,並輸出每位同學的總分,並將每位同學總分保存在列表中,你可以用自動求和的方式。
『肆』 python3計算每個學生的總成績
數量少的話可以用列表循環來實現
數量多的話就要用pandas來實現了
『伍』 用Python編寫學生成績分析系統
學生的數量我們並不知道有多少,有可能是1個學生,但也有可能是100000個學生
但是我們能確定的是學生的學號,因為每個學生的學號都是不一樣的(除非出現意外情況)
那麼我們可以以學生的學號來排序,比如000是小明,那麼我們把000放在list的第一位,把小明這個人的名字放在學生名的list的第一位,那麼他的所有的成績分數什麼的都會在每個list的第一位
現在我們可以開始做第一步,尋找學生。 尋找學生我們需要一個parameter,一般來說會給學號或者是名字,那麼我們可以用linear search從list的頭開始尋找到尾。如果沒有到達list的尾部而且還尋找到了學生,那麼return 他在這個list的位置,如果到達了list的底部,return一個message告訴對方系統里沒有這個學生
計算學生總成績:我們已經知道了這個學生名字或者學號在各個list的位置了,那麼這個學生所對應的成績分數都在各個list的相同的位置,那麼我們只用上個方法return的數字去尋找各個考試的分數,然後根據百分比相乘後加起來,這就是這個學生的總成績
排名:這個要根據什麼來排,如果你是根據總成績來排的話,你需要去比較所有的分數。這個就需要sorting search,至於方法有很多,應該有六種,具體的我記不清楚,不過你可以去網上找找
用字母代表成績:這個也很簡單,既然你都知道分數了,那麼就設置一個區域,比如90-100是優秀,那麼把所有在90-100的分數全部變成A然後存入list裡面就行了(記得要按照順序!!)
班級平均分:emmmm這個是咋算來著的。。。。應該是把所有學生在某一次作業或者考試的成績全部加起來後除以全部人數吧。。那麼你自己按照一個順序,把所有的分數加起來除以所有的人數後再存入list裡面就行了
『陸』 用python怎麼寫出輸入語文和數學成績,求出其總分和平均數
摘要 1.輸入學生學號:
『柒』 python計算學生成績的平均值
依次輸入學生的三門科目成績:
3.計算該學生的平均成績,並列印:
4.平均成績保留兩位小數點:
計算該學生語文成績占總成績的百分比,並列印。
『捌』 Python其實很簡單 第二十一章 DataFrame數據處理
將Excel中的的數據讀入數據框架DataFrame後,可以非常方便的進行各種數據處理。
21.1 列間求和
求總分(總分=語文+數學+英語)
對於上一章所提到的學生成績表,僅用一個語句即可完成總分計算,並填充。
df['總分']=df['語文']+df['數學']+df['英語']
完整代碼如下:
from pandas import read_excel
file='d:/student.xlsx' #見第18章表18-1
df=read_excel(file,sheet_name=0,converters={'學號':str})
df['總分']=df['語文']+df['數學']+df['英語']
print(df.head()) #df.head()的作用是僅顯示5行記錄。
運行結果如下:
序號 學號 姓名 年級 班級 語文 數學 英語 總分 名次
0 1 070101 王博宇 NaN NaN 84 71 93 248 NaN
1 2 070102 陳冠濤 NaN NaN 89 89 89 267 NaN
2 3 070103 李文博 NaN NaN 89 72 76 237 NaN
3 4 070204 姜海燕 NaN NaN 89 89 89 267 NaN
4 5 070205 林若溪 NaN NaN 91 95 83 269 NaN
21.2替換
既可以將對滿足條件的行和列的數據替換,也可以對整個集合的數據按照條件進行替換。
df['總分'].replace(310,'x',inplace=True)
將總分列的數值「310」替換為「x」。inplace=True表示改變原數據。
df.replace(76,0,inplace=True)
將整個DataFrame中的數值「76」替換為「0」。
df.replace([98,76,99],0,inplace=True)
將整個DataFrame中的數值「98,76,99」一次替換為「0」。
21.2排序
既可以將某一列作為關鍵欄位排序,也可以將幾個列分別作為主、次關鍵欄位進行排序。排序既可以按升序排序,也可以按降序排序。
函數sort_values()的語法格式如下:
df.sort_values(by=[「col1」,」col2」,......,」coln」],ascending=False)
其中,coln表示列名,也可以是列名的列表;ascending表示排序方式,值為True表示升序,可以省缺,值為False表示降序。
如:
df=df.sort_values(by=['總分'],ascending=False)
表示按照「總分」從高到低排序。
df=df.sort_values(by=['總分','語文'],ascending=False)
表示按照「總分」從高到低排序,若「總分」相同,再按照「語文」成績從高到低排序。
21.3 欄位截取
函數slice()可以從某列中截取字元串。格式如下:
slice(start,stop)
其中,start表示開始位置;stop表示結束位置
例:
df['年級']=df['學號'].str.slice(0,2)
通過此語句可以截取學號欄位的第1、2個字元,並賦值給年級欄位。
21.4 記錄抽取
可以抽取滿足條件的記錄。
例:抽取總分>300的記錄。
df[df.總分>300]
抽取總分在300到310之間(包括300和310)的記錄。
df[df.總分.between(306,310)]
抽取學號中包含「0803」的記錄。這樣可以非常方便的抽取某個班的信息。
df[df.學號.str.contains(',na=False)]
此處的na=False,含義是如遇到NaN這樣的數據,直接做不匹配處理。
21.5修改記錄
1、整列替換
我們在前面已經給整列填充過數據,填充時原來的數據就被覆蓋了。
即如下語句:
df['總分']=df['語文']+df['數學']+df['英語']
2、個別修改
如將值『99』替換為值『100』,可用如下語句:
df.replace(ྟ',颼')
將指定列的值替,如將語文列和英語列的值『99』替換為值『100』,可用如下語句:
df.replace({'語文':99,'英語':99},100)
可用如下程序去驗證:
from pandas import read_excel
file='d:/student.xlsx'
df=read_excel(file,sheet_name=0,converters={'學號':str})
print(df[(df.語文==99) |(df.英語==99)])
df=df.replace({'語文':99,'英語':99},100)
print(df[(df.語文==99) |(df.英語==99)])
運行結果為:
序號 學號 姓名 年級 班級 語文 數學 英語 總分 名次
28 29 090802 丁能通 09 NaN 119 120 99 338 NaN
29 30 090203 沈丹妮 09 NaN 109 108 99 316 NaN
Empty DataFrame
Columns: [序號, 學號, 姓名, 年級, 班級, 語文, 數學, 英語, 總分, 名次]
Index: []
可以看出,第一個print()語句輸出的結果中滿足條件「語文或英語為99分」的有兩條記錄,替換語句執行以後,df中再沒有滿足條件「語文或英語為99分」的記錄了。
21.6記錄合並
函數concat()的格式如下:
concat([dataFrame1,dataFrame2,......],ignore_index=True)
其中,dataFrame1等表示要合並的DataFrame數據集合;ignore_index=True表示合並之後的重新建立索引。其返回值也是DataFrame類型。
concat()函數和append()函數的功能非常相似。
例:
import pandas #導入pandas模塊
from pandas import read_excel #導入read_execel
file='d:/student.xlsx' #變數file表示文件路徑,注意'/'的用法 數據見第18章表18-1
df=read_excel(file,sheet_name=0,converters={'學號':str})
# 將Excel文件導入到DataFrame變數中
df=df[:5] #截取df的前5個記錄
print(df) #輸出df
df1=df[:3] #截取df的前3個記錄存入df1中
df2=df[3:5] #截取df的最後2個記錄存入df2中
df3=pandas.concat([df2,df1]) #將df2與df1合並存入df3中
print(df3) #輸出df3
運行結果如下:
序號 學號 姓名 年級 班級 語文 數學 英語 總分 名次
0 1 070101 王博宇 NaN NaN 84 71 93 NaN NaN
1 2 070102 陳冠濤 NaN NaN 89 89 89 NaN NaN
2 3 070103 李文博 NaN NaN 89 72 76 NaN NaN
3 4 070204 姜海燕 NaN NaN 89 89 89 NaN NaN
4 5 070205 林若溪 NaN NaN 91 95 83 NaN NaN
序號 學號 姓名 年級 班級 語文 數學 英語 總分 名次
3 4 070204 姜海燕 NaN NaN 89 89 89 NaN NaN
4 5 070205 林若溪 NaN NaN 91 95 83 NaN NaN
0 1 070101 王博宇 NaN NaN 84 71 93 NaN NaN
1 2 070102 陳冠濤 NaN NaN 89 89 89 NaN NaN
2 3 070103 李文博 NaN NaN 89 72 76 NaN NaN
由於合並時是將df1合並到df2中,可以看出,索引仍然保持原來的狀態。
21.7統計次數
可以用如下方法統計出某個值在某行或者某個范圍出現的次數。
from pandas import read_excel
file='d:/student.xlsx'
df=read_excel(file,sheet_name=0,converters={'學號':str})
df=df[:5]
print(df)
print(df['語文'].value_counts())
輸出結果如下:
序號 學號 姓名 年級 班級 語文 數學 英語 總分 名次
0 1 070101 王博宇 NaN NaN 84 71 93 NaN NaN
1 2 070102 陳冠濤 NaN NaN 89 89 89 NaN NaN
2 3 070103 李文博 NaN NaN 89 72 76 NaN NaN
3 4 070204 姜海燕 NaN NaN 89 89 89 NaN NaN
4 5 070205 林若溪 NaN NaN 91 95 83 NaN NaN
89 3
84 1
91 1
Name: 語文, dtype: int64
可以看出,通過value_counts()函數可以統計出列中各值出現的次數。
value_counts()函數的參數還有 :
ascending,當ascending=True時升序排列,當ascending=False時升序排列(此時該參數可省缺);
normalize,當normalize=True時,顯示的不再是各值出現的次數,而是佔比。
將上例中的語句print(df['語文'].value_counts())改為:
print(df['語文'].value_counts(ascending=True,normalize=True))
則輸出結果變成了:
91 0.2
84 0.2
89 0.6
Name: 語文, dtype: float64
21.8按值查找
print(df['語文'].isin([84,91]))
它的作用是查找『語文』列中值和isin所指的列表中元素一致的記錄,如果找到結果為True,否則為False。
輸出結果:
0 True
1 False
2 False
3 False
4 True
Name: 語文, dtype: bool
21.9數據分區
根據某個分區標准,將數據按照所屬區域進行劃分,並用相應的標簽表示,可以用cut()方法來實現。
語法格式如下:
cut(series, bins, right=True, labels=NULL)
其中:
series表示需要分組的數據;
bins表示分組的依據,是一個列表,其元素為劃分分區的邊界值,如[0,72,96,120],就是劃分3個分區,即0~72、72~96、96~120,默認的是「左包右不包」;
right表示分組時右邊是否閉合;
labels表示分組的自定義標簽,也可以不重新定義。
下面對上述學生成績表中的語文成績進行分組,並增加一個新的列「語文等級」。
import pandas as pd
from pandas import read_excel #導入read_execel
file='d:/student.xlsx'
df=read_excel(file,sheet_name=0,converters={'學號':str})
df['年級']=df['學號'].str.slice(0,2)
df['班級']=df['學號'].str.slice(0,4)
df.總分=df.語文+df.數學+df.英語
bins=[0,72,96,max(df.語文)+1] #
lab=['不及格','及格','優秀']
grade=pd.cut(df.語文,bins,right=False,labels=lab)
df['語文等級']=grade
print(df.head())
print("語文成績分等級統計結果:")
print(df['語文等級'].value_counts())
運行結果如下:
序號 學號 姓名 年級 班級 語文 數學 英語 總分 語文等級
0 1 070101 王博宇 07 0701 84 71 93 248 及格
1 2 070102 陳冠濤 07 0701 89 89 89 267 及格
2 3 070103 李文博 07 0701 89 72 76 237 及格
3 4 070204 姜海燕 07 0702 89 89 89 267 及格
4 5 070205 林若溪 07 0702 91 95 83 269 及格
語文成績分等級統計結果:
及格 17
優秀 10
不及格 4
Name: 語文等級, dtype: int64
『玖』 python輸入五門成績,求總分和平均分
有5個學生,每個學生修4門課程,求每個學生所有成績的總分和平均分
#include <stdio.h>
#define First 5
#define Second 6
int main(void)
{
float a[First][Second],sum=0.0;
int i,j,cnt=1;
printf("分別輸入5名同學的4門成績:\n");
for(i=0;i<First;i++)
{
for(j=0;j<Second-2;j++)
{
scanf("%f",&a[i][j]);
}
}
for(i=0;i<First;i++)
{
for(j=0;j<Second-2;j++)
{
sum+=a[i][j];
}
a[i][4]=sum;
a[i][5]=a[i][4]/4.0;
sum=0; //初始化
}
for(i=0;i<First;cnt++,i++)
{
printf("學生%d的成績情況\t\t\t總成績\t平均成績\n",cnt);
for(j=0;j<Second;j++)
{
printf("%.2f\t",a[i][j]);
}
printf("\n");
}
}
『拾』 已知小明小紅小亮的語數英成績,如何使用Python字典將姓名、學科、成績分別對應,並且計算誰總分最高
test = {
"小明": {"math": 85, "english": 96, "chinese": 88},
"小紅": {"math": 72, "english": 80, "chinese": 91},
"小亮": {"math": 83, "english": 69, "chinese": 75},
}
score_max={"name":"","score":0}
for k,v in test.items():
####if sum(v.values())>score_max["score"]:
#########score_max["name"]=k
#########score_max["score"]=sum(v.values())
print(f"得分最高的是{score_max['name']},分數為:{score_max['score']}")