En essayant de construire un convertisseur de chaînes majuscules en minuscules en Python 3.7, voici mon code:
Enter string - HELlo Traceback (most recent call last): File "loweralph.py", line 11, in <module> string = toLowerCase(result) File "loweralph.py", line 6, in toLowerCase result = result + convertChar(char) TypeError: can only concatenate str (not "NoneType") to str
Et voici ma sortie:
def convertChar(char): if char >= 'A' and char <= 'Z': return chr(ord(char) + 32) def toLowerCase(string): for char in string: string = string + convertChar(char) return string string = input("Enter string - ") result = toLowerCase(string) print(result)
Je suis vraiment nouveau dans Python et j'ai vu des réponses pour les TypeErrors 'list to list' et une autre réponse pour str à str, mais je ne pouvais pas la relier à mon code. Si quelqu'un pouvait expliquer ce que je fais mal, ce serait génial!
3 Réponses :
Comme coldspeed l'a commenté, lorsque vous passez une lettre minuscule à convertChar, la fonction ne renvoie pas un caractère approprié. D'où l'erreur.
De plus, avec 'string = string + convertChar (char)', vous ajoutez à la même chaîne d'entrée. C'est faux. Vous devez utiliser une nouvelle chaîne vide pour cela.
Vous devez ajouter des cas d'exception à votre code. Premièrement, que se passe-t-il si le caractère saisi est déjà en minuscule?
Vous pouvez faire quelque chose de ce genre:
def toLowerCase(string): newString = [] for char in string: newString.append(convertChar(char)) return ''.join(newString)
Ce n'est peut-être pas la solution la plus idéale, mais ce s'occupe de la plupart des choses. Autrement dit, uniquement si le caractère saisi est en majuscule, il est converti en minuscules. Pour tous les autres cas (qu'il s'agisse d'un caractère minuscule, d'un nombre et cetra), le caractère est retourné tel quel.
Deuxièmement, si vous faites un convertisseur majuscules en minuscules, la sortie de HElLo
doit être bonjour
, pas HElLohello
.
Pour cela, vous devez modifier votre deuxième fonction comme suit:
def convertChar(char): if char >= 'A' and char <= 'Z': return chr(ord(char) + 32) return char
Enfin, vous voudrez peut-être envisager d'utiliser la fonction intégrée .upper ()
.
Exemple d'utilisation:
'HeLlo'.upper ()
Je ne connais pas la raison de la construction de votre propre méthode, mais vous pouvez utiliser la méthode intégrée lower () à la place. Par exemple:
my_string = input("Enter string - ") result = my_string.lower() print(result)
string = string + convertChar (char)
C'est faux. La définition deconvertChar
est également incomplète (indice: que se passe-t-il si l'instructionif
n'est pas exécutée?)Dans la fonction
covertChar
vous effectuez une vérificationif char> = 'A' et char <= 'Z':
si c'est True, une opération est effectuée et a renvoyé le résultat. Mais que faire si c'est faux.? Python renvoieAucun
par défaut si aucune valeur de retour n'est rencontrée