comment vérifier que l'entrée est en python minuscule


Réponse 1:

Vous avez déjà une solution correcte (utilisez le str.islower () / str.isupper () intégré), une solution informative (listes d'index basées sur des expressions) - vous pourriez aussi bien en obtenir une qui essaie de corriger votre code.

Dans strings.py,

def is_lower (chaîne_utilisateur): # Pour chaque personnage ... pour char dans user_string: # ... si c'est une majuscule ... si 'A' <= char <= 'Z': # return false, mettant fin à la fonction. retourne False # Si nous atteignons cela, il n'y avait pas de majuscules. retourne True

Si vous ouvrez et exécutez ceci dans IDLE ou tapez à partir de chaînes import is_lower dans une session interactive démarrée à partir du même dossier où se trouve le fichier, vous obtenez ceci:

>>> u_str = "CECI EST UNE CHAINE SUPÉRIEURE">>> l_str = "ceci est une chaîne inférieure">>> is_lower (u_str)Faux>>> is_lower (l_str)Vrai

Jusqu'ici tout va bien, non? Faux.

>>> is_lower ("123")Vrai>>> is_lower ("")Vrai

Donc, nous bouchons ce trou:

def is_lower (chaîne_utilisateur): # Obtenez une liste de toutes les lettres de la chaîne. ustr_letters = [c pour c dans user_string si c.isalpha ()] # S'il n'y a pas de lettres, ce n'est pas des minuscules. sinon ustr_letters: retourne False # Comme avant, mais avec la liste courte. pour char dans ustr_letters: si 'A' <= char <= 'Z': retourne False retourne True

... mais il y en a un autre:

>>> est_lower ("АБВ")Vrai

... et comment résoudre ce problème est une assez grande aventure (il y a 95 221 caractères en Unicode; vous devez commencer à penser aux filtres Bloom et tout).

Alors utilisez simplement les builtins :)

>>> "АБВ". Ralenti ()Faux>>> "абв" .islower ()Vrai

Réponse 2:

la meilleure façon serait:

def is_lower (str): si str.upper () == str: renvoie 'la chaîne est supérieure' elif str.lower () == str: renvoie 'la chaîne est inférieure' autre: return 'la chaîne est une casse mixte'

Votre fonction a échoué car vous essayez de comparer une lettre avec True

votre code :

si 'a' <= x <= 'z' == Vrai:

équivaut à demander

si 'a' <= x <= ('z' == Vrai):

ce qui n'est clairement pas ce que vous voulez; vous n'avez même pas besoin de comparer avec True puisque l'instruction «if» se compare à True…

Votre code doit être:

si 'a' <= x <= 'z':

mais cela ne fonctionne pas si le premier caractère est en minuscule, mais tout le reste est en majuscule. Ma fonction fonctionnera mieux, en ce sens qu'elle corrigera la distinction entre trois cas.


Réponse 3:

Essaye ça:

def is_lower (text): return ["CECI EST UNE CHAINE SUPERIEURE", "Ceci est une chaîne inférieure"] [text == text.lower ()]

Oui, une ligne de code pourrait être plus que suffisante

Si j'ai raison de votre problème, cette fonction renvoie le message d'être inférieur IIF chaque caractère alphabétique est en minuscule, c'est-à-dire qu'il n'y a même pas une seule majuscule.

Quelques cas de test et résultats pertinents:

>>> is_lower ('pippi')'ceci est une chaîne inférieure'>>> is_lower ('Pippi')"CECI EST UNE CHAINE SUPÉRIEURE">>> is_lower ('pippi est le chat le plus mignon de tous les temps')'ceci est une chaîne inférieure'>>> is_lower ('pippi est le chat ultime')"CECI EST UNE CHAINE SUPÉRIEURE"

Juste testé et fonctionne bien à la fois en Python 2 et Python 3; vous pouvez apprécier le charme d'avoir un tableau pour les réponses, puis d'utiliser un booléen pour l'indexer (si False est 0, alors appelle le premier élément; s'il est True, il est équivalent à 1, il appelle donc le deuxième élément).

Si ce n'était pas le cas, faites-le moi savoir et je pourrais vous donner un meilleur aperçu, à condition que je sois assez compétent :)


Réponse 4:

Vous pouvez essayer ceci.

def is_lower (x): si x.islower (): renvoie "la chaîne est inférieure" elif x.isupper (): retourne "la chaîne est supérieure" autre: return "Mots à casse mixte"

Donc, lorsque vous testez votre fonction, cela vous donne ceci.

ma_var = is_lower ("ABC")>>> la chaîne est supérieurema_var = is_lower ("abc")>>> la chaîne est inférieurema_var = is_lower ("AbC")>>> Mots à casse mixte

Jusqu'à présent, cela a fonctionné.


Réponse 5:

Hum, c'est juste là:

name = "Brendan"nom.isupper ()>> Faux

Votre code a pas mal de problèmes, le principal étant qu'il vérifie x par rapport à «a» et «z» comme s'il s'agissait d'un seul caractère, lorsque vous avez passé une chaîne entière. Vous avez besoin d'une boucle là-dedans. De plus, l'instruction if est un peu fausse, comme quelqu'un l'a mentionné, vérifier '== True' n'est pas interprété comme vous le souhaitez. Vous pouvez en fait ignorer complètement '== True' car le résultat de 'a' <= x <= 'z' est déjà un booléen (pas que Python en ait besoin de toute façon)


Réponse 6:

Je vois quelques bonnes approches dans les réponses, mais il est clair que personne n'a encore répondu à la question.

La raison pour laquelle cela se produit est votre état. 'a' <= x <= 'z' seul devrait renvoyer une valeur booléenne, mais avec == True d'après ce que je peux voir, c'est que 'z' == True est évalué en premier et renvoie False.

Il existe deux approches possibles pour résoudre ce problème. Supprimez == True ou utilisez des parenthèses sur 'a' <= x <= 'z', ce qui donne l'impression que ('a' <= x <= 'z') == True. Cependant, ce dernier est fortement déconseillé car == True est redondant dans les expressions booléennes dans presque toutes les langues.

Il y a une erreur possible dans votre fonction (je ne sais pas si vous l'avez fait exprès), c'est que votre fonction vérifie uniquement si le premier caractère de la chaîne est en minuscules ou non. Autrement dit, is_lower ("tHIS IS IN UPPER CASE") donne Vrai parce que l'ordre lexicographique de "tHIS IS IN UPPER CASE" est inférieur à celui de 'z'. Pour vérifier si toute la chaîne est en minuscules, vous devrez la parcourir, ce que les autres réponses ont déjà fait pour illustrer.