Регистрация и удаление учетной записи - PullRequest
0 голосов
/ 20 декабря 2010

Я ненавижу приходить с другой проблемой в тот же день, не говоря уже о двух, но теперь мне нужен способ для регистрации и удаления учетных записей.Вот весь сценарий:

accounts={'Robrajow':'password', 'Hacker':'hack', 'Noob':'lololol1'}
option1=0
option2=0
loop=1
while loop==1:
    print "Welcome to Telemology! You can login, register, delete an account, or exit."
    loginchoice = raw_input("What would you like to do? ")
    if loginchoice=='login':
        choice = raw_input("What is your username? ")
        choice2 = raw_input("What is your password? ")
        if (choice in accounts):
            option1=1
        else:
            option1=0
        if (choice2 == accounts[choice]):
            option2=1
        else
            option2=0
        if option1==1 and option2==1:
            print "Welcome to Telemology,", choice
        else:
            print "The username or password you entered is incorrect. Please try again or register."
    elif loginchoice=='register':
        newuser=raw_input("What is your new username? ")
        if (newuser in accounts):
            newuser=raw_input("That account name is already taken. Please enter another: ")
        newpass=raw_input("What is your new password? ")
        print newuser,", welcome to Telemology!" 
        print newpass, "is your new password!"
        print "Write it down and hide it!"
    elif loginchoice=='delete':
        unsure=raw_input("Do you really want to delete your account? It will never return! ")
        if unsure=='yes':
            choice = raw_input("What is your username? ")
            choice2 = raw_input("What is your password? ")
            if choice in accounts:
                option1=1
            else:
                option1=0
            if choice2 in password:
                option2=1
            else:
                option2=0
            if option1==1 and option2==1:
                print "Goodbye forever,", choice
            else:
                print "The username or password you entered is incorrect."
        elif unsure=='no':
            print "I hoped so."
        else:
            print "Invalid input."
    elif loginchoice==exit:
        print "Goodbye!"
        loop=0
    else:
        print "What? You can only input login, delete, register, or exit."

Пожалуйста, игнорируйте многочисленные ошибки и сложные строки кода, которые можно заменить одним.Мне нужен только способ регистрации и удаления учетных записей (он же словарь записей).

Если вы решите переписать ПОЛНЫЙ сценарий для меня, очень благодарен.

Ответы [ 3 ]

4 голосов
/ 20 декабря 2010

Вот довольно полное переписывание:

import hashlib
import getpass

class Auth(object):
    class UserNameTakenError(Exception):
        pass

    def __init__(self, userDict):
        self._users = {name:self.hash(pwd) for name,pwd in userDict.iteritems()}

    def hash(self, pw):
        return hashlib.sha256(pw+"&@#salt)(string)846!^").digest()

    def validate(self, name, pwd):
        return (name in self._users) and (self._users[name]==self.hash(pwd))

    def create(self, name, pwd):
        if name in self._users:
            raise Auth.UserNameTakenError()
        else:
            self._users[name] = self.hash(pwd)

    def delete(self, name, pwd):
        if self.validate(name, pwd):
            del self._users[name]

def getYes(msg):
    return raw_input(msg).lower() in ('y','yes')

class App(object):
    def __init__(self):
        self.auth = Auth({'Robrajow':'password', 'Hacker':'hack', 'Noob':'lololol1'})
        self.actions = {
            'login':    self.doLogin,
            'l':        self.doLogin,
            'register': self.doRegister,
            'r':        self.doRegister,
            'delete':   self.doDelete,
            'd':        self.doDelete,
            'exit':     self.doExit,
            'e':        self.doExit,
            'x':        self.doExit,
            'q':        self.doExit
        }

    def welcome(self):
        return raw_input("\nWelcome to Telemology! You can Login, Register, Delete an account, or Exit.\nWhat would you like to do? ")

    def doLogin(self):
        name = raw_input("What is your username? ")
        pwd = getpass.getpass("What is your password? ")
        if self.auth.validate(name, pwd):
            print "Welcome to Telemology, {0}".format(name)
        else:
            print "The username or password you entered is incorrect. Please try again or register."
        return False

    def doRegister(self):
        name = raw_input("What is your new username? ")
        pwd = getpass.getpass("What is your new password? ")
        try:
            self.auth.create(name, pwd)
            print "{0}, welcome to Telemology!".format(name)
        except Auth.UserNameTakenError:
            print "That account name is already taken. Please try again."
        return False

    def doDelete(self):
        name = raw_input("What is your username? ")
        pwd = getpass.getpass("What is your password? ")
        if self.auth.validate(name, pwd):
            if getYes("Do you really want to delete your account? It will never return! "):
                self.auth.delete(name, pwd)
                print "Goodbye forever, {0}".format(name)
            else:
                print "I hoped so."
        else:
            print "The username or password you entered is incorrect."
        return False

    def doExit(self):
        print "Goodbye!"
        return True

    def run(self):
        while True:
            act = self.welcome().lower()
            if act in self.actions:
                if self.actions[act]():
                    break
            else:
                print "What? You can only input login, delete, register, or exit."

def main():
    myapp = App()
    myapp.run()

if __name__=="__main__":
    main()
3 голосов
/ 20 декабря 2010

Ну, вы используете словарь для хранения учетных записей. Чтобы добавить элемент в словарь, вы делаете:

accounts["newusername"] = "newpassword"

А для удаления предмета это выглядит так:

del accounts["usernametodelete"]

(Но я предлагаю вам потратить некоторое время на работу над «сложными строками кода, которые можно заменить на одну» - это значительно облегчит чтение программы. Например, если у вас есть сложный набор / else операторы, устанавливающие option1 и option2, почему бы просто не использовать что-то вроде:

if choice in accounts and choice2 == accounts[choice]:
0 голосов
/ 20 декабря 2010

Исправьте ваш код, есть много ошибок.

Я предполагаю, что это то, что вы хотите сделать.

>>> if username in accounts:   # if the username is in accounts
    if accounts[username] == password:  # check whether the password is same
        del accounts[username]  # if it is, delete the user
    else:
        print 'Password invalid' # else tell the user the password is invalid

Если нет, прокомментируйте, и я обновлю.

...