Je vérifie d'abord une condition donnée, selon une instruction IF normale. Si c'est True , je dois analyser tous les fichiers pour un seul mot-clé. Si ce n'est pas True , je dois analyser tous les fichiers à la recherche d'un ensemble de mots-clés, qui auront été fournis.
Pour mon exemple de travail simple, plutôt que d'analyser les noms de fichiers dans un répertoire, je recherchez simplement une chaîne pour les mots-clés.
if password1 in f and password2 in f and password3 in f:
print("problem solved")
Si le mot-clé = "mot-clé" c'est-à-dire est singulier, alors ce code fonctionne. Bien. Cependant, je voudrais faire en sorte que si c'est l'autre cas, qui nécessite de connaître plusieurs mots-clés pour saisir le bon fichier, je n'ai pas besoin de recourir à l'écriture explicite de tous les mots.
Pour mes besoins, je pourrais écrire
test1 = "NotKeyWord"
password = "password"
password1 = "password1"
password2 = "password2"
password3 = "password3"
if test1.lower() == "keyword":
condition = password
else:
condition = [password1, password2, password3]
f = "password1_password2_password3_jibberish_E=mc2"
if condition in f:
print("Problem solved")
Mais je suis après une méthode pythonique, qui, espérons-le, sera suffisamment générique pour pouvoir gérer un tableau de mots-clés de longueur inconnue, et ne peuvent donc pas être codés en dur.
4 Réponses :
Cela devrait fonctionner,
if all ( c in f for c in condition ):
print("problem solved")
Le problème ici est que si l'un d'entre eux est vrai, il passe, mais j'ai besoin que TOUS soient vrais
D'accord, vous pouvez changer la condition en all (). Je l'ai édité
Faire de la condition toujours une liste, même si elle ne contient qu'un seul élément:
if all(c in f for c in condition):
print("problem solved")
Ensuite, utilisez la fonction all () pour vérifier si tous les éléments de la condition sont présents dans f:
if test1.lower() == "keyword":
condition = [password]
else:
condition = [password1, password2, password3]
Cela fonctionnera si la condition a un élément, ou dix, ou cent.
Amen. Je vais lancer une pièce pour voir qui la reçoit puisque Nebi vous l'avez aussi, juste avec le "tout" plutôt que "tout"
Une façon est:
if [x for x in condition if x in f]: ...
Pour vous faciliter la tâche, je ferais une liste de mots de passe dans les deux cas. Si test1 est le mot-clé, il devient alors une liste d'un seul.
f = "password1_password2_password3_jibberish_E=mc2"
if all(pw in f for pw in passwords):
print("Problem solved")
Vous pouvez alors utiliser le all function avec un expression de générateur pour la deuxième condition.
if test1.lower() == "keyword":
passwords = [password]
else:
passwords = [password1, password2, password3]