Erreur zip argument #2 must support iterable

Résolu/Fermé
SerialCookie - 3 août 2020 à 16:00
 SerialCookie - 3 août 2020 à 19:31
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 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
3 août 2020 à 17:47
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
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 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
3 août 2020 à 18:01
tiens, nous ne lisons pas le même message d'erreur.
regarde mieux, pour ne pas rester novice.
0
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 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
3 août 2020 à 19:07
en effet. quel est cet argument? te semble-t'il itérable?
0
SerialCookie > yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024
3 août 2020 à 19:31
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