• 需求
  • 问题一
  • 问题二
  • 问题三
  • 问题四


需求

1、写一个程序,任意输入n个学生的信息,形成字典后存于列表中。学生的信息包括:姓名(字符串),年龄(整数),成绩(整数);循环输入学生信息,直到输入学生姓名为空时结束输入,最后形成字典列表:L=[{‘name’:‘xiaozhang’,‘age’:‘20’,‘score’:‘50’},{‘name’:‘xiaoli’,‘age’:‘21’,‘score’:‘18’},{‘name’:‘xiaowang’,‘age’:‘19’,‘score’:‘56’},…]
2、将得到的学生信息格式化输出:

+----------+-----+-------+
|   Name   | Age | Score |
+----------+-----+-------+
|   lisi   |  23 |  435  |
| zhangsan |  39 |   54  |
+----------+-----+-------+

3、可以修改和删除学生成绩
4、实现打印菜单,并根据提示选择对应的操作

问题一

问题分析

  • 循环输入学生信息
  • 输入的信息形成字典
  • 形成的字典存到列表中
  • 字典中需要有姓名、年龄、成绩
  • 学生姓名为空时结束输入
#创建数组
student=[]
#定义循环控制值
s=True
while s:
	#创建循环清空的字典
    dict = {}
    a = input("请输入学生姓名:")
    #判断名称是否为空,为空则中断循环
    if a=='':
        break
    dict['name']=a
    b = input("请输入学生年龄:")
    dict['age']=b
    c = input('请输入学生成绩:')
    dict['score']=c
    #将字典添加至列表中
    student.append(dict)
print(student)

问题二

问题分析

  • 表格输出(使用第三方库prettytable)
  • 将方案一的列表中的字典按行添加数据
import prettytable as pt

#定义表
tb = pt.PrettyTable()
#定义表格头
tb.field_names = ['Name', 'Age', 'Score']
#循环将列表中的值分配给循环清空的sum空列表,最后将数据添加到表格中
for i in range(len(student)):
    sum=[]
    sum.append(student[i]['name'])
    sum.append(student[i]['age'])
    sum.append(student[i]['score'])
    # 按行添加数据
    tb.add_row(sum)
print(tb)

说是 GitHub有详细示例说明,但我没找到

问题三

问就是直接修改和删除

#修改成绩
def alter():
    if len(student) == 0:
        print('请先添加学生信息\n=================')
    else:
        b = input('请问要修改哪一个学生的成绩:')
        for i in range(len(student)):

                if student[i]['name'] == b:
                    student[i]['score']= input('请输入要修改的值:')
                    print('修改成功')
            
#删除成绩
def delete():
    if len(student) == 0:
        print('请先添加学生信息\n=================')
    else:
        det=input('请问要删除哪一个学生的成绩:')
        for i in range(len(student)):
            #if b == a[i]['name']:
                if student[i]['name'] == det:
                    student[i]['score']=''
                    print('删除成功')

问题四

偷个懒
有两个方法,提示使用eval

第一个.py文件
import Demo01

print('欢迎使用学生信息系统')
print('当前为首页')

check = input('按下任意键显示菜单')
while True:
        abc=input('1、添加学生信息\n2、格式化显示\n3、修改学生成绩\n4、删除学生成绩\n5、退出系统\n请输入选项:')
        if abc == '1':
            Demo01.everybody()
        elif abc == '2':
            Demo01.formtable()
        elif abc == '3':
            Demo01.alter()
        elif abc == '4':
            Demo01.delete()
        elif abc == '5':
            print('退出成功')
            input('按下任意键关闭该窗口')
            break
        else:
            print('请输入正确的选项')
        import prettytable as pt
---------------------------------------------------------------------
第二个.py文件
# 创建数组
student = []
#1、存储形成字典并存于列表
def everybody():
    while True:
    #   创建循环清空的字典
        dict = {}
        a = input("请输入要储存的学生姓名:")
    #   判断名称是否为空,为空则中断循环
        if a=='':
            break
        dict['name']=a
        b = input("请输入学生年龄:")
        dict['age']=b
        c = input('请输入学生成绩:')
        dict['score']=c
    #   将字典添加至列表中
        student.append(dict)
    print(student)


# 2、输出为表格形式
def formtable():
    if len(student) == 0:
        print('请先添加学生信息\n=================')
    else:
        # 创建表
        tb = pt.PrettyTable()
        # 定义表格头
        tb.field_names = ['Name', 'Age', 'Score']
        for i in range(len(student)):
            sum=[]
            sum.append(student[i]['name'])
            sum.append(student[i]['age'])
            sum.append(student[i]['score'])
            # 按行添加数据
            tb.add_row(sum)
        print(tb)


#3、修改成绩
def alter():
    if len(student) == 0:
        print('请先添加学生信息\n=================')
    else:
        b = input('请问要修改哪一个学生的成绩:')
        for i in range(len(student)):

                if student[i]['name'] == b:
                    student[i]['score']= input('请输入要修改的值:')
                    print('修改成功')

#4、删除成绩
def delete():
    if len(student) == 0:
        print('请先添加学生信息\n=================')
    else:
        det=input('请问要删除哪一个学生的成绩:')
        for i in range(len(student)):
            #if b == a[i]['name']:
                if student[i]['name'] == det:
                    student[i]['score']=''
                    print('删除成功')