4
votes

TypeError: ne peut concaténer que str (pas "NoneType") à str

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!


2 commentaires

string = string + convertChar (char) C'est faux. La définition de convertChar est également incomplète (indice: que se passe-t-il si l'instruction if n'est pas exécutée?)


Dans la fonction covertChar vous effectuez une vérification if 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 renvoie Aucun par défaut si aucune valeur de retour n'est rencontrée


3 Réponses :


1
votes

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.


0 commentaires

1
votes

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 ()


0 commentaires

0
votes

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)


0 commentaires