Erreur de code a corriger

Résolu/Fermé
shaykat - Modifié le 1 déc. 2017 à 19:14
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 - 2 déc. 2017 à 11:59
Bonjour,
J'ai écrit un code pour tracer la trajectoire d'un projectile sur python 3.6, et il y a une erreur : il me dit "can't multiply sequence by non-int of type 'float'"

voila mon code :

# toutes les importations necessaires
import matplotlib as pp
import math

# toutes les variables necessaires
masse = float(input("Entrer la masse du sat : ")) # en kg
alt = float(input("Entrer l'altitude de largage : ")) # en m
v = float(input("Entrer la vitesse horizontal : ")) # en m/s
Rt = 6371000 # rayon de la terre
h = alt + Rt # hauteur par rapport au centre de la terre
Mt = 5,972*(10**24) # masse de la terre # variables pour tracer la terre
perimetre = 2*math.pi*h   #calcul de la vitesse angulaire
periode = perimetre/v
w = (2*math.pi)/periode
G = 6.67*10**-11       #calcul de l'acceleration gravitationnelle
g = (G)*(masse)*(Mt)/(h)**2
teta = 0
t = 0
y = [h]
x = [0]
xT = [1]
yT = [0]
if (x!=xT and y!=yT) :  #on pose la condition pour tracer
    t += 1
    teta = teta + w
    g = (G*masse*Mt)/h**2                       # variation de l'acceleration gravitationnelle
    h = -0.5*g*t**2+t*h                         # variation de l'alltitude
    x.append(h*math.sin(teta))
    y.append(h*math.cos(teta))
for i in range(0,2*math.pi,math.pi/180):        # on dessine la terre
    xT.append(Rt*math.cos(teta))
    yT.append(Rt*math.sin(teta))

pp.plot(x,y,color = 'b',label='trajectoire')
pp.plot(xT,yT,color = 'r',label='terre')

pp.legend()
pp.show()


pouvez vous m'aider ?
A voir également:

5 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
1 déc. 2017 à 21:44
ne pourrais-tu pas simplifier la ligne 12 à 14 en:
w = v/h
?
n'as-tu aucune indication de la ligne où se produit l'erreur?
0
Ce serait pas à cause de tes nombres décimales ? On dirait que t'as utilisé une virgule au lieu d'un point :
Mt = 5,972*(10**24)
0
effectivement, en remplaçant la virgule par un point, ça marche.
mais maintenant j'ai
File "/Users/shaykat/OneDrive - IPSA/personnel/scientific/python/graph trajectoire sat.py", line 35, in <module>
for i in range(0.2*math.pi,math.pi/180): # on dessine la terre

TypeError: 'float' object cannot be interpreted as an integer
0
georges97 Messages postés 11827 Date d'inscription lundi 31 janvier 2011 Statut Contributeur Dernière intervention 19 avril 2024 2 246
2 déc. 2017 à 11:35
Bonjour,

Mes connaissances sont basiques, mais après recherche, la structure conditionnelle for i in range renvoie une liste d'entiers comprise entre les arguments a et b. Hors le premier argument est un float. D'où l'avertissement..

http://www.ac-nice.fr/maths/mathv2/images/admin/documents/resslycee/guide_de_démarrage-_Algorithmes_et_Programmation_V11.pdf

Je suppose donc qu'il faudra introduire des instructions dans la boucle plutôt que des décimales dans le compteur.

Cordialement
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
2 déc. 2017 à 11:59
bonjour, pourquoi pas plutôt:
for i in range(0,360,1): 

cela devrait faire la même chose, étant donné que tu n'utilises pas la valeur de i.
0