学习Python,做课后作业的时候刚好碰到一道设计登录系统的练习题,额,题目如下:
尝试编写一个用户登录程序(尝试将功能封装成函数),程序实现如图:
额,程序从逻辑上来讲貌似不难,不过要求是用函数封装,然后,我可能对函数封装有什么误解,所以虽然功能实现了,但是这个程序就是不美观啊。代码如下:
def log(): print('|--- 新建用户:N/n ---|') print('|--- 登录账号:E/e ---|') print('|--- 退出程序:Q/q ---|') code = input('|--- 请输入指令代码:') return codelogin = {}code = log()if code == 'N' or code == 'n': name = input('请输入用户名:') password = input('请输入密码:') login[name] = password if name in login: print('注册成功,赶紧登陆试试吧!') print('\n')code = log()if code == 'N' or code == 'n': name = input('请输入用户名:') if name in login: print('%s此用户名已经被使用,请重新输入:' % name ,end='') name = input() password = input('请输入密码:') login.setdefault(name) login[name] = password if name in login:print('注册成功,赶紧登陆试试吧^_^')print('\n') else:print('用户名不存在,请新建用户')print('\n')code = log()if code == 'E' or code == 'e': name = input('请输入用户名:') if name not in login: print('您输入的用户名不存在,请重新输入:',end = '') name = input() if name in login: print('请输入密码:',end = '') password = input() for each in login.values(): if password == each:break print('欢迎进入XXOO系统,请点击右上角的X结束程序!') print('\n')code = log()while 1: if code == 'Q' or code == 'q': print('退出程序') break
就这么轻松写完代码,测试功能发现完全和题目要求的是一毛一样,然后我沾沾自喜的以为完成了设计,但是对比了答案之后,一阵羞愧。
user_data = {}def new_user(): prompt = '请输入用户名:' while True: name = input(prompt) if name in user_data:prompt = '此用户名已经被使用,请重新输入:'continue else:break passwd = input('请输入密码:') user_data[name] = passwd print('注册成功,赶紧试试登录吧^_^')def old_user(): prompt = '请输入用户名:' while True: name = input(prompt) if name not in user_data:prompt = '您输入的用户名不存在,请重新输入:'continue else:break passwd = input('请输入密码:') pwd = user_data.get(name) if passwd == pwd: print('欢迎进入XXOO系统,请点右上角的X结束程序!') else: print('密码错误!')def showmenu(): prompt = '''|--- 新建用户:N/n ---||--- 登录账号:E/e ---||--- 推出程序:Q/q ---||--- 请输入指令代码:''' while True: chosen = False while not chosen:choice = input(prompt)if choice not in 'NnEeQq': print('您输入的指令代码错误,请重新输入:')else: chosen = True if choice == 'q' or choice == 'Q':break if choice == 'n' or choice == 'N':new_user() if choice == 'e' or choice == 'E':old_user()showmenu()
答案的代码明显高大上,哎,自己的写的代码明显土鳖了。记录于此,勉之!!!
评论前必须登录!
注册