y863886220 发表于 2020-10-9 11:36:05

代码求解释!

def panel():
    print(f'''{'=' * 20}
欢迎使用 学生管理系统 v3.0
    1.添加学生信息
    2.修改学生信息
    3.删除学生信息
    4.查看学生信息
    5.查看所有学生
    0.退出管理系统
{"=" * 20}''')

#指令逻辑
def code():
    panel()
    #所有学生信息存放(增、删、改都会改变的数据)
    students_list = [{"name":'刘翠花', 'gender':'男', 'age':'18', 'score':'100'},{"name":'王梦洋','gender':'男','age':'18','score':'10'},]
    #单个学生信息(用于添加修改)
    while True:
      student_dict = {}
      command = input("请输入指令:")
      #判断指令为空
      if len(command) == 0 or command.isspace():
            print("指令不能为空或空格,",end='')
      #退出程序功能
      elif command == '0':
            print('程序结束!!!')
            break
      #添加学生功能
      elif command == '1':
            add_student(students_list, student_dict)
      #修改学生功能
      elif command == '2':
            modify_student(students_list, student_dict)
      #删除学生功能
      elif command == '3':
            del_student(students_list, student_dict)
      #查询学生功能
      elif command == '4':
            query_student(students_list, student_dict)
      #查询所有学生信息功能
      elif command == '5':
            data_student(students_list, student_dict)
      #错误指令逻辑
      else:
            print("指令错误,",end='')

def add_student(students_list, student_dict):
    student_name = []
    for i in students_list:
      student_name.append(i['name'])
    name = input("请输入学生姓名:")
    if name in student_name:
      print('您要添加的学生信息已存在!')
    else:
      gender, age, score = input("请输入学生性别:"), input("请输入学生年龄:"), input("请输入学生成绩:")
      student_dict["name"], student_dict["gender"], student_dict["age"],student_dict['score'] = name, gender, age, score
      students_list.append(student_dict)
      print('学生添加完成,', end='')

#修改逻辑
def modify_student(students_list, student_dict):
    student_name = []
    for i in students_list:
      student_name.append(i['name'])
    name = input("请输入学生姓名:")
    if name in student_name:
      gender, age, score = input("请输入学生性别:"), input("请输入学生年龄:"), input("请输入学生成绩:")
      i["name"], i["gender"], i["age"], i['score'] = name, gender, age, score
      print('学生修改完成,', end='')
    else:
      print('您要修改的学生信息不存在!', end='')

#删除逻辑
def del_student(students_list, student_dict):
    del_student_dict = input("请输入要删除的学生姓名:")
    for i in students_list:
      if i["name"] == del_student_dict:
            students_list.remove(i)
            print(f'学生:{i["name"]} 信息已删除!')
            break
    else:
      print('您要删除的信息不存在')

#查询学生信息逻辑
def query_student(students_list, student_dict):
    student_name_input = input('请输入您要查询的学生姓名:')
    for i in students_list:
      if student_name_input == i["name"]:
            print(f'学生姓名:{i["name"]}', f'性别:{i["gender"]}', f'年龄:{i["age"]}', f'成绩:{i["score"]}', sep='    ')

    else:
      print("你要查询的学生信息不存在!!!")

#查询所有学生信息逻辑
def data_student(students_list, student_dict):
    if len(students_list) == 0:
      print('没有学生信息!!!', end='')
    else:
      for i in students_list:
            print(f'学生姓名:{i["name"]}',f'性别:{i["gender"]}',f'年龄:{i["age"]}',f'成绩:{i["score"]}',sep='    ')

code()
我修改逻辑的 i["name"], i["gender"], i["age"], i['score'] = name, gender, age, score 这段代码为什么不报错,还出效果了,请大神解释一下,谢谢。

kylin121380 发表于 2020-10-9 11:36:06

你应该先确定这个人的信息存不存在,然后再录入信息,而不是从所有数据中一个一个的进行对比,然后重复输入

kylin121380 发表于 2020-10-9 12:54:36

本帖最后由 kylin121380 于 2020-10-9 12:55 编辑

i经过for循环内后已经被赋值为students_list中的最后一个,你的修改就是在修改这个,只要名字存在,修改都只是最后一个人的信息

y863886220 发表于 2020-10-9 15:23:34

kylin121380 发表于 2020-10-9 12:54
i经过for循环内后已经被赋值为students_list中的最后一个,你的修改就是在修改这个,只要名字存在,修改都 ...

def add_student(students_list, student_dict):
    student_name = {}
    name = input("请输入学生姓名:")
    for i in students_list:
      if name != i['name']:
            student_dict["name"], student_dict["gender"], student_dict["age"],student_dict['score'] = name, input("请输入学生性别:"), input("请输入学生年龄:"), input("请输入学生成绩:")
            students_list.append(student_dict)
            print('学生添加完成,', end='')
            break
      else:
            print('您要添加的学生信息已存在!',end='')
            break

添加逻辑这么写为什么不行呢?

小莫非 发表于 2020-10-9 22:00:30

发现你的列表里面有两个字典
for 循环每一次循环取出的是一个字典,i 相对应的就是每一个字典,这么说能理解了吗?{:10_256:}{:10_256:}

y863886220 发表于 2020-10-10 17:09:04

kylin121380 发表于 2020-10-9 11:36
你应该先确定这个人的信息存不存在,然后再录入信息,而不是从所有数据中一个一个的进行对比,然后重复输入

有没有什么简便的方法去写,这么写感觉像绕了一个圈再去解决问题

kylin121380 发表于 2020-10-10 23:04:28

y863886220 发表于 2020-10-10 17:09
有没有什么简便的方法去写,这么写感觉像绕了一个圈再去解决问题


像你修改信息那样弄一下吧{:10_277:}
页: [1]
查看完整版本: 代码求解释!