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 23-11-2019 19:24:35

Cyril2571
Membre
Inscription : 23-11-2019
Messages : 1

Exercice python

Bonjour j'ai très peu de notions en python et je me demandais si quelqu'un aurait l'amabilité de m'aider à trouver la réponse numéro 2 ou du moins m'aider à la comprendre. Normalement vous pourrez visionner l'exercice juste ici (si ce n'est pas le cas signalez le moi) https://imagizer.imageshack.com/img923/1021/jj4Wvv.jpg
Merci d'avance pour l'aide et bonne fin de soirée

Dernière modification par Cyril2571 (23-11-2019 19:25:26)

Hors ligne

#2 23-11-2019 20:52:24

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 948

Re : Exercice python

Bonsoir,

Je comprends ton désarroi...
L'exercice est mal foutu, il y a plein de choses à rajouter pour que ta fonction fonctionne...
Je vais t'expliquer ça...
Je ne reviens pas sur $x = AM$ : c'est le diamètre du premier demi-disque orange (en partant de la gauche).
L'aire de ce demi-disque est : $\pi\dfrac{\left(\dfrac{x}{2}\right)^2}{2}= \dfrac{\pi x^2}{8}$

Le diamètre du 2nd demi-disque est $MB =8-x$
Par conséquent, son rayon est $\dfrac{8-x}{2}$
Son aire est donc  ....

Dans la fonction lunule(), qu'est-ce que a ? Et bien, normalement, a est la différence entre l'aire du demi disque de diamètre $AB=8$ (donc de rayon 4) et la somme des aires oranges, soit l'aire du lunule rose...
Pourquoi, en principe ?
Parce que je te propose de dire que a es la somme des aires des deux demi-disques...
On économise des calculs...
Parce que si l'aire rose est est la moitié de l'aire du demi-disque de diamètre AB, et bien, la somme des aires oranges aussi...

C'est bon, tu suis ?
En Python, la multiplication c'est * (2 * 3 donne 6)
En Python, la puissance c'est ** (2**3 donne 8)
En Python, le quotient décimal  c'est  /  (8/4  donne 2.0)
Alors la boucle while, elle fait quoi ?
while, c'est tant que
while a!=...:
C'est :
tant que a est différent de ...  de quoi ?
Bin, de la moitié de l'aire du demi-disque de diamètre [AB]...
Donc, tu as besoin de cette aire :
$\pi\times\dfrac{\left(\dfrac{8}{2}\right)^2}{2}= 8\pi$  et la moitié de cette aire est donc $4\pi$

Donc la première de ta boucle while devient :
while a!=pi*4:
Ensuite que se passe-t-il ?
Et bien tant que cette aire ne vaut pas 4.0, on ajoute 0.1 à $x$, on calcule l'aire a...
Lorsque a vaut 4.0, la boucle s'arrête et la fonction te retourne la valeur de x cherchée...
Après le return x
tu sautes une ligne (c'est plus lisible)
et tu écris (sans indentation, donc sur la même colonne que le d de def)
print(lunule(x))

Ainsi, quand tu lanceras le script,
le print(lunule de(x) fait appel à la fonction qui te renvoie x qui sera donc affiché...

Quand tu chercheras x pour que aire rose = 3/4 de l'aire $8\pi$,
puisque j'ai décidé que a n'était pas l'aire rose, mais la somme des orange, alors il faudra modifier la ligne
while a!=pi*4:  en while a!=pi*2
parce que 1-3/4 = 1/4  et 1/4 de $8\pi$ c'est $2\pi$...

Si tu as des questions, n'hésite pas : réponses demain.
J'arrête pour ce soir

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#3 23-11-2019 21:26:06

Cyril25719
Invité

Re : Exercice python

Je te remercie grandement d'avoir prit le temps de tout m'expliquer, ça m'est grandement utile, tes explications étaient vraiment très claires, j'ai réussi à comprendre alors que ça faisait des heures que je me cassais la tête. Tu m'as littéralement sauvé, c'est vraiment sympa d'aider les gens difficultés. Je te souhaitent une bonne fin de soirée et une bonne continuation.

#4 24-11-2019 10:32:51

Cyril25712
Invité

Re : Exercice python

Bonjour, le programme me semble bon et cohérent mais je n'arrive pas à afficher la valeur de x. En effet je peux mettre print("lunule", x,) que en dessous du return x, si je le mets à la ligne il me met que x n'est pas définit. Donc est ce qu'il y'aura une solution pour que la console affiche le résultat ? Et sinon encore merci pour les conseils d'hier

#5 24-11-2019 11:33:31

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 948

Re : Exercice python

Bonjour,

Je t'avais dit hier que le print (lunule()) était à placer après le return en sautant une ligne pour que le code soit plus lisible...
Toi tu veux écrire print("lunule", x,)
Si tu compares ma proposition et la tienne, tu verras que moi j'ai écrit lunule() et toi, "lunule"...
Qu'est-ce que ça change ?
Quand j'écris lunule() j'appelle la fonction
Quand tu écris "lunule", tu écris le mot (chaîne de caractères) "lunule", tu pourrais écrire "schtroumpf" que ça ne changerait rien...
Parce que "lunule" ente guillemets n'est qu'un mot, pas un appel à la fonction...

print(lunule()) pourrait être traduit par :
Afficher le résultat renvoyé par la fonction lunule()...

Alors que print("lunule",x)
pourrait se traduire par
Afficher le mot lunule, puis la valeur de x sur la même ligne...
Le problème c'est que ta fonction est restée au repos, tu ne l'as pas lancée... donc la variable x n'est pas connue.
D'où le message d'erreur :
Traceback (most recent call last):
  File "C:/Python35/Progs persos/v3.x/lunule.py", line 13, in <module>
    print("lunule",x)
NameError: name 'x' is not defined

Tu dois te mettre dans la tête que ta fonction lunule définit une pièce d'un vaste appartement, fermée à clé, et tant que tu n'as pas ouvert la porte, que tu n'es pas entré, tu ignores ce qu'elle contient !

Je te propose alors :
print ("L'aire de la lunule est égale à celle du demi-disque de diamètre [AB] pour x =",lunule())
Moi, j'obtiens :

L'aire de la lunule est égale à celle du demi-disque de diamètre [AB] pour x = 4.000000000000002

Tu remarqueras le 2 final...
C'est "normal", cela vient de la représentation des nombres à virgule par les ordis, qui sont convertis en binaire avant calcul et c'est là que ça se gâte...
Avec des nombres entiers, aucun pb.
Cela dit, Python possède un module decimal avec lequel j'ai calculé 20000 décimales exactes pour le nombre d'or en quelques secondes...
print(0.3-0.1) renvoie :
0.19999999999999998
alors que :
print(0.4-0.2) renvoie bien 0.2...

Mais on voit que le 2 final de 4.000000000000002 ne "tient pas de debout" : x varie de 0.1 en 0.1, donc ce 2 n'a rien à faire là.
On peut corriger cet effet "disgracieux" (et qui peut en perturber plus d'un : pour "rire", tu peux demander à ton prof pourquoi ce 2...) en arrondissant le résultat à un chiffre après la virgule.
C'est la fonction : round ( ). Syntaxe : round (nombre, qté de chiffres après la virgule)

Donc j'écris :
print ("L'aire de la lunule est égale à celle du demi-disque de diamètre [AB] pour x =",round(lunule(),1))
Résultat :

L'aire de la lunule est égale à celle du demi-disque de diamètre [AB] pour x = 4.0

Bon, voilà, tu tu as encore appris quelque chose...

@+

Dernière modification par yoshi (24-11-2019 12:40:27)


Arx Tarpeia Capitoli proxima...

Hors ligne

#6 24-11-2019 13:10:57

Cyril25714
Invité

Re : Exercice python

Re-bonjour j'avais suivi tes conseils en écrivant (lunule()) mais ça ne marchait pas non plus donc j'avais essayé autres chose. Ducoup j'ai réessayé, j'ai dû faire des erreurs quelque part et à force de refaire ça à marché grâce à ce que tu m'as dit. Bonne journée et encore une fois merci pour tout les conseils

Pied de page des forums