Python 登录系统练习题的设计与改进 – 感觉对函数调用可能有误解

Python学习笔记7字数 1857阅读模式

学习Python,做课后作业的时候刚好碰到一道设计登录系统的练习题,额,题目如下:

尝试编写一个用户登录程序(尝试将功能封装成函数),程序实现如图:

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()

答案的代码明显高大上,哎,自己的写的代码明显土鳖了。记录于此,勉之!!!

weinxin
我的微信
微信公众号
关注大鸟博客公众号
 最后更新:2019-7-6
大鸟
评论  7  访客  5  作者  2
    • 心灵博客
      心灵博客 5

      你写的代码也是高大上!我都不怎么会。早先学过点python,忘光了。

        • 大鸟
          大鸟

          @ 心灵博客 空了还可以在把书本捡起来学学!

        • WRZ
          WRZ 0

          谢谢教程,是准备自学python!

            • 心灵博客
              心灵博客 5

              @ WRZ 学go吧

              • 大鸟
                大鸟

                @ WRZ 自学就是找虐的过程啊。但是方法很重要!

              • 奶爸de笔记
                奶爸de笔记 7

                厉害呀,你又学这个去了。

                • 云点SEO
                  云点SEO 6

                  python以前略懂皮毛,现在毛都忘了 :cry:

                匿名

                发表评论

                匿名网友

                :?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

                确定