Здесь:
for line in open("loginDetails.txt","r").readlines():
loginInfoP1 = line.split()
# code using loginInfoP1 here
вы перебираете содержимое вашего файла и перепривязываете loginInfoP1
на каждой итерации - поэтому очевидно, что после завершения цикла for loginInfoP1
содержит значения для последней строки.
То, что вы хотите здесь, это построить дикт из всех данных входа в систему (используя имя пользователя в качестве ключа):
accounts = {}
# NB : make sure we close the file after use
with open("loginDetails.txt") as f:
# nb: files are iterable, no need to read the whole
# file at once
for line in f:
# make sure we don't have an empty line
line = line.strip()
if not line:
continue
username, passwd = line.split()
accounts[username] = passwd
тогда вам просто нужно проверить диктовку:
usnmAttemptP1 = input("Enter your username\n").strip()
pswdAttemptP1 = input("Enter your password\n").strip()
if usnmAttemptP1 in accounts and accounts[usnmAttemptP1] == pswdAttemptP1:
# ok
Обратите внимание, что ваш код входа в систему абсолютно одинаков для обоих игроков, поэтому вы можете выполнить рефакторинг в специальной функции. Кроме того, ваш поток выполнения неверен - функция входа не имеет смысла запускать игру, она должна только возвращать определенное значение (либо данные учетной записи пользователя, либо просто логическое значение, указывающее, что пользователь правильно вошел в систему) своему вызывающему и позволить вызывающему нести его. со следующим шагом:
def read_accounts():
accounts = {}
# NB : make sure we close the file after use
with open("loginDetails.txt") as f:
# nb: files are iterable, no need to read the whole
# file at once
for line in f:
# make sure we don't have an empty line
line = line.strip()
if not line:
continue
username, passwd = line.split()
accounts[username] = passwd
return accounts
def auth_user(accounts, prompt):
print(prompt)
max_attempts = 10 # let's not loop forever
correctDetailsP1 = 0
while correctDetailsP1 < max_attemps:
usnmAttemptP1 = input("Enter your username\n")
pswdAttemptP1 = input("Enter your password\n")
if usnmAttemptP1 in accounts and accounts[usnmAttemptP1] == pswdAttemptP1:
correctDetailsP1 += 1
print("You have successfully logged on " + usnmAttemptP1 + "!")
return True
else:
print("Either your username or password is incorrect! Please try again")
# failed
return False
def main():
accounts = read_accounts()
for prompt in ("Player One, enter your details first!", "Player Two, enter your details now!"):
if not auth_user(accounts, prompt):
return False
startGame()
if __name__ == "__main__":
main()
В качестве примечания: я понимаю, что это не является критически важным программным обеспечением, но хранение незашифрованных паролей - очень плохая идея. Канонический способ - хранить зашифрованные пароли, а во время входа зашифровать пароль, предоставленный пользователем (с тем же алгоритмом, конечно), и сравнить его с сохраненным зашифрованным паролем.