寒假第一周周总结

关于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++来写代码

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值