考虑到看这个代码的人群可能是一些入门的新手同学做一些练习,所以决定多加一些注释


    之前的代码有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核心编程》