考虑到看这个代码的人群可能是一些入门的新手同学做一些练习,所以决定多加一些注释
之前的代码有bug,sry, 就是不管选择哪个都是:showmenu()—>newuser()—>olduser() 改了一点,逻辑顺了
#coding:utf-8
'''
@version:Python 2.7.14
这个程序管理用于登录系统的用户信息:登录名字和密码。登录用户帐号建立后,已存在用户
可以用登录名字和密码重返系统。新用户不能用别人的登录名建立用户帐号。
'''
# 这里创建的db字典就是为了充当简单的数据库
db = {}
# 新用户用于创建用户名及密码并保存到db
def newuser():
prompt = 'login desired: '
while True:
# 输入用户名
name = raw_input(prompt)
# 校验db中是否存在你输入的用户名
if db.has_key(name):
prompt = 'name taken, try another: '
continue
else:
break
# 输入密码
pwd = raw_input('passwd: ')
# 用户名及密码保存到db中
db[name] = pwd
# 老用户登录
def olduser():
name = raw_input('login: ')
pwd = raw_input('passwd: ')
# 取出你输入的用户名在db中的密码
passwd = db.get(name)
# 对你输入的密码和db中对应存在的密码进行对比
if passwd == pwd:
print 'welcome back', name
else:
print 'login incorrect, pls go login desired\n'
newuser()
def showmenu():
# 运行时出现,选择‘n’‘e’‘q’其中一个选择,不区分大小写
prompt =
"""
(N)ew User Login
(E)xisting User Login
(Q)uit
Example 7.1 Dictionary Example (userpw.py) (continued)
Enter choice:
"""
# ‘done’是个关键字,当为真,循环停止
done = False
while not done:
# ‘chosen’同‘done’
chosen = False
while not chosen:
# 加try语句,是为了避免其他错误的出现
try:
# 这里就简单了只判断了输入字母的第一个是否满足条件,造成了只要是以这三个字母开头就可以
choice = raw_input(prompt).strip()[0].upper()
except (EOFError, KeyboardInterrupt):
choice = 'Q'
print '\nYou picked: [%s]\n' % choice
if choice not in 'NEQ':
print 'invalid option, try again'
elif choice == 'N':
newuser()
olduser()
chosen = True
# 这里会因为,程序刚开始db无内容,而进入else
elif choice == 'E':
olduser()
elif choice == 'Q':
print 'bye'
chosen = True
if chosen:
done = True
if __name__ == '__main__':
showmenu()
代码来源——《Python核心编程》
转载于:https://blog.51cto.com/13366251/2068489