La première ligne de code est l'échec de ma tentative de placer les trois lignes suivantes sur une seule ligne:
return (False for char in pin if char not in "0123456789") for char in pin: if char not in "0123456789": return False
Je veux renvoyer True
si tous les caractères de pin
sont des chiffres.
3 Réponses :
Si vous vouliez utiliser une compréhension de liste , vous devrait utiliser [...]
au lieu de (...)
comme x = [False for char in pin if char not in "0123456789"]
.
Mais je suppose que vous devez en fait vérifier si chaque caractère du pin
spécifié est un chiffre ou non. Vous pouvez utiliser .isdigit ()
fonction pour cela comme
if not pin.isdigit(): // Handle the error
isdigit
n'est pas un bon choix ici. Il autorisera toutes sortes de broches folles comme "꘠꧓ 𐩃𐩃𐩃" code>
Etes-vous sûr que isdigit ()
est ici, il semble que l'OP tente de comparer chaque élément de char
avec une chaîne de nombres.
@wim Ce qui pourrait être une bonne idée si quelqu'un avec une langue étrangère veut entrer son code PIN dans sa propre langue, n'est-ce pas? Si ce n'est pas ce que l'on souhaite, isdigit ()
est ici un mauvais choix bien sûr. Quelle est votre suggestion?
Ma suggestion est de ne pas changer le comportement du code d'OP, du moins pas sans mentionner que le comportement est en train d'être changé
Cette réponse suppose que vous voulez renvoyer True
pour un code PIN valide (tous les caractères sont dans "0123456789") et False
pour un code PIN non valide (un ou plusieurs caractères ne sont pas dans "0123456789").
Une façon de résoudre ce problème serait d'utiliser la fonction intégrée all ()
avec une compréhension de liste. La fonction all ()
renvoie True
si la liste est vide ou si chaque valeur de la liste est True
. Il renvoie False
si une ou plusieurs valeurs False
apparaissent dans la liste.
Premièrement, pour générer la liste des False
les valeurs utilisent des crochets pour transformer votre expression en compréhension de liste comme ceci:
return all([False for char in pin if char not in "0123456789"])
Passez cette compréhension de liste à la fonction all ()
. Cela serait fait en une seule ligne comme ceci:
[False for char in pin if char not in "0123456789"]
Si la liste est vide (c'est-à-dire que tous les caractères sont dans "0123456789"
), il sera renvoie True
. Il renverra False
si l'un des caractères n'est pas dans "0123456789"
.
Voir: https://docs.python.org/3/library/functions.html# tout
return [] == [0 pour le caractère dans la broche si le caractère n'est pas dans "0123456789"]
Le code:
[0 pour le caractère dans la broche si le caractère n'est pas dans "0123456789"]
renvoie 0 si cette boucle for est satisfaite. Sinon, il renvoie un tableau vide.
Donc, si vous le comparez avec [], vous obtiendrez des réponses vraies / fausses.
Que voulez-vous retourner pour un code PIN valide ?
Vrai
?Je ne sais pas ce que vous demandez, voulez-vous vérifier chaque élément de
char
pour déterminer s'il est dans la chaîne0123456789
?