Boucle for

Bonjour,
Je ne comprend pas mon erreur. Pk ca me dit ca

def ligne_scan(ligne):
    v=0
    co=0
    d=0
    e=0
    a=0
    for i in range(0, len(ligne)):
        ch=ligne[i]
        if ((ch>='a' and ch<='z') or (ch>='A' and ch <='Z')):
            ch=ch.upper()
            #
            if ch=='A' or ch== 'E' or ch=='I' or ch=='O' or ch=='U':
                v +=1
            else:
                co +=1
        elif ch.isdigit():
            d +=1
        elif ch==" ":
            e +=1
        else:
            a +=1


print("Entrez une nouvelle ligne de texte:\n")
ligne=input()
ligne=ligne.upper()
v,co,d,e,a=ligne_scan(ligne)
#
print(" ")
print("Nombre de voyelles:       %d" % v);
print("Nombre de consonnes:      %d" % co);
print("Nombre de chiffres:       %d" % d);
print("Nombre d'espaces:         %d" % e);
print("Nombre d'autres carac.:   %d" % a);


Entrez une nouvelle ligne de texte:

allo
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-4-14ad374bbe16> in <module>
      2 ligne=input()
      3 ligne=ligne.upper()
----> 4 v,co,d,e,a=ligne_scan(ligne)
      5 #
      6 print(" ")

TypeError: cannot unpack non-iterable NoneType object


Configuration: Windows / Chrome 81.0.4044.122

2 réponses

  1. Est-ce que tu as trouvé finalement? j'ai le meme probleme..
    1. Contributeur
      je pense que tu devrais commencer par un exercice plus simple, par exemple une fonction qui retourne le double de la valeur d'entrée.
      tu utilises les mêmes noms de variable à l'intérieur et à l'extérieur de la fonction, cela ne t'aide pas à comprendre ce qui se passe.
  2. Contributeur
    bonjour, je ne vois pas l'instruction return de ta fonction.
    1. Je comprend pas je ne suis pas obliger d<en mettre toujours ?
    2. Contributeur
      @turcmaxtu n'es pas obligé d'en mettre, en effet.
      sauf si tu récupères des résultats de la fonction, ce que tu fais en mettant = devant l'appel à la fonction.

      je pense que tu devrais commencer par un exercice plus simple, par exemple une fonction qui retourne le double de la valeur d'entrée.

      tu utilises les mêmes noms de variable à l'intérieur et à l'extérieur de la fonction, cela ne t'aide pas à comprendre ce qui se passe.

      tu pourrais plutôt écrire ceci:
      print("Entrez une nouvelle ligne de texte:\n")
      maligne=input()
      maligne=maligne.upper()
      nv,nco,nd,ne,na=ligne_scan(maligne)
      #
      print(" ")
      print("Nombre de voyelles:       %d" % nv);
      print("Nombre de consonnes:      %d" % nco);
      print("Nombre de chiffres:       %d" % nd);
      print("Nombre d'espaces:         %d" % ne);
      print("Nombre d'autres carac.:   %d" % na);