Je suis nouveau sur Python et j'ai du mal à boucler lors de la vérification des chaînes dans un fichier. Pour ce programme, je vérifie si un nom d'utilisateur que l'utilisateur souhaite créer existe déjà. Si le nom d'utilisateur existe déjà dans le fichier, le programme invite l'utilisateur à entrer un autre nom d'utilisateur. La boucle se termine lorsque l'utilisateur entre un nom d'utilisateur qui n'est pas dans le fichier. Voici le code pertinent:

# Prompting for username and password
username = input("Enter your username: ")
password = input("Enter your password: ")

# open password file
f = open("password.txt", "r")

# while username exists in file
while username in f.read():
    username = input("Enter your username: ")

f.close()

Si j'entre un nom d'utilisateur qui existe dans le fichier de mot de passe, le programme m'invite à entrer un autre nom d'utilisateur; cependant, lorsque j'entre le même nom d'utilisateur, le programme ne reste pas dans la boucle. Des idées sur pourquoi cela se produit?

0
CMoney 20 nov. 2018 à 08:45

3 réponses

Meilleure réponse

Lorsque vous exécutez f.read() Python lira le fichier et continuera ensuite sur la ligne suivante du fichier dans l'itération suivante. Il ne reviendra pas en haut du fichier. Il quitte donc la boucle car le username dans la ligne suivante du fichier est soit une chaîne vide, soit un autre nom. Pour résoudre ce problème, vous pouvez utiliser un gestionnaire de contexte comme celui-ci:

# Prompting for username and password
username = input("Enter your username: ")
password = input("Enter your password: ")

# read in the file data
with open('password.txt') as f:
    data = f.read()

# while username exists in file
while username in data:
    username = input("Enter your username: ")

Ensuite, selon la structure des données dans votre fichier .txt, vous pouvez appeler split() sur data s'il utilise une nouvelle ligne.

0
kstullich 20 nov. 2018 à 06:11

Cela est dû au fait que vous utilisez f.read () dans la condition while. f.read lit tout le contenu du fichier à la fois et il n'y a rien d'autre à lire à partir du fichier, ce qui conduit à la fin de la boucle while.

Si vous souhaitez vérifier les noms d'utilisateur dans le fichier, je vous suggère de créer une liste de noms d'utilisateur que vous lisez à partir du fichier et de l'utiliser dans votre boucle while pour la vérification.

Si votre fichier a un contenu: nomutilisateur1, nomutilisateur2, ...

Tu peux faire

listOfUsernames = f.read().split(',')

Puis utilisez-le pour vous enregistrer dans la boucle while.

0
Hardhik 20 nov. 2018 à 06:09

Il n'y a aucune condition pour vérifier si le nouveau nom d'utilisateur est dans le fichier ou non.

Peut-être qu'un moyen plus simple de le faire serait d'utiliser l'approche suivante?

username = input("Enter your username: ")
password = input("Enter your password: ")

# open password file
f = open("password.txt", "r")
data = f.read()

# while username exists in file
while username in data:
    new = input("Enter your username: ")
    if new in data:
        continue
    else:
        break

username = new
f.close()
0
Rupaksh Paul 20 nov. 2018 à 06:08