关于python学习的总结:
在周末的时候,用学的一些知识再加上跟着视频一起做了一个学生成绩管理系统。该系统功能有:录入学生信息(名字,数学成绩,英语成绩,语文成绩),删除学生信息,查找学生信息,修改学生信息,计算学生成绩,输出总成绩。
代码如下:
firename='stu.txt'
import os
def main():
while True:
menum()
choice=int(input('请输入你的选择'))
if choice in [1,2,3,4,5,6,7]:
if choice==1:
addmess()
if choice==2:
delete()
if choice==3:
change()
if choice==4:
search()
if choice==5:
total()
if choice==6:
show()
if choice==7:
print("谢谢你的使用")
break
def menum():
print("==========学生信息管理系统==============")
print("----------1.添加学生信息---------------")
print("----------2.删除学生信息---------------")
print("----------3.修改学生信息---------------")
print("----------4.查找学生信息---------------")
print("----------5.计算学生人数----------------")
print("----------6.所有信息输出---------------")
print("----------------结束------------------")
print("=====================================")
def addmess():
student_list=[]
while True:
name=input('请输入学生名字')
if not name:
break
try:
Math=int(input('请输入数学成绩'))
Chinese=int(input('请输入语文成绩'))
English=int(input('请输入英语成绩'))
except:
print('输入无效不是整数,请重新输入')
continue
student={'name':name,'Math':Math,'Chinese':Chinese,'English':English}
student_list.append(student)
answer=input('是否继续添加信息Y or N')
if answer=='Y':
continue
else:
break
#保存到文件中,用save()函数
save(student_list)
print('录入完毕')
def save(lst):
try:
stu_txt=open(firename,'a',encoding='utf-8')
except:
stu_txt=open(firename,'w',encoding='utf-8')
for item in lst:
stu_txt.write(str(item)+'\n')
stu_txt.close()
def delete():
while True:
name=input('请输入你要删除的学生信息')
if name!='':
if os.path.exists(firename):
with open(firename,'r',encoding='UTF-8')as file:
student_old=file.readlines()
else:
student_old=[]
flag=False#标记是否删除
if student_old:
with open(firename,'w',encoding='UTF-8')as wfile:
d={}
for item in student_old:
d=dict(eval(item))
if d['name']!=name:
wfile.write(str(d)+'\n')
else:
flag=True
if flag:
print('学生为'+name+'的信息已经被删除')
else:
print('没有找到该学生的信息')
else:
print('无学生信息')
break
#删除后显示所有学生信息
answer=input('是否继续删除Y or N')
if answer=='Y':
continue
else:
break
def change():
if os.path.exists(firename):
with open(firename,'r',encoding='utf-8')as rfile:
student_old=rfile.readlines()
else:
return
name=input('请输入要修改哪个学员的信息')
with open(firename,'w',encoding='utf-8') as wfile:
for item in student_old:
d=dict(eval(item))
if d['name']==name:
print('找到该学生的相关信息')
while True:
try:
d['Math']=input('请输入数学成绩')
d['Chinese']=input('请输入语文成绩')
d['English']=input('请输入英语成绩')
except:
print('输入有错误,请重新输入')
continue
else:
break
wfile.write(str(d)+'\n')
print('修改成功')
else:
wfile.write(str(d)+'\n')
answer=input("是否继续修改 Y or N")
if answer=='Y':
change()
def search():
student_m=[]
while True:
name=''
if os.path.exists(firename):
seaname=input('请输入查找学生姓名')
with open(firename,'r',encoding='utf-8') as rfile:
student=rfile.readlines()
for item in student:
d=dict(eval(item))
if seaname!='':
if seaname==d['name']:
student_m.append(d)
#进行显示查找
show_student(student_m)
#清空
student_m.clear()
answer=input('是否继续查找')
if answer=='Y':
continue
else:
break
else:
print('暂未保存学生信息')
return
def show_student(list):#格式化字符串
if len(list)==0:
print('无数据显示')
return
else:
format_title='{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}'
print(format_title.format('姓名','数学','语文','英语','总成绩'))
#定义内容的显示
format_data='{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}'
for item in list:
print(format_data.format(item.get('name'),
item.get('Math'),
item.get('Chinese'),
item.get('English'),
int(item.get('Math'))+int(item.get('Chinese'))+int(item.get('English'))))
def total():
if os.path.exists(firename):
with open(firename, 'r', encoding='utf-8') as rfile:
students=rfile.readlines()
if students:
print(f'一共有{len(students)}名学生')
else:
print('还未录入数据')
else:
print('文件暂未保存')
def show():
student_list=[]
if os.path.exists(firename):
with open(firename, 'r', encoding='utf-8') as rfile:
students=rfile.readlines()
for item in students:
student_list.append(eval(item))
if student_list:
show_student(student_list)
else:
print("暂未有保存过数据")
main()
其中用到的最多的知识点是文件的读写,每个功能里面都有用到该操作。
录入学生信息的时候就通过将数据存入字典中保存,再用字典转换成列表的方式写入文件中。
删除学生信息的时候先将所有的信息通过列表的方式读取出来,再判断信息是否和删除信息吻合,如果不吻合的话,将其重新存入文件中,反之。来达到删除的目的。
修改学生信息的时候和删除信息的操作相同,如果判断修改信息吻合的话将其修改重新存入文档,其他信息不吻合也重新写入文档。
查找信息也是和删除信息操作相同,将相对应查找的信息输出出来。中间运用到了格式化字符串的知识。同时计算出学生的总成绩
计算总人数的时候是将所有信息读取出来,然后计算有多少列来输出总人数的数量。
所有信息的输出先读出所有信息,再调用之前定义的函数输出。
这次做的很简易并且是通过看视频老师的带领下做的,发现思路和知识缺陷挺大的,下次有机会希望能独立完善做一次这样的系统。
算法的学习:
一周我就只学了有关于背包算法(01背包算法),而且花了挺长一段时间的理解才理解了其中最简单的一个题目。
acwing网站01背包问题:
有?NN?件物品和一个容量是?VV?的背包。每件物品只能使用一次。
第?ii?件物品的体积是?vivi,价值是?wiwi。
求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。 输出最大价值。
输入格式
第一行两个整数,N,VN,V,用空格隔开,分别表示物品数量和背包容积。
接下来有?NN?行,每行两个整数?vi,wivi,wi,用空格隔开,分别表示第?ii?件物品的体积和价值。
输出格式
输出一个整数,表示最大价值。
数据范围
0<N,V≤10000<N,V≤1000 0<vi,wi≤10000<vi,wi≤1000
输入样例
4 5
1 2
2 4
3 4
4 5
输出样例:
8
我的代码:
#include<stdio.h>
int max(int a,int b)
{
if(a>b)
return a;
else if(a<b)
return b;
else
return a;
}
int main()
{
int n,m;
int value[100];
int weight[100];
int a[100][100];
int i=0,j=0;
scanf("%d %d",&n,&m);
for(i=1;i<=n;i++)
{
scanf("%d %d",&weight[i],&value[i]);
}
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(weight[i-1]>j)
{
a[i][j]=a[i-1][j];
}
else
{
a[i][j]=max(a[i-1][j-weight[i-1]]+value[i-1],a[i-1][j]);
}
}
}
printf("%d",a[n][m]);
return 0;
}
通过用二维数组的方法列表格来找到最大值,输出数组最后一个数即为最大值。
还有好多进阶版的背包问题我还是得多磨练,以及下次要学着用c++来写代码
|