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

Calcul scientifique Python Discussion :

nombres en python


Sujet :

Calcul scientifique Python

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 42
    Par défaut nombres en python
    bonjour, j'aurai aimé avoir de l'aide pour un exercice:

    comment faire marcher un programme qui renvoie si 2013 est la somme de plusieurs nombres impairs consécutifs ?

    merci d'avance pour vos réponses (avec pyzo)

    gloria75

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 772
    Par défaut
    Salut,

    Citation Envoyé par gloria75 Voir le message
    comment faire marcher un programme qui renvoie si 2013 est la somme de plusieurs nombres impairs consécutifs ?
    Il faut d'abord écrire (en français) un algorithme qui fabrique ces N nombres impairs consécutifs, en fasse la somme et la compare à 2013. Comme c'est l'ordinateur qui travaille vous pouvez y aller assez bourrin: prendre les nombres impairs < 2013, les découper par tranches de N, en faire la somme, comparer, recommencer avec N+1.
    Après vous pouvez faire travailler vos connaissances en arithmétique et dire que si 2013 s'écrit comme la somme de N nombres impairs consécutifs i.e. existe-t-il un "p", tel que tel que p + p + 2 +.... = 2013 ou N*p = 2013 - 2*N ou (2013 - 2*N) / N = p.
    Après, il faut juste coder çà avec Python.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    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,

    si on veut que n + (n+2) + (n+4) = 2013, on a donc: 3*n+6=2013 et donc n=(2013-6)/3

    En conséquence:
    => 2013 a une solution si (2013-6) est divisible par 3, c'est à dire en Python: (2013-6)%3==0
    => et dans ce cas, les nb impairs cherchés sont n=(2013-6)//3=669, n+2=671 et n+4=673

    Edit: dans les conditions, il faut bien sûr que n soit impair, ce qui est le cas ici avec 2013, et de façon générale quand le nombre de départ sera impair!

  4. #4
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 42
    Par défaut
    Mais pourquoi a t on n+(n+2) jusqu'à (n+4) ?

  5. #5
    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
    Si X est la somme de 3 nombres impairs consécutifs, alors X = n + (n+2) + (n+4)
    Si X est la somme de 4 nombres impairs consécutifs, alors X = n + (n+2) + (n+4) + (n+6)
    Si X est la somme de 5 nombres impairs consécutifs, alors X = n + (n+2) + (n+4) + (n+6) + (n+8)
    Si X est la somme de p nombres impairs consécutifs, alors X = n + (n+2) + (n+4) + .... + (n+2*(p-1))

    n, c'est le plus petit nombre impair de la somme. Pour avoir les suivants, il suffit d'incrémenter de 2 à chaque fois.

  6. #6
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 42
    Par défaut
    Mais comment transcrire cela en python ?

  7. #7
    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
    On ne va pas faire ton exercice à ta place. wiztricks t'a indiqué comment procéder.

    Lache ton ordinateur, prend une feuille et un crayon, et commence par te demander comment tu ferais si tu résolvait ce problème à la main. Ensuite tu pourras transformer ton raisonnement en un algorithme.

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 772
    Par défaut
    Citation Envoyé par gloria75 Voir le message
    Mais comment transcrire cela en python ?
    Ben vous lancez la console Python et vous essayez de traduire...
    On saisit le nombre de départ dans une variable:
    On initialise le nombre d'entiers cherchés:
    On regarde le reste de la formule qu'on vous a donné:
    C'est pas nul, donc çà ne fonctionne pas, on passe au suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> k += 1
    >>> (n - 2*k) % k
    0
    Voilà qui est mieux et on trouve:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> (n - 2*k) // k
    669
    Maintenant, il y a d'autres solutions (avec des k plus grands). Donc il va falloir arranger çà dans une boucle qui regarde s'il y a une solution lorsqu'on incrémente k et qui s'arrête un jour.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 42
    Par défaut
    D'accord merci je vais essayer

  10. #10
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 42
    Par défaut
    J'utilise le "while" mais je ne sais pas quoi mettre comme condition dedans

  11. #11
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 772
    Par défaut
    Citation Envoyé par gloria75 Voir le message
    J'utilise le "while" mais je ne sais pas quoi mettre comme condition dedans
    Si le variant de la boucle est "k" (la variable incrémentée à chaque itération), vous pourriez essayer avec les premières valeurs de "k". La condition serait alors par exemple "k < 10". Cela vous permettra de montrer un code qui fonctionne et réfléchir à une condition plus appropriée.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  12. #12
    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,

    En fait, comme c'est souvent le cas, on peut faire plus simple en informatique, à condition de faire un peu plus de maths...

    On peut en effet éviter de chercher la solution avec une boucle de recherche: il suffit de généraliser ce que j'ai démontré plus haut avec la somme de 3 nombres impairs consécutifs.

    Avec les notations suivantes:
    n = le nombre de départ (n=2013 dans le 1er message)
    p = nombre de nombres impairs consécutifs dont la somme doit être égal à n
    i = le 1er nombre impair

    A noter que pour obtenir le nombre impair n, p est forcément un nombre impair! Il n'y a pas de solution pour p=2, 4, 6, ...

    Prenons p=5
    on doit avoir i + (i+2) + (i+4) + (i+6) + (i+8) = n
    ou p*i + p*(p-1) = n
    ou i = (n-p*(p-1))//p

    On a donc:
    Avec n et p: il y a une solution si (n-p*(p-1)) est divisible par p, c'est à dire (n-p*(p-1))%p==0 et dans ce cas, le 1er nombre des p nombres impairs est i=(n-p*(p-1))//p
    Et c'est tout!

    Application en Python:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (n-p*(p-1))%p==0:
        i = (n-p*(p-1))//p
        print("pour n =", n, "et p = ", p, "le 1er nombre de la liste est i = ", i)
    else:
        print("pour n =", n, "et p = ", p, "pas de solution")
    On peut aussi calculer la liste des p nombres impairs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    res = [i+k for k in range(0, 2*(p-1)+1, 2)]
    A titre d'exemples:
    => on trouve pour n=2013 et p=3: 1 solution [669, 671, 673]
    => on trouve pour n=2025 et p=15: 1 solution [121, 123, 125, 127, 129, 131, 133, 135, 137, 139, 141, 143, 145, 147, 149]

    Etc...

    Edit: petites corrections des formules dans le texte (mais le code est ok)

  13. #13
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 42
    Par défaut
    Ok tres bien, j'ai compris mais comment initialiser p avant de faire la boucle ?

  14. #14
    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,

    Citation Envoyé par gloria75 Voir le message
    Ok tres bien, j'ai compris mais comment initialiser p avant de faire la boucle ?
    Je ne sais pas à quoi tu réagis, mais comme ma solution n'a pas de boucle de recherche, ce n'est pas à moi de répondre...

    Cependant, cela fait déjà 9 jours que tu es sur ce sujet, tu as eu pas mal d'aides et plusieurs solutions, et tu poses encore des questions très très basiques (initialiser p? => "p=5"). Tu devrais regarder un bon cours sur Python comme celui de Swinnen: https://python.developpez.com/cours/apprendre-python3/. A défaut, tu vas perdre beaucoup de temps à buter sur chaque petit problème.

Discussions similaires

  1. Python décimal avec nombre spécial.
    Par Breizh Entertainment dans le forum Général Python
    Réponses: 4
    Dernier message: 16/01/2014, 14h36
  2. convertir un nombre en Lettre en python
    Par hirondellle dans le forum Général Python
    Réponses: 1
    Dernier message: 09/03/2012, 11h45
  3. Python et les grands nombres
    Par Alpha573 dans le forum Calcul scientifique
    Réponses: 4
    Dernier message: 23/01/2011, 11h46
  4. Réponses: 0
    Dernier message: 11/11/2007, 21h31
  5. programme python : conversion nombre en chaine de caracteres
    Par koala_64 dans le forum Général Python
    Réponses: 6
    Dernier message: 02/11/2007, 21h10

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