Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(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 :

def nb_sphères(N):
    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)

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)  # 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 :

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)  # 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 :

def nb_sphères(N):
    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  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
 

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

Pied de page des forums