Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用于两个用户的函数_Python_Function - Fatal编程技术网

Python 用于两个用户的函数

Python 用于两个用户的函数,python,function,Python,Function,我有两个用户的登录系统。我有重复的代码,但我把它作为一个函数,使代码更有效。但是,我不太确定如何为每个用户更改一些变量。代码如下: def login_system(): loggedin = False while not loggedin: login=input("Do you have an account? (yes/no) ") loggedin=False if login.lower()=="yes":

我有两个用户的登录系统。我有重复的代码,但我把它作为一个函数,使代码更有效。但是,我不太确定如何为每个用户更改一些变量。代码如下:

def login_system():
    loggedin = False
    while not loggedin:
        login=input("Do you have an account? (yes/no) ")
        loggedin=False
        if login.lower()=="yes":
            login=open("login.csv")
            reader = csv.reader(login)
            username=input("What is your username: ")
            password=input("What is your password: ")
            for row in reader:
                if row[0]==username and row[1]==password:
                    print("Welcome " + username)
                    loggedin=True
                    break
            if loggedin==False:
                print("Invalid username or password. Please try again.")
                continue

        elif login.lower()=="no":
            print(" ")
            print("Make an account.")
            print(" ")
            username=input("What is your username: ")
            password=input("What is your password: ")
            break

        else:
            print("Invalid input.")
            continue
print("User 1:")
login_system()

print("")
print("User 2:")
login_system()
基本上,我希望用户1和用户2的用户名和密码不同,但我不知道从哪里开始,似乎没有任何帮助。当我为用户2输入用户名和密码时,它会覆盖我为用户1所做的输入,我不希望发生这种情况。谢谢


Dylan

根据您的要求,如果您存储成功登录用户名和密码的字典,似乎对您更合适

让你的代码如下

users_logged_in={}
def login_system():
loggedin = False
while not loggedin:
    login=input("Do you have an account? (yes/no) ")
    loggedin=False
    if login.lower()=="yes":
        login=open("login.csv")
        reader = csv.reader(login)
        username=input("What is your username: ")
        password=input("What is your password: ")
        for row in reader:
            if row[0]==username and row[1]==password:
                print("Welcome " + username)
                #  usernames and passwords you have entered stored in dict
                users_logged_in[username]=password
                loggedin=True
                break
        if loggedin==False:
            print("Invalid username or password. Please try again.")
            continue

    elif login.lower()=="no":
        print(" ")
        print("Make an account.")
        print(" ")
        username=input("What is your username: ")
        password=input("What is your password: ")
        break

    else:
        print("Invalid input.")
        continue
print("User 1:")
login_system()

print("")
print("User 2:")
login_system()
如果希望保留登录到系统的用户名的顺序,请从Python集合转到OrderedDict

否则,您可以创建包含用户名和密码元组的列表 在上面的代码中创建元组,如下所示

logged_user_details=(username,passowrd)

用户\u登录\u

作为用户名和密码的列表,附加上面创建的元组

users_logged_in.append(logged_user_details). 
现在,您的列表中将包含如下所示的用户和密码,并且条目的顺序也将保留

[(User1,Password1),(User2,Password2),(User3,Password3)]


无论您使用列表还是Dict方法,这完全取决于您存储用户名和密码的使用目的。

您似乎在练习python或一个简单的问题,我添加了伪代码,您可以自己开发,因为它很简单,如果您自己编写,它将帮助您在该范例中思考,以解决这个问题

无论何时你想做某事或实现它,分步做或写下来,都会很有帮助

顺便说一句


这取决于您的
login.csv
-例如,我注意到,当用户“创建帐户”时,您没有将其详细信息保存到文件中,或者实际上没有对其进行任何操作。(我假设这只是一个有趣和实用的玩具示例——一个真正的用户登录系统将使用数据库,而不仅仅是文件,并且不会以明文形式存储密码。如果这是您计划在“现实生活”中使用的东西,请研究如何正确使用。)它将细节放入CSV的部分稍后会放入代码中,因为这是一个游戏的登录,所以我在游戏后将其放入,以使其更简单。它附加用户名、密码和分数。很抱歉没提那件事。我不明白你的问题。到底是什么问题?变量username和password在代码末尾写入csv文件,但我有重复的代码开始。我想把它缩短,所以我把它做成了一个函数。但是,我将第一个用户名和密码写入,然后第二个用户名和密码将覆盖第一个用户名和密码。我希望它不会覆盖它们。然后你可以读取CSV文件的行和列,并在你想登录任何用户时相应地匹配它们。使用两个不同的列表并依靠列表顺序匹配用户名和密码是脆弱和无效的-你想要的是用户名:密码dict,或者至少是一个用户名、密码元组列表。我也将这样做
 def login_system():
        loggedin = False
        while not loggedin:
            login=input("Do you have an account? (yes/no) ")
            loggedin=False
            if login.lower()=="yes":
                login=open("login.csv")
                reader = csv.reader(login)
                username=input("What is your username: ")
                password=input("What is your password: ")
                for row in reader:
                    if row[0]==username and row[1]==password:
                        print("Welcome " + username)
                        loggedin=True
                        break
                if loggedin==False:
                    print("Invalid username or password. Please try again.")
                    continue

            elif login.lower()=="no":
                print(" ")
                print("Make an account.")
                print(" ")
                username=input("What is your username: ")
                password=input("What is your password: ")
                #How to Save Username and password
                #1. Find Two Empty Rows or one empty row and it's corresponding column in CSV file. (Can be done using running a loop on the csv file)
                #2. Store Username password in the corresponding rows and columns above. 


                break

            else:
                print("Invalid input.")
                continue
    print("User 1:")
    login_system()

    print("")
    print("User 2:")
    login_system()