Boucle for

turcmax Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -  
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   -
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
A voir également:

2 réponses

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonjour, je ne vois pas l'instruction return de ta fonction.
0
turcmax Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
Je comprend pas je ne suis pas obliger d<en mettre toujours ?
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > turcmax Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
tu 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);
0
Utilisateur anonyme
 
Est-ce que tu as trouvé finalement? j'ai le meme probleme..
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
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.
0