Lors de l'exécution du code, j'obtiens une erreur logique où il continue de lancer la première erreur d'instruction if "Erreur! Le nom d'utilisateur n'existe pas." Je dois pouvoir me connecter en tant qu'administrateur, puis ajouter des utilisateurs en les ajoutant à un fichier .txt, après quoi, si le programme est à nouveau exécuté, je peux me connecter soit par l'administrateur, soit par l'un des nouveaux utilisateurs créés dans le txt fichier. Je n'arrive pas à le diviser correctement pour que la boucle itère correctement dans la liste lors de la connexion.

Exemple:

Print (nouvelles_lignes) = [['admin', 'adm1n'], ['kevin', 'kev1n'], ['dorothy', '1234']]

Contenu du fichier .txt avec chaque entrée sur la nouvelle ligne = admin, adm1n \ n kevin, kev1n \ n dorothy, 1234

Code jusqu'à présent:

import time

#User input of username and password

user_name = input("Username:\n")
user_pass = input("Password: \n")

#Opening document

with open("user.txt", "r+", encoding = "utf-8-sig") as f:
    
    new_lines = []
    for line in f:
        new_line = line.strip()
        new_lines.append(new_line.split(","))
        
    print(new_lines)

    #Loop to enter user name and password
    for x in new_lines:
        for y in x:
            if user_name != new_lines[:][0]:
                print("Error! Username does not exist.")
                user_name = input("Username:\n")
                user_pass = input("Password: \n")
                
            elif user_pass != new_lines[:][1]:
                print("Error! Incorrect password.")
                user_name = input("Username:\n")
                user_pass = input("Password: \n")
                
            else:
                print("Welcome back!")
                break
        break
        
    #User options to choose from        
    user_choice = input("""\nPlease select one of the following options:
                            \nr - register user
                            \na - add task 
                            \nva - view all tasks
                            \nvm - view my tasks
                            \ne - exit
                            \nAnswer: """)
2
Kevin Marais 25 août 2020 à 11:12

2 réponses

Meilleure réponse

Je recommande de reformater un peu le code pour qu'il soit plus facile de trouver si le nom d'utilisateur existe et si le mot de passe est correct.

import time

#User input of username and password

user_name = input("Username:\n")
user_pass = input("Password: \n")

#Opening document

with open("user.txt", "r+", encoding = "utf-8-sig") as f:
    
    new_lines = []
    for line in f:
        new_line = line.strip()
        new_lines.append(new_line.split(","))

usernames = [acc[0] for acc in new_lines]
pws = [acc[1] for acc in new_lines]

while True:
    if user_name not in usernames:
        print("Error! Username does not exist.")
        user_name = input("Username:\n")
        user_pass = input("Password: \n")
    else:
        pw_index = usernames.index(user_name)
        if user_pass != pws[pw_index]:
            print("Error! Incorrect password.")
            user_name = input("Username:\n")
            user_pass = input("Password: \n")
        else:
            print("Welcome back!")
            break

#User options to choose from        
user_choice = input("""\nPlease select one of the following options:
                        \nr - register user
                        \na - add task 
                        \nva - view all tasks
                        \nvm - view my tasks
                        \ne - exit
                        \nAnswer: """)
1
Tensza 25 août 2020 à 08:35

Vous avez une erreur logique dans la boucle - vous semblez comparer chaque ligne du fichier texte avec le nom d'utilisateur et le mot de passe fournis, et indiquez une erreur si elles ne correspondent pas - en ignorant le fait que l'utilisateur peut ne pas être sur la première ligne du fichier. L'erreur ne devrait s'afficher que si vous avez parcouru le fichier entier et que vous n'avez pas trouvé l'utilisateur, ou si vous avez trouvé l'utilisateur mais que le mot de passe ne correspond pas.

De plus, je ne pense pas que vous vouliez du tout la boucle interne, vous déclarez x et y mais ne les utilisez pas, avez-vous essayé de les imprimer et de vérifier ce qu'ils contiennent?

Quoi qu'il en soit, voici les grandes lignes de ce à quoi je pense que la boucle devrait ressembler

found = False
for current_user, current_password in new_lines:
    if current_user == user_name:
        if current_password == user_pass:
            print("Welcome back!")
            found = True
        else:
            print("Error! Incorrect password")
       break
if not found:
    print("Error! Username does not exist.")
0
Arthur.V 25 août 2020 à 08:42