Erreur zip argument #2 must support iterable [Résolu]

Signaler
-
 SerialCookie -
Bonjour,

Je suis novice en Python et suis en train de créer un programme permettant de calculer l'angle de projection d'une balle optimal selon une certaine vitesse initiale. Le problème est que j'utilise une boucle for en zippant 2 listes, mais l'erreur semble me dire que la 2ème n'est pas itérable... Je vous avoue que je ne comprends pas bien. Voici mon code :
# -*- coding: utf-8 -*-
from matplotlib import pyplot as plt
import math
xs=[]
def go(nbr_courbes):
    angles=[]
    vitesses=[]
    for i in frange(1,90,1):
        angles.append(i)
        vitesses.append(vitesse)
    for a,b in zip(vitesses,angles):
        trace_trajectoire(a,b)
    plt.legend(max(xs))
def trace_graph(x,y):
    plt.plot(x,y)
    plt.xlabel(u'Coordonnées x')
    plt.ylabel(u'Coordonnées y')
    plt.title(u'Comparaison de chutes libres de corps')
def frange(debut, fin, incrementation):
    nombres=[]
    while debut<fin:
        nombres.append(debut)
        debut+=incrementation
    return nombres
def trace_trajectoire(u,theta):
    theta=math.radians(theta)
    g=9.8
    t_vol=2*u*math.sin(theta)/g
    intervalles=frange(0,t_vol,0.001)
    x=[]
    y=[]
    for t in intervalles:
        x.append(u*math.cos(theta)*t)
        y.append(u*math.sin(theta)*t-0.5*g*t*t)
    xs.append(max(x))
    trace_graph(x,y)
if __name__=='__main__':
    vitesse=float(input('Entrez la vitesse initiale pour laquelle vous voulez trouver le meilleur angle (m/s) : '))
    go(vitesse)
    plt.show()



et voici l'erreur :

Traceback (most recent call last):
File "/media/moi/FA8D-7FFC/Python/Graphique3.py", line 39, in <module>
go(vitesse)
File "/media/moi/FA8D-7FFC/Python/Graphique3.py", line 13, in go
plt.legend(max(xs))
File "/home/moi/anaconda3/lib/python3.7/site-packages/matplotlib/pyplot.py", line 2692, in legend
return gca().legend(*args, **kwargs)
File "/home/moi/anaconda3/lib/python3.7/site-packages/matplotlib/axes/_axes.py", line 403, in legend
    • kwargs)

File "/home/moi/anaconda3/lib/python3.7/site-packages/matplotlib/legend.py", line 1289, in _parse_legend_args
in zip(_get_legend_handles(axs, handlers), labels)]
TypeError: zip argument #2 must support iteration
>>>
Configuration: Linux / Chrome 84.0.4147.89

3 réponses

Messages postés
12370
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 septembre 2020
695
bonjour,
as-tu analysé le message d'erreur?
as-tu vu à quelle ligne se produit l'erreur?
le message d'erreur te prévient qu'un élément n'est pas itirable. de quel élément s'agit-il?
Pour moi, le message d'erreur parle de la ligne 11 : for a,b in zip(vitesses,angles): et dit que la liste "angles" n'est pas itérable, ce que je ne comprends pas étant donné que ce dernier est une liste...
Messages postés
12370
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 septembre 2020
695
tiens, nous ne lisons pas le même message d'erreur.
regarde mieux, pour ne pas rester novice.
Oulaaaaa... Merci beaucoup yg_be ! Effectivement, j'étais persuadé que l'erreur venait du zip dans la boucle for, mais en regardant plus au-dessus, je vois que le message d'erreur semble parler de l'argument de plt.legend()... Serait-ce bien ça ?
Messages postés
12370
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 septembre 2020
695
en effet. quel est cet argument? te semble-t'il itérable?
>
Messages postés
12370
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 septembre 2020

Effectivement, j'ai mis comme argument la valeur max d'une liste, donc un élément non-itérable. J'ai seulement eu à créer une liste contenant la valeur max de l'autre liste et le tour est joué ;) Merci encore pour ton aide yg_be, ça fait plaisir de voir des gens qui ne rabaissent pas les novices comme moi !