内置函数练习题和总结
需实现功能:
1. 打印个人信息
2. 修改个人信息
3. 修改密码
思路:
1.每个功能各定义一个内置函数
2.每个人的信息在文件都是在一起,规律是一行一条个人信息,用,分割开。
那么用readlines()方法遍历文件,然后变成列表,用。split(‘,’)分割开成各个元素
3. 以账号和密码是否正确作为while循环条件,修改密码后可实现重新输入账号登陆
4.输入3次错误和按Q退出在else,elif可实现,与其他变量没关系,这个完成前面功能最后实现
实现过程和踩过的坑:
1.先把文件按照个人信息分开,用,分割变成列表。
把个人信息的列表用一个大的列表集合,但user其实是在嵌套的列表里,所以无法根据user索引。故换成字典,用user作为key值索引
for i in iterable ,iterable只要是可迭代对象即可
列表添加对象用append,字典用key-value对
2.打印选择信息列表
3.写打印个人信息函数,因为后面要做修改密码功能,所以这里密码行不显示
person_model = ['user','password','name','age','job','deparment','phone']
使用一个列表模板,在用enumerate遍历个人信息列表时用索引person_model[i]实现遍历列表信息时加入新的信息展示
作一个if判断不展示特定的i的信息
4.写修改个人信息的函数
输入新的信息,根据索引替换掉,还需把信息更新到文件,故需写一个把字典D写入文件的函数
遍历D,然后按照key索引遍历所有个人信息列表
把列表还原成带,的字符串‘,’.join(D[key])
.seek(0)
.trancate()
.flush()#由于前面先读再写,所以指针在最后,需回到开头
最后加\n
5.修改密码
修改密码相当于修改其中password一项即可,然后保存信息到文件
对于输入的选择要判断字符和数字可能,还有超出索引的可能
.isdigit()
input()后每次加.strip()避免空格的输入错误
第二次对比答案后依然存在的疑问:
年龄不能有特殊符号,而isdigit()只能判断是否数字,特殊符号如{}它检测不到
D={}
attemp_time = 1
f = open('D:func1.txt', 'r+')
li = f.readlines()
for i in li:
i = i.split(',')
D[i[0]] = i
print(D) # 建立一个字典DIC,以user作为索引,映射 个人信息的列表
while attemp_time < 4:
user = input('user:>>>').strip()
password = input('password:>>>').strip()
while user in D and password == D[user][1]: # 密码正确,则自动执行下面
print('welcome {}'.center(50,'-').format(user))
print(menu) # 询问选择是什么?
choice = input('what choice:>>>').strip()
if choice.isdigit():
choice = int(choice)
if choice == 1: # 打印个人信息
display_list(user)
elif choice == 2: # 修改个人信息
display_list(user)
info_num = input('what info you want to change?').strip()
if info_num.isdigit():
info_num = int(info_num)
if info_num == 1: #不允许修改密码
print('input wrong, again1')
elif info_num >= 0 and info_num < len(D[user]):
change_info(info_num) # 新信息替换旧信息
save_to_file() # 把修改信息写回文件
elif info_num < 0 or info_num >= len(D[user]): # 超出数字范围
print('input wrong, again')
elif info_num == 'Q': # 退出程序
print('thank you for using,exit')
break
else: # 输入的是字母,提示输入错误
print('input wrong, again')
elif choice == 3: # 修改密码
change_info(1)
print('password changed,please enter again')
save_to_file() # 把修改信息写回文件
else:
print('please enter int')
else:
print('user or password wrong, {} time, 3 time out'.format(attemp_time)) # 3次尝试,不行后退出
attemp_time += 1
f.close() # 关闭文件