IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Puissance de 10 négatives [Python 3.X]


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2014
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2014
    Messages : 35
    Par défaut Puissance de 10 négatives
    Bonsoir à tous,

    Je cherche à écrire des puissances de 10 négatives sous forme décimale afin de faire travailler la notation scientifique à mes élèves.
    J'ai essayé d'utiliser une liste comme 8*[0] pour 10**-8 ce qui donne [0,0,0,0,0,0,0,0] et de plus, il est impossible de la multiplier par 5 (par exemple) afin de pouvoir écrire la forme décimale de 5*10**-8.
    Existe-t-il une fonction ou un script qui permettrait de faire cela ?
    Merci pour toutes vos réponses.
    Bonne soirée (chaude) à tous.
    Pierre.

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Avec mon Python 3.5:

    10**8 serait un entier (type int), mais 10**-8 est un réel (type float) qui s'affiche: 1e-08

    5*10**-8 est un réel (type float) qui s'affiche: 5e-08

    Quel est le problème?

  3. #3
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Pour afficher n'importe quel nombre en décimal tu peux t'inspirer de cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    a=5e-8
    print(a) ### 5e-08
    print('{:.{prec}f}'.format(a, prec=12))  ####  '0.000000050000'
    prec, c'est la precision voulue. Si tu ne veux pas de zéros inutiles à droite il faut te faire une petite fonction pour calculer sa valeur en fonction de l'exposant.

    Ca c'est un formatage, tu ne pourra pas faire d'opération mathématique dessus après. Il faut toujours faire ton opération mathématique sur le nombre python, et ensuite utiliser le formatage pour afficher le résultat.

    NB : Si jamais tu as des virgules au départ (du style 5.5e-8), alors là il faudra te méfier car le nombre de chiffre après la virgule pourra ne pas être le même en machine que ce que tu t'attends à voir (du à des erreurs d'arrondi, ton ordinateur ne stockant que des puissances de 2). Donc au lieu de 5.5e-8 ton ordinateur peut avoir lui en mémoire plutot 5.50000000297e-8, et là pour déterminer prec, ca va être un peu plus casse pied, à moins peut-être effectivement de revenir sur une liste comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    a=5e-8
    data = list('%.10e'%a)
    Ici on limite arbitrairement à 10 chiffres significatifs. Puis identifier dans data :
    - la position de la virgule
    - la position de "e" puis la valeur de l'exposant (à repasser en int)
    - décaler la virgule sur la gauche autoant de fois que la valeur de l'exposant et rajouter des 0 au besoin
    - éliminer les 0 en trop après la virgule si besoin, donc en partant de la fin

    @tyrtamos : Je pense qu'il s'agit d'un besoin d'affichage dans un format spécifique pour des fins pédagogiques (en math ou physique je dirais)

  4. #4
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2014
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2014
    Messages : 35
    Par défaut
    Bonjour tyrtamos,

    Merci pour votre réponse.
    Mon problème était l'affichage d'un nombre décimal avec toutes les décimales.
    lg_53 y a parfaitement répondu.
    Bonne journée à vous.
    Pierre

  5. #5
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2014
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2014
    Messages : 35
    Par défaut
    Bonjour lg_53,

    Merci pour cette réponse, c'est exactement ce que je souhaitais faire.
    Sans vouloir abuser, connaîtriez-vous une méthode pour séparer les chiffres de la partie décimale d'un nombre par tranches de 3 (je sais faire pour un nombre entier) ?
    Encore merci.
    Bonne journée à vous.
    Pierre

  6. #6
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Citation Envoyé par pir2Paris Voir le message
    Bonjour lg_53,

    Merci pour cette réponse, c'est exactement ce que je souhaitais faire.
    Sans vouloir abuser, connaîtriez-vous une méthode pour séparer les chiffres de la partie décimale d'un nombre par tranches de 3 (je sais faire pour un nombre entier) ?
    Encore merci.
    Bonne journée à vous.
    Pierre
    Si vous voulez un résultat du type :
    3 , 000 000 02
    suffit de faire pareil que pour les entiers. Vous considérez la partie décimale de la même manière, et la seule chose qui change c'est que le sens de parcours (car vous voulez un groupe qui n'est éventuellement pas de 3, seulement à la fin, contrairement au entiers où là c'est au début). Vous pouvez présenter votre code qui fait ca pour les entiers et vos essais pour la partie décimale pour qu'on vous aiguille plus précisémment.

  7. #7
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2014
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2014
    Messages : 35
    Par défaut
    Citation Envoyé par lg_53 Voir le message
    Si vous voulez un résultat du type :
    3 , 000 000 02
    suffit de faire pareil que pour les entiers. Vous considérez la partie décimale de la même manière, et la seule chose qui change c'est que le sens de parcours (car vous voulez un groupe qui n'est éventuellement pas de 3, seulement à la fin, contrairement au entiers où là c'est au début). Vous pouvez présenter votre code qui fait ca pour les entiers et vos essais pour la partie décimale pour qu'on vous aiguille plus précisémment.
    Bonsoir lg_53,

    Voila comment je partage un nombre entier en tranches de trois chiffres.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print(" {:,}".format(1000000).replace(',',' '))
    Par contre, cela ne marche pas pour la partie décimale...
    Qu'entendez-vous par "la seule chose qui change c'est que le sens de parcours "
    Avez-vous une autre façon de faire ?
    Merci pour votre réponse.
    Bonne soirée.
    Pierre

  8. #8
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Ah oui ok.
    Je pensais que vous étiez plutot parti sur une solution comme celles là :

    https://www.developpez.net/forums/d6...ateur-millier/

    Et dans les solutions proposées dans ce lien vous voyez qu'on parcours la chaine de caractère que l'on a formé avec le nombre (sauf pour la dernière solution plus subtil, qui est récursive). Dans ce cas là, si vous faite exactement pareil pour la partie décimal, vous risquez d'obtenir des choses comme
    12 243 105,01 758
    au lieu de plutot
    12 243 105,017 58
    Mais là pour avoir la seconde possibilité, suffit de considérer la partie décimal à l'envers dans ces fonctions.

    Ceci dit on peut aussi se débrouiller sans avoir à changer le sens de parcours de la chaine de caractère dans la fonction, mais à l'extérieur (comme ça, on a pas de fonction à modifier et ca marcherait également avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print(" {:,}".format(1000000).replace(',',' '))
    Je reprends l'exemple du nombre 12243105,01758
    1) La partie décimal à l'envers : "85710"
    2) On applique l'affiche int : "85 710"
    3) Et on retourne à nouveau la chaine de caractère : "017 85"
    4) On fini pour rajouter ca à l'affichage de la partie entière avec une petite virgule entre les deux.

  9. #9
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2014
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2014
    Messages : 35
    Par défaut
    Bonjour lg_53,

    Merci pour votre réponse.
    Le script du lien que vous avez mis ne donne rien (?)

    Pourriez-vous, s'il vous plaît, détailler votre exemple ?
    Je reprends l'exemple du nombre 12243105,01758
    1) La partie décimal à l'envers : "85710" c'est l'utilisateur qui l'écrit à la main ?
    2) On applique l'affiche int : "85 710" j'ai compris mais, c'est un nombre
    3) Et on retourne à nouveau la chaine de caractère : "017 85" comment faire puisque 85 710 est un nombre ?
    4) On fini pour rajouter ca à l'affichage de la partie entière avec une petite virgule entre les deux.[/QUOTE]

    Encore merci.
    Bonne journée à vous.
    Pierre

  10. #10
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Citation Envoyé par pir2Paris Voir le message
    Le script du lien que vous avez mis ne donne rien (?)
    Ces scripts définissent des fonctions. Donc lorsque vous exécuter le script, vous ne voyez rien, simplement, vous avez à disposition maintenant la fonction qu'elle contient. A vous de vous d'y faire appel ensuite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AfficheEntier(1234567890,'.')
    Ensuite :
    1) La partie décimal à l'envers : "85710" c'est l'utilisateur qui l'écrit à la main ?
    ----> Non, c'est ton programme qui doit se charger de ça ! (sinon ca devient pas très pratique à utiliser...)
    2) On applique l'affiche int : "85 710" j'ai compris mais, c'est un nombre
    ----> Non. 85710 est un nombre. "85 710" est une chaine de caractère.
    3) Et on retourne à nouveau la chaine de caractère : "017 85" comment faire puisque 85 710 est un nombre ?
    ----> Pareil, c'est une chaine de caractère

    Regarde ci dessous la différence entre chaine de caractère et nombre. J'utilise repr pour montrer ce qui est dans la machine (et pas juste un visuel sympa de ce qui est dans la machine, ce que fait grosso modo print tout court, pour simplifier)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    a=123.456
    b='123.456'
    print(a)
    print(b)
    print(repr(a))
    print(repr(b))
    print(type(a))
    print(type(b))
     
    ### Ceci produit une erreur car tu essaie d'ajouter un nombre avec une chaine (et donc tu additionnes des patates avec des choux)
    # print(a+b)
     
    a1 = str(a)  ### a1 est la transformation de nombre vers string (chaine de caractère)
    b1 = float(b) ### b1 est la transformation de la chaine de caractère vers un nombre
    ### Et on confirme tout cela :
    print(a1)
    print(b1)
    print(repr(a1))
    print(repr(b1))
    print(type(a1))
    print(type(b1))
     
    # b1 étant la transformé de b en nombre, on peut l'utilisée comme un nombre
    print(a+b1)

  11. #11
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2014
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2014
    Messages : 35
    Par défaut
    Bonjour lg_53,

    Merci pour cette réponse, je vais regarder de plus près ce code afin de pouvoir l'adapter à mon problème.
    Bonne journée à vous.
    Pierre

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de calcul puissance négative
    Par trentks95 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 04/04/2013, 18h23
  2. [LG]Puissance et Indice
    Par luno2545 dans le forum Langage
    Réponses: 2
    Dernier message: 08/05/2004, 10h01
  3. [LG]fonction puissance en pascal
    Par le 27 dans le forum Langage
    Réponses: 8
    Dernier message: 13/12/2003, 23h21
  4. x² et puissance de x par récurrence
    Par olivieram dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 15/12/2002, 23h59
  5. Besoin d'aide pour l'I.A. d'un puissance 4
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 17h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo