1
votes

(Python) Je veux mettre la boucle for suivante avec instruction de retour sur une seule ligne:

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.


2 commentaires

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îne 0123456789 ?


3 Réponses :


1
votes

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


4 commentaires

isdigit n'est pas un bon choix ici. Il autorisera toutes sortes de broches folles comme "꘠꧓ 𐩃𐩃𐩃"


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é



-2
votes

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


0 commentaires

-1
votes

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.


0 commentaires