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
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
Salut,
Vous avez fait quoi? Quelle difficultés rencontrez vous?
- W
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) )
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= ( !== ) ? : ;
Hello,
pour ton exercice, tu pourrais utiliser la fonction divmod :
exemple :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).
ami calmant, J.P
Code : Sélectionner tout - Visualiser dans une fenêtre à part centaine,reste = divmod(i,100)
Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko
Bonjour
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)
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]
j'ai déjà essayé la boucle for
mais ça ne fonctionne pas et pareil pour la condition if
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) )
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]
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
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]
Salut,
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:
ce qui est un bon exercice sur boucles et conditions.
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)
- W
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}")
Mes tutoriels
Avant de poster :
- F1
- FAQ
- Tutoriels
- Guide du développeur Delphi devant un problème
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]
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:
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 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)
Il suffit alors d'un simple test pour n'afficher que les nombres pour lesquels sum(L)==15
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]
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:
Ce qui affiche:
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)
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
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
Python a tout balayé, y compris les chiffres devenus inutiles de par le test vrai au cas 5
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
Si on appelle ça sans les crochets
Dès que Python a trouvé un cas qui valide l'ensemble, il arrête de générer.
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
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]
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)
Bonjour,
Bien vu... même si ta solution est limitée aux correspondances avec un multiple de 3.Envoyé par VinsS
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager