‘壹’ 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']}")