学习Python,做课后作业的时候刚好碰到一道设计登录系统的练习题,额,题目如下:
尝试编写一个用户登录程序(尝试将功能封装成函数),程序实现如图:
额,程序从逻辑上来讲貌似不难,不过要求是用函数封装,然后,我可能对函数封装有什么误解,所以虽然功能实现了,但是这个程序就是不美观啊。代码如下:def log():
print('|--- 新建用户:N/n ---|')
print('|--- 登录账号:E/e ---|')
print('|--- 退出程序:Q/q ---|')
code = input('|--- 请输入指令代码:')
return code
login = {}
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()
答案的代码明显高大上,哎,自己的写的代码明显土鳖了。记录于此,勉之!!!