Erreur zip argument #2 must support iterable

Résolu
SerialCookie -  
 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
A voir également:

3 réponses

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
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?
1
SerialCookie
 
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...
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
tiens, nous ne lisons pas le même message d'erreur.
regarde mieux, pour ne pas rester novice.
0
SerialCookie
 
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 ?
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
en effet. quel est cet argument? te semble-t'il itérable?
0
SerialCookie > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
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 !
0