Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
Discussion fermée
#1 08-03-2019 14:38:47
- Nelcar
- Membre
- Inscription : 05-03-2019
- Messages : 159
exercice programmation python sphère
Bonjour,
je n'arrive pas à insérer une photo donc je vais faire du mieux
on empile des sphères, formant ainsi une pyramide de base carrée.
1) déterminer le nombre de sphères nécessaires pour constituer une pyramide de deux"niveaux"
j'ai fait le dessin et je me suis rendue compte que le premier niveau était 2*2 le deuxième 4*4 et ainsi de suite donc 41sphères
2) déterminer le nombre de sphères nécessaires pour constituer une pyramide de cinq "niveaux"
je fais donc 5*5+4*4+3*3+2*2+1*1=55 sphères
3)sachant qu'il faut 140 sphères pour construire une pyramide de sept "niveaux", déterminer le nombre de sphères nécessaires pour construire une pyramide de huit "niveaux"
je fais 8*8+7*7+6*6+5*5+4*4+3*3+2*2+1*1=204 sphères
4) En utilisant la structure ci-dessous, compléter le programme de la fonction nb_sphères d'argument un entier naturel non nul N et qui retourne le nombre B de sphères nécessaires pour constituer une pyramide comportant N"niveaux"
il est noté (en rouge c'est ce que j'ai rajouté)
def nb_sphères(N):
B=1
for i in range(1,N+1):
B=B*B
return(B)
je veux aller sur python pour vérifier donc je rajoute
nb_sphères(5)
print(nb_sphères(8))
j'ai une quantité de chiffres
Merci pour votre réponse
Hors ligne
#2 08-03-2019 15:34:41
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 401
Re : exercice programmation python sphère
Re,
Ton code :
def nb_sphères(N):
"B=1" # Pourquoi des guillemets ? Pourquoi 1 ?
for i in range(1,N+1):
B=B*B # Tu remplaces B par son carré... ça sert à quoi ?
return(B)
Si tu donnes N =0, tu ne construis pas de pyramide, tu n'as besoin de sphères... Donc B =0
Ensuite à chaque tour de boucle tu remplaces, s'il n'y a pas de guillemets, B par 1 * 1. Intérêt ?
Supposons que ta pyramide ait 5 niveaux, N =5.
Tu la construis en commençant par le bas, je pars de B=0 :
Niveau nb sphères par niveau cumul
(i) (B)
1 5 *5 B = B+5 * 5 =25
2 4 * 4 B = B+4 * 4 =25+16 =41
3 3 * 3 B = B+3 * 3 =41+9 = 50
4 2 * 2 B = B+ 2 * 2 = 50 +4= 54
5 1 * 1 B = B +1*1 =54+1 =55
Ce qu'il faut voir, c'est
1 ---> 5*5 1+ 5 =6
2 ---> 4*4 2 + 4 =6
3 ---> 3*3 3 + 3 =6
4 ---> 2*2 4 + 2 =6
5 ---> 1*2 1 + 5 =6
Allez, essaie de corriger ton code (moi, c'est fait...) ! Cherche un peu
@+
Hors ligne
#3 08-03-2019 16:03:12
- Nelcar
- Membre
- Inscription : 05-03-2019
- Messages : 159
Re : exercice programmation python sphère
Merci beaucoup,
ça y est ça marche, voilà ce que j'ai fait :
def nb_sphères(N):
B=0
for i in range(1,N+1):
B=i*i+B
return(B)
nb_sphères(5)
print(nb_sphères(8))
et dans la console je fais ce que tu m'as dit donc ici j'ai mis 11 et j'ai bien eu le résultat 505
Encore merci de tes explications, j'ai compris pour cette fois
M E R C I
Hors ligne
#4 08-03-2019 18:36:38
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 401
Re : exercice programmation python sphère
Re,
Oui, ça marche, n'empêche que je ne suis pas d'accord avec ton code...
En effet N représente le nombre de niveaux de la pyramide, laquelle se rétrécit de bas en haut... D'accord ?
Et i représente le n° du niveau atteint. D'accord ?
Donc dans la pyramide à 5 niveaux, je t'ai montré que :
niveau 1 : 5*5
niveau 2 seul : 4*4 niveau 1+2 : 41
niveau 2 seul : 3*3 niveau 1+2+3 : 50
Ta pyramide a un problème : elle commence par une 1 sphère, elle a la tête en bas...
La preuve :
>>> nb_sphères(5)
Niveau 1 seul : 1 Total du niveau 1 au niveau 1 : 1
Niveau 2 seul : 4 Total du niveau 1 au niveau 2 : 5
Niveau 3 seul : 9 Total du niveau 1 au niveau 3 : 14
Niveau 4 seul : 16 Total du niveau 1 au niveau 4 : 30
Niveau 5 seul : 25 Total du niveau 1 au niveau 5 : 55
55
>>> nb_sphères(7)
Niveau 1 seul : 1 Total du niveau 1 au niveau 1 : 1
Niveau 2 seul : 4 Total du niveau 1 au niveau 2 : 5
Niveau 3 seul : 9 Total du niveau 1 au niveau 3 : 14
Niveau 4 seul : 16 Total du niveau 1 au niveau 4 : 30
Niveau 5 seul : 25 Total du niveau 1 au niveau 5 : 55
Niveau 6 seul : 36 Total du niveau 1 au niveau 6 : 91
Niveau 7 seul : 49 Total du niveau 1 au niveau 7 : 140
140
Obtenu par :
B=0
for i in range(1,N+1):
B=B+i*i
print("Niveau",i,"seul :",i*i," Total du niveau 1 au niveau ",i,": ",B) # ligne de test
return(B)
Et mon code ?
>>> nb_sphères(5)
Niveau 1 seul : 25 Total du niveau 1 au niveau 1 : 25
Niveau 2 seul : 16 Total du niveau 1 au niveau 2 : 41
Niveau 3 seul : 9 Total du niveau 1 au niveau 3 : 50
Niveau 4 seul : 4 Total du niveau 1 au niveau 4 : 54
Niveau 5 seul : 1 Total du niveau 1 au niveau 5 : 55
55
>>> nb_sphères(7)
Niveau 1 seul : 49 Total du niveau 1 au niveau 1 : 49
Niveau 2 seul : 36 Total du niveau 1 au niveau 2 : 85
Niveau 3 seul : 25 Total du niveau 1 au niveau 3 : 110
Niveau 4 seul : 16 Total du niveau 1 au niveau 4 : 126
Niveau 5 seul : 9 Total du niveau 1 au niveau 5 : 135
Niveau 6 seul : 4 Total du niveau 1 au niveau 6 : 139
Niveau 7 seul : 1 Total du niveau 1 au niveau 7 : 140
140
Si tu es d'accord alors comment corriger ?
Je t'avais ajouté une colonne dont tu n'as pas tenu compte :
niveau 1 : 5*5 --> 1+5= 6
niveau 2 : 4*4 --> 2+4=6
niveau 3 : 3*3 --> 3+3 =6
niveau 4 : 2*2 --> 4+2 =6
niveau 5 : 1*1 --> 5+1=6
Tu peux tester 7...
Le nombre de sphères du niveau i n'est pas i*i mais (N+1-i)*(N+1-i)=(N+1-i)**2 (En Python ** c'est la puissance)
B=0
for i in range(1,N+1):
B=B+(N+1-i)**2
print("Niveau",i,"seul :",(N+1-i)**2," Total du niveau 1 au niveau ",i,": ",B) # ligne de test
return(B)
Le résultat final est bien le même. Donc bof ? Peut-être... Sauf que si c'était moi qui corrigeait ton code, je te ne te louperais pas, tu aurais droit à la remarque...
Maintenant, tout dépend du niveau en programmation de ton prof...
Tu fais ce que tu veux...
@+
Hors ligne
#5 08-03-2019 21:11:11
- Nelcar
- Membre
- Inscription : 05-03-2019
- Messages : 159
Re : exercice programmation python sphère
Merci YOSHI pour ta réponse
Je pense que tu as un bon niveau avec python. Moi je débute et j'ai bien du mal.
j'ai quand même compris ce que tu m'as dit pour les niveaux donc j'ai fait :
def nb_sphères(N):
B=0
for i in range(1,N+1):
B=B+(N+1-i)**2
return(B)
nb_sphères(5)
print(nb_sphères(8))
par contre je ne comprend pas cette partie :
print("Niveau",i,"seul :",(N+1-i)**2," Total du niveau 1 au niveau ",i,": ",B)
j'ai voulu recopier ça sur python et ça ne fonctionne pas
MERCI Beaucoup je comprend un peu mieux mais c'est encore dur pour moi surtout qu'au lycée aucune manipulation et je pense que notre prof n'est pas au top là dessus.
M E R C I
Hors ligne
#6 09-03-2019 08:57:25
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 401
Re : exercice programmation python sphère
RE,
Alors, là, c'est moi qui ne comprends pas, c'est pourtant du Python "standard"..
Ça fonctionne même en Python 2.6...
Quel message d'erreur obtiens-tu ? Recopie-le ici...
Sur Internet on peut tester ses programmes.
Tu copies :
B=0
for i in range(1,N+1):
B=B+(N+1-i)**2
print("Niveau",i,"seul :",(N+1-i)**2," Total du niveau 1 au niveau ",i,": ",B) # ligne de test
return(B)
nb_sphères(8)
Ici par exemple :
https://www.usborne.fr/activit%C3%A9s/a … -en-ligne/
Résultat :
Niveau 1 seul : 64 Total du niveau 1 au niveau 1 : 64
Niveau 2 seul : 49 Total du niveau 1 au niveau 2 : 113
Niveau 3 seul : 36 Total du niveau 1 au niveau 3 : 149
Niveau 4 seul : 25 Total du niveau 1 au niveau 4 : 174
Niveau 5 seul : 16 Total du niveau 1 au niveau 5 : 190
Niveau 6 seul : 9 Total du niveau 1 au niveau 6 : 199
Niveau 7 seul : 4 Total du niveau 1 au niveau 7 : 203
Niveau 8 seul : 1 Total du niveau 1 au niveau 8 : 204
Donc ça marche...
Ou http://codepad.org/JegS6G5k
Que fait cette ligne ?
Elle écrit alternativement du texte et des nombres...
Ca commence par
print("Niveau",i)
Si i vaut 1, on obtient :
Niveau 1
La virgule entre "Niveau" et i, sert à dire à Python : maintenant que tu as écrit le mot "Niveau", écris-moi la valeur de ce niveau et sur la même ligne..
Les textes doivent absolument être écrits entre guillemets.
Et comme je veux préciser que sur cette ligne et dans ce qui va suivre, je ne vais m'occuper que de niveau, très précisément, et pas de ce qu'il y a avant et après, je vais rajouter le mot seul (avec des guillemets) et sur la même ligne d'où la nouvelle virgule.
Donc, mon print est devenu :
print("Niveau",i,"seul :")
ce qui donne pour i = 1:
Niveau 1 seul :
Mais comme je veux aussi qu'il m'écrive le nombre de sphères que je peux compter à ce niveau, je dois encore préciser d'écrire à la suite (d'où la virgule) : (N+1-i)**2.
print("Niveau ",i,": seul :",(N+1-i)**2)
Si N vaut 8 et i vaut 3, la ligne écrit :
Niveau 3 seul : 36
Toi tu calculais i*i soit 3*3 = 9, en fait on pourrait dire, en mettant quand même la pyramide à l'endroit, que i*i, c'était le nombre de sphères du niveau i en comptant i depuis le sommet.
Donc tu comptais le nombre de sphères en allant du haut vers le bas, donc ton total était juste quand même...
Et le N+1-i ?
Les sphères sont posées dans un carré.
Au niveau 1, en bas sur le sol, la table... ce que tu veux avec 8 niveaux il y a 8 x 8, oui mais la boucle i démarre à 1...
Le N+1-i, tu pouvais la trouver toute seule, mais cette astuce, non :
B=0
for i in range(N,0,-1):
B=l*i
print("Niveau",i,"seul :",i**2," Total du niveau 1 au niveau ",i,": ",B) # ligne de test
return(B)
nb_sphères(8)
qui me donne :
Niveau 8 seul : 64 Total du niveau 1 au niveau 8 : 64
Niveau 7 seul : 49 Total du niveau 1 au niveau 7 : 113
Niveau 6 seul : 36 Total du niveau 1 au niveau 6 : 149
Niveau 5 seul : 25 Total du niveau 1 au niveau 5 : 174
Niveau 4 seul : 16 Total du niveau 1 au niveau 4 : 190
Niveau 3 seul : 9 Total du niveau 1 au niveau 3 : 199
Niveau 2 seul : 4 Total du niveau 1 au niveau 2 : 203
Niveau 1 seul : 1 Total du niveau 1 au niveau 1 : 204
Mais tu remarqueras que cette fois, j'ai demandé à Python de compter de 8 à 1 à l'envers et donc que le nombre de sphères est compté encore depuis l'étage 8, donc en partant du sommet...
Donc il fallait cette fois corriger le n° de l'étage, pour un affichage correct, en N+1-i...
Et retour à la case de départ, 2 complications au lieu d'une !!!
Donc on en revient à la question : pourquoi N+1-i ?
Avec N=8 :
Niveau 1 comment trouver 8 ? en multipliant par 8 ?
Non parce que
Niveau 2 il faut trouver 7,
Niveau 3, il faut faut trouver 6
.......
Niveau 5, il faut trouver 4
8 c'est 8+1 -1
7 c'est 8+1-2
6, c'est 8+1-3
....
4 c'est 8+1 -5
8, c'est N et le nombre à soustraire c'est i, d'où le N+1-i
Donc, maintenant, je veux aussi faire ajouter sur chaque ligne le nombre de sphères empilées depuis le bas, c'est ) dire du niveau 1 au niveau 1, 2, 3, 4, 5... Tu remarqueras que 1, 2, 3, 4, 5... c'est ici
Donc, je vais rallonger ma ligne, et ajouter du texte, et des nombres après une virgule que je mets après le (N+1-i)**2 :
print("Niveau",i,"seul :",(N+1-i)**2,"Total du niveau 1 au niveau :")
la phrase rajoutée ne changera pas quelle que soit la valeur de i, par contre le Niveau où j'arrive va varier de 1 à 8 soit i...
J'interromps me texte en fermant les guillemets et rajoute une virgule suivie de i :
print("Niveau",i,"seul :",(N+1-i)**2," Total du niveau 1 au niveau :", i)
ce qui écrirait avec N =8 et i =5 :
Niveau 1 seul : 9 Total du niveau 1 au niveau 5
(j'ai rajouté une espace - espace en informatique c'est féminin - avant Total pour mieux séparer)
Et maintenant dernière exigence, je veux qu'il m'écrive, ce total, c'est à dire B...
Comme ça ?
print("Niveau",i,"seul :",(N+1-i)**2," Total du niveau 1 au niveau :", i,B)
ce qui écrirait avec N =8 et i =5 :
Niveau 1 seul : 9 Total du niveau 1 au niveau 5 190
Mais c'est pô bo (comme dirait titeuf)
c'est pour ça qu'après le i, je rajoute encore une virgule suivie de " :' (c'est du texte), suivi d'une virgule puis de B.
La ligne est devenue :
print("Niveau",i,"seul :",(N+1-i)**2," Total du niveau 1 au niveau :", i," :",B)
qui écrit avec N =8 et i =5 :
Niveau 1 seul : 9 Total du niveau 1 au niveau 5 : 190
qui est plus "propre"...
On pourrait encore forcer tous le nombres d'une même colonne à être alignés verticalement sous les unités :
Niveau 2 seul : 49 Total du niveau 1 au niveau 2 : 113
Niveau 3 seul : 36 Total du niveau 1 au niveau 3 : 149
Niveau 4 seul : 25 Total du niveau 1 au niveau 4 : 174
Niveau 5 seul : 16 Total du niveau 1 au niveau 5 : 190
Niveau 6 seul : 9 Total du niveau 1 au niveau 6 : 199
Niveau 7 seul : 4 Total du niveau 1 au niveau 7 : 203
Niveau 8 seul : 1 Total du niveau 1 au niveau 8 : 204
Qu'est-ce que tu fais exactement quand tu dis que tu utilises la "console" ?
@+
Hors ligne
#7 09-03-2019 13:09:39
- Nelcar
- Membre
- Inscription : 05-03-2019
- Messages : 159
Re : exercice programmation python sphère
Bonjour Yoshi,
dans le programme j'ai fait ce que je t'ai dit
dans la console je mets :
>>>nb_sphères(7) entrée et j'ai 140
maintenant là je mélange tout.
j'ai fait ce que tu m'as dit c'est à dire :
def nb_sphères(N):
B=0
for i in range(1,N+1):
B=B+(N+1-i)**2
print("Niveau "i,"seul :"(N+1-i)**2,"Total du niveau 1 au niveau ",i,": ",B)
return(B)
nb_sphères(8)
et ça me met lorsque j'exécute : SyntaxError:invalid syntax
là je suis perdue complètement. Je voudrais faire au plus simple car je débute (seconde)
MERCI
Hors ligne
#8 09-03-2019 13:18:41
- tibo
- Membre expert
- Inscription : 23-01-2008
- Messages : 1 097
Re : exercice programmation python sphère
Salut,
Il manque une virgule entre le "Niveau " et i dans le print.
Hors ligne
#9 09-03-2019 13:27:10
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 401
Re : exercice programmation python sphère
Bonjour,
Cette ligne, tu n'es pas obligée de l'écrire : pas demandée par ton prof...
Elle n'est présente que pour venir à l'appui de ce que je t'ai expliqué : tu comptais les sphères par niveaux en partant du haut (c'est un petit détail)...
Donc, je répète : tu peux t'en passer...
Concernant le message d'erreur, il est clair (pour moi : erreur de syntaxe. En gros, faute de grammaire ou d'orthographe.
Dans ce que tu viens de m'écrire :
print("Niveau "i,"seul :"(N+1-i)**2,"Total du niveau 1 au niveau ",i,": ",B)
il y a bel et bien une faute : une virgule oubliée.
Je te la remets en rouge : print("Niveau ",i,"seul :"(N+1-i)**2,"Total du niveau 1 au niveau ",i,": ",B)...
As-tu bien compris ce que t'ai expliqué sur ce que fait la ligne et pourquoi elle montre que ce code compte les sphères en partant d'en bas et que le tien les comptait en partait du haut ?
Avoir compris, c'est être capable de réexpliquer à une copine, par exemple, ou... ton prof !
ok ?
@+
[EDIT] tibo était déjà passé par là !
Dernière modification par yoshi (09-03-2019 13:29:14)
Hors ligne
#10 09-03-2019 13:33:03
- Nelcar
- Membre
- Inscription : 05-03-2019
- Messages : 159
Re : exercice programmation python sphère
Re,
j'ai essayé de nouveau pas moyen
tant pis je laisse tomber
MERCI je vais faire ce que j'avais fait au début, le plus simple
M E R C I B E A U C O U P
Hors ligne
#11 09-03-2019 14:13:18
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 401
Re : exercice programmation python sphère
Re,
MERCI je vais faire ce que j'avais fait au début, le plus simple
Avec i*i ???
Alors, ça aura servi à quoi ce que je t'ai expliqué ?
Ça, il est impossible que ça ne marche pas :
def nb_sphères(N):
B=0
for i in range(1,N+1):
B=B+(N+1-i)*(N+1-i)
return(B)
Ça c'était ton premier code qui fonctionnait :
def nb_sphères(N):
B=0
for i in range(1,N+1):
B=B+i*i
return(B)
Qu'est-ce qui change par rapport à ce que je t'ai proposé ?
J'ai remplacé i*i par (N+1-i)*(N+1-i) c'est tout...
Pourquoi ça ne marcherait pas ?
Si ça ne marche pas, c'est ce que tu fais une faute de frappe...
Tu ne mettrais pas un l à la place du 1, par hasard ?
Lorsque tu as dans Python, ceci :
>>> |
avec la barre qui clignote
tu copies mon code depuis le d de def jusqu'à la parenthèse finale : )
Et tu fais coller à la place de la barre clignotante : cette fois la barre clignote après la parenthèse.
Maintenant,tu appuies 2 fois sur Entrée.
Et tu as de nouveau ;
>>> |
et tu tapes :
nb_sphères(8) et Entrée
Et dessous s'affiche : 204
J'aimerais bien une photo de ton écran.
Prends-en une photo.
Enregistre-la qq part.
Va sur http://www.cjoint.fr
Clique sur Parcourir
Recherche le nom de la photo
Une fois que tu l'as trouvé, sélectionne ce nom.
Clique sur ouvrir
Le nom est maintenant inscrit en dessous de l'image apparue.
Clique sur créer le lien cjoint
Recopie ce lien et colle-le dans une réponse...
@+
Hors ligne
#12 09-03-2019 19:44:10
- Nelcar
- Membre
- Inscription : 05-03-2019
- Messages : 159
Re : exercice programmation python sphère
Re,
j'ai essayé ce que tu m'as dit voilà ce que ça donne
https://www.cjoint.com/c/ICjsRn0hKbz
M E R C I
Hors ligne
#13 09-03-2019 19:50:32
- Nelcar
- Membre
- Inscription : 05-03-2019
- Messages : 159
Re : exercice programmation python sphère
re;
je n'y comprend plus rien de rien de refaire un essai et là (sans rien changer dans le programme) et dans la console ça a fonctionné
M E R C I
Hors ligne
Pages : 1
Discussion fermée







