2

我的代码没有问题,但我对 python 和一般编程非常陌生,所以我想要一些关于我可以做得更好的输入。我决定做一个非常简单的登录/注册系统,我希望你有一些意见,这样我就可以提高自己。我不经常在这里发帖,不知道这是否是通常被问到的问题,但我希望你能帮助我。提前致谢。

这是代码:

username = ['mel1', 'mel2', 'mel3']
password = ['tyr1', 'tyr2', 'tyr3']

def log_sys():
    logged_in = False        
    log_user = raw_input('Please type in your username: ')
    log_pass = raw_input('Please type in your password: ')

    if log_user in username:
        index = username.index(log_user)
        if log_pass == password[index]:
            logged_in = True

    if logged_in:
        print 'You are logged in'
    else: 
       print 'Wrong username or password'
       log_sys()

def reg_sys(user):
    regpass1 = raw_input('Please choose a password: ')
    regpass2 = raw_input('Please retype password: ')

    if regpass1 == regpass2:
        username.append(user)
        password.append(regpass1)
        log_sys()
    else:
        print 'Passwords did not match'
        reg_sys(user)

def reglog_system():
    reglog = raw_input('Do you want to register or login?: ')

    if reglog == 'register':
        regname = raw_input('Please choose a username: ')
        reg_sys(regname)
    elif reglog == 'login':
        log_sys()
    else:
        reglog_system()

reglog_system()
4

3 回答 3

1

这不是一个完整的答案;我不是蟒蛇专家。

我强烈建议使用关联数组或字典/哈希而不是列表/数组来存储用户名和密码。至少,大型用户列表的性能会更好。

当用户注册到该进程的函数时,我会移动用户名提示;将用户名传递给 reg_sys() 但在 log_sys() 中提示,这似乎很奇怪。

您的密码测试似乎有缺陷;您只检查第一个是否与第二个匹配,而不检查其中一个或两个是否为 None、空列表、空字符串或其他一些特殊值。

我希望这会有所帮助。

于 2014-04-19T02:11:54.673 回答
0

毕竟受到了一些批评!

1)为了明确你的主要功能是什么,你应该改变:

reglog_system()

main()

2)调用你的脚本:

if __name__ == "main":
    main()

使其更便携。然后您可以直接调用它或将其作为模块导入

3)使用一些返回函数:

return raw_input("foo")

并在 main() 中处理返回。它使您的代码更容易阅读,并可能有助于决定何时/何地处理函数的结果。

性能方面,我不能真正批评其他任何东西,至少没有想到任何东西。对于未来的规划,也许实施散列?如今,SHA256 似乎非常强大。

于 2014-04-19T02:28:40.720 回答
0

我发现如果你使用example = input()你可以example直接使用

例子:

name = input("Username: ")
if name == 'Username':
    passwd = input("Password: ")
    if passwd == 'Password':
        print("Login Sucsessful!")
    else:
        print("Incorrect Username or password.")
于 2016-05-28T05:23:22.843 回答