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 :

Exercice : afficher tous les nombres entre 0 et 1000 dont la somme des chiffres est égale à 15


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2022
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Exercice : afficher tous les nombres entre 0 et 1000 dont la somme des chiffres est égale à 15
    Bonjour,
    J'aide du mal avec cet exercice, quelqu'un pourrait m'aider svp ?


    ecrire une procedure en Python qui affiche tous les nombres entre 0 et 1000 dont la somme de ses centaines, dizaines et unites est egale a 15. Exemple : 168 => 1+6+8 = 15

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Vous avez fait quoi? Quelle difficultés rencontrez vous?

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

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2022
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    j'ai pu faire la procédure de la somme de ses centaines, dizaines et unites mais mon probleme c'est comment affiche tous les nombres entre 0 et 1000

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def somme(n):
        if n // 10 == 0:
            return n
        else:
            return n % 10 + somme( n // 10 )
     
    print( somme (12) )

  4. #4
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 101
    Points : 4 446
    Points
    4 446
    Par défaut
    bonjour

    Pour nous présenter du code, il faut impérativement utiliser le bouton CODE # sinon la présentation est cassée

    Si ta fonction somme() fonctionne alors tu as fait le plus difficile, je suppose que tu as déjà vu range et for ...

    note: Etrange, tu écris une fonction très difficile pour un débutant et tu bloques sur la partie la plus simple...
    $moi= ( !== ) ? : ;

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par zakaria_eco Voir le message
    j'ai pu faire la procédure de la somme de ses centaines, dizaines et unites mais mon probleme c'est comment affiche tous les nombres entre 0 et 1000
    Ce n'est pas très différent de faire une boucle qui affiche les nombre de 0 à 10... Et c'est dans les premiers chapitres de tous les tutos.
    note: pour moi, on apprend les fonctions récursive après les boucles... vous avez loupé quoi?

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

  6. #6
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    Hello,
    pour ton exercice, tu pourrais utiliser la fonction divmod :
    Fonction divmod() – Python
    La fonction divmod() renvoie un tuple contenant le quotient et le reste lorsque l'argument 1 (divident) est divisé par l'argument 2 (diviseur).
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    centaine,reste = divmod(i,100)
    ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  7. #7
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par zakaria_eco Voir le message
    j'ai pu faire la procédure de la somme de ses centaines, dizaines et unites
    Pas vraiment besoin de fonction récursive pour ça. Te suffisait de gérer les centaines, les dizaines et les unités (bref 3 lignes, ou 3 groupe de 2 lignes)

    Citation Envoyé par zakaria_eco Voir le message
    mais mon probleme c'est comment affiche tous les nombres entre 0 et 1000
    Ben une boucle (for, while au choix)...
    Donc tu fais une boucle sur une variable n et quand somme(n) = 15 alors tu affiches n
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2022
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    j'ai déjà essayé la boucle for
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     n = 1000 
     for x in range(0,n+1):
      def somme(x):
        if n // 10 == 0:
            return n
        else:
            return n % 10 + somme( n // 10 )
     
     print( somme (13) )
    mais ça ne fonctionne pas et pareil pour la condition if

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par zakaria_eco Voir le message
    j'ai deja essayé la boucle for
    Votre boucle "for" n'a pas a définir la fonction "somme" à chaque itération.
    Ouvrez un tuto. apprenez les bases et essayer de comprendre ce que vous demandez à Python d'exécuter plutôt que "d'essayer" pour constater que çà ne marche pas.

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

  10. #10
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par zakaria_eco Voir le message
    mais ça ne fonctionne pas et pareil pour la condition if
    Ouais, la boucle est ok. Mais pour le reste...
    Tu sais ce qu'est une fonction? Comment on s'en sert? Tu as lu ce que j'ai écrit "...et quand somme(n) = 15 alors tu affiches n" ? T'es vraiment développeur informatique?
    A quel moment tu appelles la fonction en lui passant le nombre à évaluer???
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  11. #11
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    870
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 870
    Points : 1 522
    Points
    1 522
    Billets dans le blog
    4
    Par défaut
    Bonjour,
    Perso je comprends l'ennoncé comme il suit: écrire une procédure qui prend pour argument k et qui affiche tous les nombres compris de 0 à
    999 dont la somme des centaines, dizaines, unités est égale à k.

    à noter que pour k doit ne pas excéder 27 (9+9+9) pour qu'il puisse y avoir des correspondances.

    Le programme peut se construire autour de 3 boucles imbriquées : une pour les centaines, une pour les dizaines et une autre pour les unités.
    Puis tester si la somme des centaines, dizaines, unités des nombres obtenus est égale à k....
    En utilisant itertools.product:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    import itertools
    def somme(n):
            for x,y,z in itertools.product(range(10), range(10), range(10)):
                    if x + y + z == n:
                            print(x*100 + y*10 + z, end=" ")
     
    somme(15)
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  12. #12
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Hominidé Voir le message
    Le programme peut se construire autour de 3 boucles imbriquées : une pour les centaines, une pour les dizaines et une autre pour les unités.
    Puis tester si la somme des centaines, dizaines, unités des nombres obtenus est égale à k....
    Effectivement, Python étant assez plein de ressources en tous les sens, on en trouve toujours qui font le travail à votre place.
    Toutefois là je suis quand-même du côté de la solution du PO. Je pense qu'il s'agit d'un exercice d'apprentissage, exercice destiné à lui apprendre à créer une fonction qui effectue un certain travail, puis à appeler cette fonction sur différents éléments pris dans une boucle.
    A noter que cet exercice ressemble à l'exercice "cul de chouette" qu'on a proposé récemment dans la section "exercices" du forum.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  13. #13
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par Hominidé Voir le message
    Le programme peut se construire autour de 3 boucles imbriquées : une pour les centaines, une pour les dizaines et une autre pour les unités.
    Puis tester si la somme des centaines, dizaines, unités des nombres obtenus est égale à k....
    Ce qui est difficile pour aider le PO est qu'il masque son niveau derrière une fonction récursive alors qu'il semble ignorer les boucles.

    Après, c'est un problème suffisamment simple pour être codé avec un Python "minimal".

    On peut partir avec 3 variables c, d, u (pour centaines, dizaines,...) initialisées à 0 et entrer dans une boucle qui incrémente les unités, teste si on est arrivé à 10 pour incrémenter les dizaines et remettre à zéro le compteur des unités, pareil pour les centaines,...

    Ce qui donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    c = d = u = 0
    while not (c == 9 and d == 9 and u == 9):
        u += 1
        if u == 10:
            d += 1
            u = 0
        if d == 10:
            c += 1
            d = 0
        if (c + d + u) == 15:
            print(c, d, u)
    ce qui est un bon exercice sur boucles et conditions.

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

  14. #14
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 667
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 667
    Points : 5 235
    Points
    5 235
    Par défaut
    Vu l'énoncé du problème, je pense que le PO est sensé travailler sur le modulo.
    Avec uniquement uniquement les bases des chapitre 3 et 4 de la documentation on arrive à ce genre de chose.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for i in range(1000):
        c = int(i/100) % 10
        d = int(i/10) % 10
        u = i % 10
        total = c + d + u
        if (total == 15):
            print(f"{i} => {c} + {d} + {u} = {total}")

  15. #15
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    On peut partir avec 3 variables c, d, u (pour centaines, dizaines,...) initialisées à 0 et entrer dans une boucle qui incrémente les unités, teste si on est arrivé à 10 pour incrémenter les dizaines et remettre à zéro le compteur des unités, pareil pour les centaines,...
    Peut-être ne gérer le cas d == 10 que dans le cas où il a changé...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  16. #16
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Peut-être ne gérer le cas d == 10 que dans le cas où il a changé...
    Je l'ai enlevé avec des tas d'autres choses pour faire débutant qui débute...
    J'imagine que dés que ça tombe en marche on ne touche plus à rien tellement on a transpiré pour en arriver là.

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

  17. #17
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    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 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Plutôt que de faire des calculs de division ou de modulo, il existe une solution de simple comptage des chiffres du nombre, en représentant ces chiffres dans une liste, avec chaque élément de la liste entre 0 et 9 (bornes comprises).
    Par exemple, le nombre n=548 sera représenté par la liste L=[5, 4, 8]. Mais le nombre n ne sert qu'à arrêter les calculs, et toutes les opérations d'incrémentation sont faites directement sur la liste L.

    Exemple:

    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
    n = 0
    nmax = 1000
    L = [0]
    while n<nmax:
        i = len(L)-1 # index du chiffre le plus à droite
        while i>=0:
            L[i] += 1
            if L[i]==10:
                L[i] = 0
                if i==0:
                    L = [1] + L # on ajoute un chiffre à gauche à la liste L
                    break
            else:
                break # pas de retenue
            i -= 1 # passer au chiffre immédiatement à gauche
        n += 1 # passer au nombre suivant
     
        print(n, L)
    L'exécution donne (extrait):

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    1 [1]
    2 [2]
    3 [3]
    4 [4]
    5 [5]
    6 [6]
    7 [7]
    8 [8]
    9 [9]
    10 [1, 0]
    11 [1, 1]
    12 [1, 2]
    13 [1, 3]
    14 [1, 4]
    15 [1, 5]
    16 [1, 6]
    17 [1, 7]
    18 [1, 8]
    19 [1, 9]
    20 [2, 0]
    21 [2, 1]
    22 [2, 2]
    23 [2, 3]
    24 [2, 4]
    25 [2, 5]
    26 [2, 6]
    27 [2, 7]
    28 [2, 8]
    29 [2, 9]
    30 [3, 0]
    31 [3, 1]
    ...
    ...
    973 [9, 7, 3]
    974 [9, 7, 4]
    975 [9, 7, 5]
    976 [9, 7, 6]
    977 [9, 7, 7]
    978 [9, 7, 8]
    979 [9, 7, 9]
    980 [9, 8, 0]
    981 [9, 8, 1]
    982 [9, 8, 2]
    983 [9, 8, 3]
    984 [9, 8, 4]
    985 [9, 8, 5]
    986 [9, 8, 6]
    987 [9, 8, 7]
    988 [9, 8, 8]
    989 [9, 8, 9]
    990 [9, 9, 0]
    991 [9, 9, 1]
    992 [9, 9, 2]
    993 [9, 9, 3]
    994 [9, 9, 4]
    995 [9, 9, 5]
    996 [9, 9, 6]
    997 [9, 9, 7]
    998 [9, 9, 8]
    999 [9, 9, 9]
    1000 [1, 0, 0, 0]
    Il suffit alors d'un simple test pour n'afficher que les nombres pour lesquels sum(L)==15

    L'un des avantages de cette solution est qu'elle est générale vis à vis de la taille du nombre: 43982078 => [4, 3, 9, 8, 2, 0, 7, 8]


    Pour le fun, il existe aussi une solution simple en passant par les chaînes de caractères:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for n in range(0, 1001):
        s = sum([int(car) for car in str(n)]) 
        if s==15:
            print(n)
    Ce qui affiche:

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    69
    78
    87
    96
    159
    168
    177
    186
    195
    249
    258
    267
    276
    285
    294
    339
    348
    357
    366
    375
    384
    393
    429
    438
    447
    456
    465
    474
    483
    492
    519
    528
    537
    546
    555
    564
    573
    582
    591
    609
    618
    627
    636
    645
    654
    663
    672
    681
    690
    708
    717
    726
    735
    744
    753
    762
    771
    780
    807
    816
    825
    834
    843
    852
    861
    870
    906
    915
    924
    933
    942
    951
    960
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  18. #18
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Plutôt que de faire des calculs de division ou de modulo, il existe une solution de simple comptage des chiffres du nombre, en représentant ces chiffres dans une liste, avec chaque élément de la liste entre 0 et 9 (bornes comprises).
    Par exemple, le nombre n=548 sera représenté par la liste L=[5, 4, 8]. Mais le nombre n ne sert qu'à arrêter les calculs, et toutes les opérations d'incrémentation sont faites directement sur la liste L.
    J'aime bien voir tes solutions, elles ont un côté super fun. Malheureusement le débutant lui je pense qu'il aura du mal à voir ledit côté (enfin on ne reste généralement pas débutant longtemps)
    Attention à l'écriture sum([int(car) for car in str(n)]) car les crochets intérieurs sont inutiles => sum(int(car) for car in str(n)).
    Ca peut paraitre anodin mais en réalité cela a plus d'importance qu'il n'y parait, car si on rajoute ces crochets, Python commence par générer la liste et ceci même dans le cas où cette liste ne serait pas entièrement utile.

    Exemple: une fonction simple qui checke un nombre
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def verif(n):
    	print("vérif ", n)
    	return n == 5

    Si on appelle ça avec les crochets de génération
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >>> print(any([verif(x) for x in range(10)]))
    vérif  0
    vérif  1
    vérif  2
    vérif  3
    vérif  4
    vérif  5
    vérif  6
    vérif  7
    vérif  8
    vérif  9
    True
    Python a tout balayé, y compris les chiffres devenus inutiles de par le test vrai au cas 5

    Si on appelle ça sans les crochets
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> print(any(verif(x) for x in range(10)))
    vérif  0
    vérif  1
    vérif  2
    vérif  3
    vérif  4
    vérif  5
    True
    Dès que Python a trouvé un cas qui valide l'ensemble, il arrête de générer.

    Ok pour le sum() ça n'a pas réellement d'importance mais quand on prend une habitude elle s'imposera alors aussi dans les cas où ça en aura

    PS: s = sum(map(int, str(n))) (j'adore le map )
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  19. #19
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Ce qui me surprend c'est que toutes vos solutions testent tous les nombres de 0 à 1000.

    Le plus petit nombre possible est 69 et le plus élevé est 960, si la somme des chiffres doit être égale à 15 c'est donc un nombre divisible par 3.

    Il n'y a donc que 311 chiffres à vérifier.

    Non ?

    Mes deux cents:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for i in range(69, 961):
        if not i % 3:
            if sum([int(n) for n in str(i)]) == 15:
                print(i)

  20. #20
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    870
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 870
    Points : 1 522
    Points
    1 522
    Billets dans le blog
    4
    Par défaut
    Bonjour,
    Citation Envoyé par VinsS
    Il n'y a donc que 311 chiffres à vérifier.
    Bien vu... même si ta solution est limitée aux correspondances avec un multiple de 3.

    Sinon inutile de construire une liste -->:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sum(int(n) for n in str(i))
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. afficher tous les dates entre deux périodes
    Par maximath dans le forum Access
    Réponses: 5
    Dernier message: 05/11/2020, 18h51
  2. Xcas : tous les nombres entre 1 et 100
    Par jfk10 dans le forum Général Python
    Réponses: 9
    Dernier message: 10/08/2019, 16h09
  3. [TPW] Afficher tous les nombres parfaits dans l'intervalle 1..99999
    Par fatma2013 dans le forum Turbo Pascal
    Réponses: 1
    Dernier message: 30/10/2013, 18h45
  4. [Exercice] Afficher tous les nombres
    Par zlatino dans le forum Pascal
    Réponses: 7
    Dernier message: 05/03/2009, 19h42
  5. Réponses: 14
    Dernier message: 25/11/2007, 18h32

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