python学习
学生管理系统问题
l = {}
s = {}
end = True
print("欢迎使用学生信息管理系统!\n"
"退出请按0\n"
"加入学生信息请按1\n"
"查询学生信息请按2\n"
"删除学生信息请按3\n"
"展示所有学生信息请按4")
while True:
choice = input("下面请选择你的操作:")
if choice == '1':
n = str(input("\t请输入学生姓名:"))
h = eval(input("\t请输入学生学号:"))
y = eval(input("\t请输入学生年龄:"))
for i in l.keys():
if h == i:
answer = input("该学生信息已经存在,请删除后重新填入。")
break
else:
s['姓名'] = n
s['年龄'] = y
s['学号'] = h
print(f'\t{n}的信息已导入。')
l[h] = s
s = {}
elif choice == '2':
a = eval(input("\t请输入你要查询的学生学号:"))
if l == {}:
print("\t系统中没有任何学生信息。")
for t in l.keys():
if a == t:
print(l[a])
break
else:
print("\t没有该学生的信息")
elif choice == '3':
a = eval(input("\t请输入你要删除的学生学号:"))
t = l.copy()
for i in t.keys():
if a == i:
del l[a]
print(f"\t该生信息已被删除")
break
else:
print("\t此学号不存在.")
elif choice == '4':
x = []
for i in l.keys():
x.append(i)
x.sort()
for j in x:
print(l[j])
elif choice == '0':
print("欢迎使用,下次再见。")
break
else:
print("请输入正确的指令!")
具体代码如上
其中我遇到的问题有:如何对学生信息按照学号排列。
我想到运用字典的嵌套方法:将学号作为键,通过提取大字典l中的键
放进列表中运用sort()函数进行排序,再遍历列表,打印出学生信息。
但是,解决问题是遇到列表中无法对学号进行排序的问题。
最后我发现是在用户输入学号时,输入的学号是字符型,而不是整型,
从而无法实现,列表的排序。
还有一个问题:在查询学生信息时,即使存在学生信息也会输出“该生信息不存在。
s = {}
elif choice == '2':
a = eval(input("\t请输入你要查询的学生学号:"))
if l == {}:
print("\t系统中没有任何学生信息。")
for t in l.keys():
if a == t:
print(l[a])
else:
print("该生信息不存在")
这串代码忽略了break,使得即使存在学生信息也会输出不存在。
总结
通过上面的问题,以后应该注意,用户输入的值的类型,以及循环的退出。
改进1
一个学生系统应当要能够储存学生的信息,而不是只能在一次运行中存储学生数据。
所以想要实现该操作应当要对代码进行改进。
这就需要再创建一个文件来存储学生信息。
通过学习,我了解到了以下方法
想法1:
利用json模块,利用json格式对学生信息字典进行存储,其实刚开始我的想法是通过文件读写方式进行存储与读写。但是存储与读写都为字符型,所以采用json模块。
但是json模块在读入学生信息的字典是会自动将字典的key转换为字符型,使我上面通过利用学号进行的操作无法实现。
所以还是采用文件的读写方式
想法2:
通过open()函数打开存储文件,分别通过文件的读写形式实现对学生信息的存储和读取。只需要注意对文件内容的去字符型就可以。
with open('student_information.py') as si:
l = eval(si.read())
.......
with open('student_information.py','w') as si:
si.write(f'{l}')
具体添加的代码如上.
还需要在读取的文件中加入一个空的字典,对l进行赋值操作。
改进2
输出学生信息包含在字典中不太美观。
所以应当使用字典的遍历输出学生信息。
但是python与c语言不同,每次输出学生的一个信息就自动换行,这不也不太好,所以需要掌握,python换行的操作
print("asda",end=' ')
其中end中的输入便是识别换行的符号,这样只有读到这个符号python才会自动换行。
改进3
用户输入常常会犯错,如果一直用if语句来判断用户是否输入错误,不太方便,但如果输入出错,程序又会报错,
所以我们采用try-except来避免程序报错具体如下。
try:
h = eval(input("\t请输入学生学号:"))
n = str(input("\t请输入学生姓名:"))
y = eval(input("\t请输入学生年龄:"))
for i in l.keys():
if h == i:
answer = input("该学生信息已经存在,请删除后重新填入。")
break
else:
s['姓名'] = n
s['年龄'] = y
s['学号'] = h
print(f'\t{n}的信息已导入。')
l[h] = s
s = {}
except:
print("请正确输入!")
标签:python,笔记,学生,学习,信息,eval,print,input,输入
From: https://www.cnblogs.com/102204216zxf/p/16821130.html