【问题标题】:How to simplify an account code?如何简化帐户代码?
【发布时间】:2017-11-17 15:56:36
【问题描述】:

我正在用python制作一个帐户代码,它可以工作,但它真的很长,我想知道是否有办法缩短它。这是我的代码:

user1 = "Jeff"
user2 = "Bob"

password1 = "Password"
password2 = "Lol"

username = input("Login: >> ")
password = input("Password: >> ")

if username == user1:
    if password == password1:
        print ("Access granted")
        print ("Welcome to the system!")
        home()

    else:
        print ("Access denied")
        print ("Try again!")
        print ("\n")
        time.sleep(2)
        login()

elif username == user2:
    if password == password2:
        print ("Access granted")
        print ("Welcome to the system!")
        home()
    else:
        print ("Access denied")
        print ("Try again!")
        print ("\n")
        time.sleep(2)
        login()

else:
    print ("Access denied")
    print ("Try again!")
    print ("\n")
    time.sleep(2)
    login()

我创建的帐户越多,获得的时间就越长。有没有办法缩短或简化这个?

【问题讨论】:

  • 你听说过定义函数吗?大多数情况下,当您重复一堆行时,最好将所有重复的代码分组到一个函数中并调用该函数。任何 python 指南都会教你如何做到这一点。
  • 就像 Dijkstra 说的:“两个或更多,使用for
  • 您需要学习使用其他数据结构的列表,或者开始将内容移动到函数中。不过,这对这里来说太宽泛了。如果您的代码有效且完整,您可以将其发布在 Code Review 上,并附上良好的描述以供 UT 审查。
  • 我推荐使用的设计是字典。每次有些人创建一个新帐户时,将他们的信息记录在用户字典中。然后,当有人尝试登录时,登录就像测试他们的凭据是否在您的用户字典中一样简单。
  • 感谢所有帮助我编写此代码的人!我真的很感激!

标签: python python-3.x simplify


【解决方案1】:

这是您的程序的一个版本,它使用字典来存储用户名及其相关密码。这样,您就可以在users 字典中添加更多用户和密码,而无需再添加任何代码。

import time

users = {
    "Jeff": "Password",
    "Bob": "Lol"}

def login():
    username = input("Login: >> ")
    password = input("Password: >> ")
    if username in users and password == users[username]:
        print("Access granted")
        print("Welcome to the system!")
        return True

    print("Access denied")
    print("Try again!")
    print()
    return False

while not login():
    pass

home()

【讨论】:

  • 你也可以先login_message = ('Access denied', 'Access granted') 然后is_successful = username in users and password == users[username]; print(login_message[is_successful]; return is_successful。循环也可以简化为while True: if login(): break
  • 感谢您的帮助!我真的很感激,这真的会帮助我改进我的代码。
【解决方案2】:

我将用户和密码检查分开:

users = {
    "Jeff": "Password",
    "Bob": "Lol"}

def login(user=None):

    # User
    if not user:
        user = input("Login: >> ").title()
        if not users.get(user):
            print ("No such user")
            return None

    # Password
    password = input("Password: >> ")
    if password == users[user]:
        print ("Access granted")
        print ("Welcome to the system!")
        return user
    else:
        print("Access denied")
        print("Try again!")
        return login(user=user)

while True:
    logged_in_user = login()
    if logged_in_user:
        print("Welcome {}".format(logged_in_user))
        break

【讨论】:

  • 这样的问题是攻击者可以确定哪些猜测的用户名是有效用户。
猜你喜欢
  • 1970-01-01
  • 2017-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多