Calcul durée du jour -lever & coucher du soleil

Bonjour!

Je me lance dans la réalisation de mon 2e programme Python.
Il y a des problèmes que je n’arrive pas à corriger.

-une multiplication refusée, je comprends pas pourquoi
-je n’arrive pas à utiliser les fonctions math (cosinus, pi…) et les fonctions date (jour du mois et mois de l’année). J’ai ne sais pas si c’est à cause d’une mauvaise syntaxe ou si c’est que je dois installer des librairies en plus.

ne faut-il pas mettre « import math » en tête du script et non à la fin?

Pour les fonctions math, j’ai réussis.
je m’étais peut être trompé entre les instructions Python3 et Python2.

Pour la date
Je reçois cette erreur:
Traceback (most recent call last):
File « daylight_hour.py », line 23, in
mois= date.month
NameError: name ‹ date › is not defined

En fait, j’ai voulu charger les fonctions juste avant de m’en servir plutôt qu’en tout début de programme en pensant que ça sollicitait un pu moins la mémoire vive. C’est une erreur?

+1 @gerard33

A mon tour, je te conseille de commencer à documenter un peu sur Python, en lisant des tutos ou des livres sinon, tu vas perdre un temps pas possible de quoi à te décourager de ce langage…

Bonnes lectures.

A+

Python te dit que la variable date n’existe pas.

En général, on charge tous les modules en début de programme.

A+

Ok, j’ai rectifié le tir (je bosse dessus actuellement)

La difficulté de certain tuto, c’est qu’il ne disent pas s’il traitent de Python 2 ou 3.
En plus de ça, j’ai reçu la version 3.5 depuis le ppa (jonnathonf) Python 3.6, c’est bizarre…

là, c’est du python 2 ou 3?
https://www.science-emergence.com/Articles/Obtenir-la-date-et-lheure-courante-avec-python/

Oui… Je me sens pas beaucoup plus avancé…

Cette erreur, je ne la comprends pas non plus:
Traceback (most recent call last):
File « daylight_hour.py », line 21, in
lat_radian= deg2rad * latitude
TypeError: can’t multiply sequence by non-int of type ‹ float ›

Bonjour,

Je n’arrive pas à charger la page.

Pour récupérer le numéro du mois courant, voici une proposition
datetime.datetime.now().month

Pour la multiplication, les 2 valeurs ne sont pas du même type. Passer la commande type (deg2rad) et type (latitude) pour identifer le type de chaque valeur. Modifier le type afin que ces valeurs soient compatibles.

Bonne bidouilles

A+

1 « J'aime »

Merci, tu m’as donné la bonne syntaxe :grinning:

La commande type (truc) ne me renvoi absolument rien, mi erreur, ni info.
j’ai essayé la commande « lat_radian= math.radians(latitude) »,j’ai toujours une erreur « TypeError: a float is required », même quand je rentre une valeur décimale comme latitude
j’ai essayé de coller un « float(lat_radian) » avant mon équation,
mais il me répond que lat_radian n’est pas défini

Tu as raison, et j’ai trouvé la cause précise

https://python.developpez.com/cours/apprendre-python3/?page=page_8#noteBasPage25

Citation
La fonction input() renvoie toujours une chaîne de caractères(25). Si vous souhaitez que l’utilisateur entre une valeur numérique, vous devrez donc convertir la valeur entrée

Citation
Dans les versions de Python antérieures à la version 3.0, la valeur renvoyée par input() était de type variable, suivant ce que l’utilisateur avait entré. Le comportement actuel est en fait celui de l’ancienne fonction raw_input(), que lui préféraient la plupart des programmeurs.

C’est un peu ch…t ces ambiguïtés créés d’un version à l’autre

Bonjour,
Content que tu ai trouvé et compris comment corriger ton programme.

En fait, Python3 à été écrit en théorie pour que son utilisation soit au final plus logique. Il n’existe plus 2 options pour la saisie « input » et « raw_input » comme en Phyton2 mais plus qu’une seule. C’est au programmeur de formater correctement ensuite la variable de la saisie.

Bonne bidouilles.
A+

Bon, j’ai encore des erreurs que je ne comprends pas:

cette ligne de programme
decl_rad= math.asin(0,3978math.sin(Va_rad(jourdelannee-(81-2math.sin(Va_rad(jourdelannee-2))))))

me renvoi cette erreur:
TypeError: asin() takes exactly one argument (2 given)

Que dois-je faire?

Je préférerais utiliser l’heure UTC c’est plus facile et plus fiable pour calculer l’heure solaire, je crois que les systèmes Linux (donc Raspbian aussi?) l’utilisent comme référence système. Je crois avoir compris qu’il me faudrait utiliser « time » ou « tzinfo » ou timezone", mais après, j’arrive pas à comprendre exactement comment faire.
Quelle instruction dois-je taper pour obtenir l’heure UTC?

je n’ai pas de réponses à ta question ne connaissant pas le python, mais je pense que toutes ces parenthèses ouvertes, fermées qu’à la fin ne conviendraient à aucun langage
je ne sais si cela correspond à la logique de tes opérations mais une solution parmi d’autres
decl_rad= math.asin(0,3978)+ math.sin(Va_rad(jourdelannee-(81-2)))+ math.sin(Va_rad(jourdelannee-2))
notes bien que j’ai mis des « + », j’aurais pu utiliser n’importe quel signe
c’est juste pour te dire que, si le python est robuste, tu ne peux pas…y accrocher n’importe quoi!
une fonction accolée à une autre sans séparateur, ça ne peut pas marcher
bon, ceux qui « savent » nous diront

Bonsoir Gérard,

Merci, c’est gentil de vouloir m’aider, mais je ne suis pas convaincu.

Sauf si ma traduction est mauvaise, cette équation fonctionne sous le tableur de LibreOffice. Et les résultats que j’obtiens de ce fichier sont cohérents et vérifiés. Donc, c’est qu’elle est acceptable au moins par certain langages. Après c’est possible qu’elle dépasse la puissance de calcul ou la mémoire de Python, je ne sais pas.

Je ne peux pas décomposer le calcul de la manière dont tu le dit, les fonction trigo sinus, cosinus, tangente (…) c’est pas comme les multiplications:
sinus(a + b) est différent de sinus(a) + sinus (b)
Mais effectivement, si je garde le fond de ton idée, il doit être possible de décomposer les équation. Hélas, ce n’est pas la seule équation qui soit d’une complexité similaire. Si je dois décomposer pour donner « une simplicité enfantine » à des équations de mécanique céleste alors d’une part je suis pas couché, d’autre part, je peux très certainement faire des erreurs et enfin je serais déçu que la puissance de calcul de python soit aussi faible.

Sauf erreur de lecture de ma part, dans cette équation, il n’y a pas de fonction « accolée » à une autre, mais des fonctions « incrustées » dans une autre.

escuses-moi mais, soit ton copier/coller n’a pas fonctionné, soit dans « math.asin(0,3978math.sin( » 0.3978 argument de math.asin est collé à la fonction math.sin
bon, wète end scie

1 « J'aime »

Pu…n!
Je suis passé à coté de ça!

Tu as raison!!
La multiplication est sous-entendue en écriture « humaine » mathématique et certains langages machine l’acceptent… mon erreur était là. Je le lisait sans le voir.

Merci beaucoup!

Une fausse joie…
C’est le copié collé qui a supprimé les *, il y sont bien dans mon programme.
:disappointed_relieved: :disappointed_relieved: :disappointed_relieved:

Bonjour,

Il doit y avoir 2 arguments retournés par l’expression entre parenthèses au lieu de 1 attendu par la fonction math.asin.
Dans mon cas, pour avancer dans le debug de programme, j’ouvre un interpreteur en ligne de commande dans un terminal et je test une à une mes commandes. Quand ça bloque sur une ligne, je la découpe en morceaux et envoi son résultat dans une variable, et je fais un print sur la variable. Une fois la syntaxe fonctionnelle, je la copie dans mon programme.

Bon courage.

A+

@jelopo
Oui, tu as raison…
J’ai utilisé ta méthode et j’ai compris:
pour écrire mes chiffres, j’ai utilisé des virgules au lieu de mettre des points, le programme a donc interprété ça comme une liste et non comme un chiffre décimal.

je continue la mise au point du programme… :rowing_man: :rowing_man:

Autre conseil, les erreurs Python sont très explicites en général. Un copier/coller de l’erreur dans un moteur de recherche Internet donne toujours de bonne pistes à défaut de la solution.

A+

J’aurais encore besoin de quelques lumières.

Mon programme fonctionne maintenant de façon partielle :yum:

L’idée c’est que ce programme puisse fonctionner « en manuel » pour un utilisateur ou en « automatique » pour le système. Donc, je pensais utiliser un fichier INI pour y stocker la longitude et la latitude, pour ce 1er programme. Il calcule la durée du jour, le lever de soleil, le coucher de soleil et d’autres paramètres, valables pour la journée et utiles pour d’autres programmes.

j’ai prévu que 2 programmes utilisent ses données:
-celui qui calcule la position du soleil (toute les 15minutes)
Celui-là, je le met un peu de coté pour le moment, en plus de la réalisation électronique de mon projet, j’ai pas envie de me taper tout de suite la réalisation mécanique du suiveur solaire + éventuellement le programme de gestion des masques…
-celui qui gère l’alimentation

Je suis en train d’essayer de comprendre, le fonctionnement des fichiers INI avec Python, je m’attendait à ce que se soit hyper-simple mais c’est pas le cas…

Sur la méthode générale et les fichiers d’échanges de données, auriez-vous des conseils?