De travail sur l'affichage du menu, où la lettre "m" amène l'utilisateur vers le menu principal. Comment puis-je faire en sorte que cela fonctionne, peu importe si la lettre "m" est en majuscules ou en minuscules?
elif choice in"mM":# false positive if choice == ''
elif choice =='m'or choice =='M':
elif choice.lower()=='m':
En termes de maintenabilité, la 4ème alternative est meilleure lorsque vous souhaitez étendre de comparaison sensible à la casse de plusieurs chaînes de lettres, que vous devez fournir tous les 2N de possibilités dans le 1er et le 3ème alternatives. La 2ème alternative ne fonctionne correctement que pour une seule des chaînes de caractères.
Avec le 4ème alternative, il est également impossible de passer à côté d'une affaire lorsque vous souhaitez modifier le 'm' à d'autres lettres.
En termes d'efficacité, la 2ème alternative est le plus efficace, et puis la 1, puis la 3e et enfin le 4ème. C'est parce que le 3e alternative implique plus d'opérations; et tandis que l'appel de fonction et d'obtenir l'attribution est lent en Python donc fait le 4ème alternative relativement lente.
Bien sûr, sauf si vous êtes en train de faire cette comparaison 10 millions de fois, il n'y a pas de différence perceptible entre chacun d'entre eux.
L'OP a déjà dit que c'était pour l'affichage du menu, c'est la saisie de l'utilisateur. Pourquoi l'obsession de la timeit? Je suis en désaccord sur la 3ème option, le 3ème en termes d'efficacité. En raison de paresseux de l'évaluation et du fait que les autres opérations intrinsèquement impliquent de comparaison d'égalité, de toute façon, c'est juste plus vite ou plus vite que les autres. Mais c'est aussi la moins pythonic. Vous devriez vraiment apprendre à lire timeit résultats. Ils sont incroyablement utiles pour dissiper la confusion concernant l'efficience. Ils ont corrigé des erreurs dans mon intuition sur plus d'une occasion. Merci pour l'indispensable de mots indescriptible de la sagesse. Je vais maintenant aller et vraiment apprendre à lire timeit résultats 😐 Vous êtes de droite. Mon mauvais.
De cette façon serait à la fois explicite et très succincte:
elif choice in{'m','M'}:
Bien sûr, de l'exprimer de cette façon nécessite Python 2.7 ou 3.x qui soutiennent ensemble de littéraux. Je ne sais pas comment il compare l'efficacité-sage pour les autres réponses, mais le doute qui compte beaucoup pour un cas comme celui-ci.
À partir de la mémoire point de vue c'est pire. " mM " - > 27 octets ('m', 'M') -> 36 octets {'m', 'M'} -> 116 octets De cours pour une vérification en temps c'est bien, mais si vous avez de nombreux articles ou en cours d'exécution dans une boucle, cela pourrait être la question. Je ne comprends pas votre demande à combien d'articles sont impliqués ou s'il est utilisé dans une boucle important par rapport à la taille de la temporaire set littéraux impliqués. Je suis désolé. Ce que je veux dire, c'est a plus de mémoire que la chaîne "mM". Nous devons donc utiliser ensemble avec parcimonie si elle est utilisée par exemple dans une boucle des centaines ou des milliers d'itérations.
L'un des
En termes de maintenabilité, la 4ème alternative est meilleure lorsque vous souhaitez étendre de comparaison sensible à la casse de plusieurs chaînes de lettres, que vous devez fournir tous les 2N de possibilités dans le 1er et le 3ème alternatives. La 2ème alternative ne fonctionne correctement que pour une seule des chaînes de caractères.
Avec le 4ème alternative, il est également impossible de passer à côté d'une affaire lorsque vous souhaitez modifier le
'm'
à d'autres lettres.En termes d'efficacité, la 2ème alternative est le plus efficace, et puis la 1, puis la 3e et enfin le 4ème. C'est parce que le 3e alternative implique plus d'opérations; et tandis que l'appel de fonction et d'obtenir l'attribution est lent en Python donc fait le 4ème alternative relativement lente.
Voir http://pastie.org/1230957 pour le démontage et le
timeit
résultat.Bien sûr, sauf si vous êtes en train de faire cette comparaison 10 millions de fois, il n'y a pas de différence perceptible entre chacun d'entre eux.
Je suis en désaccord sur la 3ème option, le 3ème en termes d'efficacité. En raison de paresseux de l'évaluation et du fait que les autres opérations intrinsèquement impliquent de comparaison d'égalité, de toute façon, c'est juste plus vite ou plus vite que les autres. Mais c'est aussi la moins pythonic.
Vous devriez vraiment apprendre à lire
timeit
résultats. Ils sont incroyablement utiles pour dissiper la confusion concernant l'efficience. Ils ont corrigé des erreurs dans mon intuition sur plus d'une occasion.Merci pour l'indispensable de mots indescriptible de la sagesse. Je vais maintenant aller et vraiment apprendre à lire
timeit
résultats 😐Vous êtes de droite. Mon mauvais.
OriginalL'auteur kennytm
OriginalL'auteur Ignacio Vazquez-Abrams
De cette façon serait à la fois explicite et très succincte:
Bien sûr, de l'exprimer de cette façon nécessite Python 2.7 ou 3.x qui soutiennent ensemble de littéraux. Je ne sais pas comment il compare l'efficacité-sage pour les autres réponses, mais le doute qui compte beaucoup pour un cas comme celui-ci.
Je ne comprends pas votre demande à combien d'articles sont impliqués ou s'il est utilisé dans une boucle important par rapport à la taille de la temporaire
set
littéraux impliqués.Je suis désolé. Ce que je veux dire, c'est a plus de mémoire que la chaîne "mM". Nous devons donc utiliser ensemble avec parcimonie si elle est utilisée par exemple dans une boucle des centaines ou des milliers d'itérations.
OriginalL'auteur martineau