Imaginez que j'ai cette liste:
if {'user':user,'password':password} in a: print("okay") else: if {'user':user} in a and {'password':password} not in a: print("user okay, but incorrect pass") else: print("No username")
Maintenant, je veux savoir si l'utilisateur et le mot de passe saisis sont dans la liste précédente, comment puis-je résoudre ce problème?
Si je veux maintenant avoir 3 scénarios: un où l'utilisateur et le mot de passe correspondent, le second où le nom d'utilisateur est correct mais le mot de passe est incorrect et le dernier où le nom d'utilisateur n'existe pas.
a=[ {"user":"John","password":"123"} , {"user":"Mike","password":"12345"} ,{"user":"Peter","password":"qwerty"}] user=input("insert your username") password=input("insert your password")
Ce type de code ne fonctionnera pas, non? Alors, comment puis-je résoudre la deuxième étape (après la première autre)?
3 Réponses :
Utiliser:
if {'user':user,'password':password} in a: # it is already in there elif any(user == i['user'] and password != i['password'] for i in a): # user name is correct, but password isn't else: # it isn't in there
Utiliser:if {'user':user,'password':password} in a:
# it is already in there
else:
# it isn't in there
Si je veux avoir comme 3 scénarios: un où l'utilisateur et le mot de passe correspondent, le second où le nom d'utilisateur est correct mais le mot de passe est incorrect et le dernier où le nom d'utilisateur n'existe pas.
@alladin a édité le mien.
Une façon de procéder:
a=[ {"user":"John","password":"123"} , {"user":"Mike","password":"12345"} ,{"user":"Peter","password":"qwerty"}] user=input("insert your username") password=input("insert your password") flag = True for i in a : if i['user'] == user and i['password'] == password : print('match') # or whatever flag = False break if flag : print('not there ') # or whatever
Salut, ouais, j'avoue que le vôtre est simple et plus pythonique. Je n'ai pas vu votre réponse lorsque j'ai publié ceci. Mais je pense que c'est facilement compréhensible même par un programmeur non pythonique.
Merci pour l'aide
Vous pouvez suivre la solution suggérée par @ U9-Forward ou vous pouvez changer votre dict et au lieu d'avoir une liste de dictionnaires, vous pouvez simplement avoir un dictionnaire où la clé = nom réel et valeur = mot de passe réel. Si vous avez beaucoup d'objets dans votre dict et que cette fonction va être appelée très souvent, alors cette solution est meilleure en termes de complexité temporelle.
Donc, vous convertissez initialement votre liste a en dict appelé user_password_dict
if user in user_password_dict and user_password_dict[user] == password: # do something here else: # do something here
Après cela, vous pouvez facilement vérifier si l'utilisateur et le mot de passe correspondant existent dans votre user_password_dict
par cette déclaration:
user_password_dict = {user_obj['user']: user_obj['password'] for user_obj in a}
Si vous pouvez changer la structure de cela, je vous recommande de travailler directement avec des dictionnaires, c'est-à-dire
{'Jhon': '1234', 'Mike': '12345'}
C'est une sorte d'exercice, mais merci pour votre contribution.