Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#26 22-12-2020 12:31:56
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 385
Re : [Python]
Bonjour,
Déjà dit dans cette discussion : http://www.bibmath.net/forums/viewtopic.php?id=13338
Tu te connectes à https://www.cjoint.com, tu suis les instructions, tu déposes (upload) ton document, tu récupères le lien qu'on te donne et le mets sans ton prochain post : on pourra ainsi consulter ta photo.
@+
Hors ligne
#27 22-12-2020 12:52:10
- Lisou30000
- Membre
- Inscription : 06-12-2020
- Messages : 54
Re : [Python]
Hors ligne
#28 22-12-2020 12:55:59
- Lisou30000
- Membre
- Inscription : 06-12-2020
- Messages : 54
Re : [Python]
J’avais donc à compléter après (b-a)
J’ai donc mis 10^-p puisque on me demande que les variables a et b donnent un encadrement de pi d’au plus 10^-1
Puis après return j’hésite j’ai mis [a,b]
Hors ligne
#29 22-12-2020 15:53:01
- Lisou30000
- Membre
- Inscription : 06-12-2020
- Messages : 54
Re : [Python]
>10^-1 pardon
Hors ligne
#30 22-12-2020 16:40:25
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 385
Re : [Python]
Salut,
J'espère que c'est toi l'auteur de ce code, ou que tu l'as mal recopiés...
Non, il ne fonctionnera pas, mais tu vas déclencher des messages d'erreur.
1. Il te faut commencer par importer sin, cos et radians :
from math import sin, tan, radians
2. Je reprends ton 1er morceau de code.
from math import sin, tan, radians
def api(p):
n=4
a=n*sin(radians(180/n))
b=n*tan(radians(180/n))
while abs(b-a)>10**-p:
n+=1
a=n*sin(radians(180/n))
b=n*tan(radians(180/n))
return [a,b]
En regardant bien ce que tu as envoyé, il me semble que le while est indenté d'un caractère par rapport au d de def api(p).
Je t'ai déjà dit que tu es libre de be pas indenter à 4 caractères (recommandation pourtant des programmeurs de Python), tu peux choisir d'indenter à 1,2,3, 4... 8 ... 12... caractères, mais tu t'y tiens !!! Tu ne mélanges pas, tu choisis et tu restes avec, tout le long de ton programme.
Si tu as choisi 4, soit le while est indenté de 4, soit pas du tout ce qui, vu ce qui le suit, est probablement ce que tu voulais faire...
Analysons.
n=4
On encadre le périmètre du cercle entre le périmètre d'un carré (polygone régulier à 4 côtés) inscrit celui carré exinscrit.
Après simplification, l'encadrement devient : $n\times \sin (radians(180/n))\leqslant \pi \leqslant n\times \tan(radians(180/n))$
Que font les lignes entre def et while ?
Et bien elles calculent
a = $n\times \sin (radians(180/n))$ et $b =n\times \tan(radians(180/n))$
Pourquoi faire ?
- Pour que la boucle while qui suit puisse calculer |b-a| : ce qui précède est chargé de fournir une valeur de b et une valeur de a pour démarrer... sinon Python te dira : abs(b-a) ? Erreur, je ne connais ni a ni b...
(tu pourrais partir avec a =0 et b=1 ça ne changerait rien)
Donc
while abs(b-a)>10**-p:
Tant que la valeur absolue de l'écart entre les bornes inférieure a et supérieure b de l'encadrement est supérieure à $10^{-p}$, : alors
-tu augmentes le nombre de côté de 1 (c'est le n=n+1)
- tu recalcules a
- tu recalcules b
Et tu sors tout de suite de la boucle, pourquoi ?
Parce que le return est dans ta boucle : or il devrait être en sortie de boucle pour retourner a et b au moment ou |b-a| sera devenu inférieur ou égal à $10^{-p}...
Problème à régler : le return doit être aligné verticalement avec le while.
Donc on revient à ce que j'ai dit plus haut : le while est mal indenté !
Il devrait être indenté de 4 caractères :
def api(p):
n=4
a=n*sin(radians(180/n))
b=n*tan(radians(180/n))
while abs(b-a)>10**-p:
Mais alors après, il te faut réindenter les 3 lignes suivantes :
def api(p):
n=4
a=n*sin(radians(180/n))
b=n*tan(radians(180/n))
while abs(b-a)>10**-p:
n=n+1
a=n*sin(radians(180/n))
b=n*tan(radians(180/n))
Et le return aligné avec while :
from math import sin, tan, radians
def api(p):
n=4
a=n*sin(radians(180/n))
b=n*tan(radians(180/n))
while abs(b-a)>10**-p:
n+=1
a=n*sin(radians(180/n))
b=n*tan(radians(180/n))
return [a,b]
Tu retournes une liste à deux éléments : pas de pb...
Voyons la suite...
p=int(input("On cherche un encadrement de Pi à 10^-p")). Quelle est la valeur de p" ?))
Rien que sur cette ligne il y a 3 erreurs et un manque de clarté --W> Paf ! Messages d'erreurs.
Ça : p=int(input("On cherche un encadrement de Pi à 10^-p")) c'est correct
Mais hélas tu as écrit :
p=int(input("On cherche un encadrement de Pi à 10^-p")).
Rien que ce point après les parenthèses déclenchera un message d'erreur...
Oui, mais je commence une autre phrase...
Alors pourquoi n'y a-t-il pas de guillemets devant : Quelle est la valeur de p ?" alors qu'il y en a un à la fin ?
Mais, parce que c'est la suite de la phrase...
Dans ce cas, tu l'écris à la suite de la première comme ça :
p=int(input("On cherche un encadrement de Pi à 10^-p. Quelle est la valeur de p ? "))
Ensuite :
print ("On a utilisé deux polygones réguliers à, l[0], "côtés")
Deux messages d'erreurs :
1. Les guillemets vont par deux : là, il y en a 3, il en manque donc un...
Où ?
Pour répondre demande-toi ce qu'est l[0]... Réponse : c'est le nombre de côtés du polygone...
Donc, c'est un nombre, mais les guillemets délimitent du texte.
"côtés", c'est du texte.
"On a utilisé deux polygones réguliers à : c'est visiblement du texte mais l[0] c'est un nombre, dont le guillemet manquant est entre les 2...
Avant ou après la virgule ? La ,virgule en Python sépare deux éléments affichés à l'écran par un e espace :
print("2 + 2","=", 4) qu'on pourrait écrire print("2 + 2 =",4) affiche 2 + 2 = 4.
Donc, avant :
print ("On a utilisé deux polygones réguliers à", l[0], "côtés")
2. print(l[1],"<pi<", l[2])" Encore un message d'erreur ! Qu'est-ce qu'il fait là le " final ?
Le print est correct. Le guillemet est à supprimer...
3. Si je lis bien, tu affiches l|0], l[1] et l[2]... Mais ça fait 3 valeurs, et toi tu en retournes combien ? 2 seulement !
4. C'est bon maintenant ? Nan, pas encore.
Imagine que tu es cheffe d'entreprise tu commandes un boulot à un sous-traitant nommé api (ta fonction).
Et lorsque ce sera fait, il mettra le travail (l[0], l[1] et l[2]) à ta disposition sans que tu aies le besoin de te déranger.
Et toi (Python) tu râles parce que ce que tu attendais, tu ne l'as pas...
La question est : as-tu envoyé quelqu'un le chercher ? Et la réponse est : NON !
La fonction te retourne le nombre de côtés nommé n, la borne inférieure et la borne supérieure de l'encadrement dans un paquet (une liste).
L'as-tu récupéré ? Non !
Lui as-tu envoyé ta commande ? Non ? Pourquoi ? Nulle part le programme ne transmet l'ordre de travail à la fonction api...
Ou y a-t-il la mention api(p) ? (à part dans la déclaration de la fonction). Nulle part ? Comment veux-tu afficher quoi que soit ?
Il te manque une ligne entre p=int(input... et le premier print().
Pourquoi là ? Tu vas appeler ta fonction en lui passant le paramètre p
C'est là qu'il faut donner l'ordre de faire le travail à la fonction avec la la précision p voulue (et donc il faut que tu aies déjà choisi sa valeur) et récupérer ce travail, dans une liste appelée l (puisque tu afficheras les 3 valeurs qu'elle contient).
C'est très simple : l=api(p)
qui veut dire : Allo api ? Fais le travail avec la précision p et je récupère le résultat de ton travail dans l...
4. Le p=int(input... et les print doivent être sur des lignes différentes !
Bon, bin, tu as du pain sur la planche...
Moyennant quoi on on obtient :
On cherche un encadrement de Pi à 10^-p. Quelle est la valeur de p ?10
On a utilisé deux polygones réguliers à 393741 côtés
3.1415926535564602 <pi< 3.1415926536564593
Je t'ai mis en couleur le premier chiffre qui change...
@+
Hors ligne
#31 22-12-2020 16:57:59
- Lisou30000
- Membre
- Inscription : 06-12-2020
- Messages : 54
Re : [Python]
Je viens de comprendre mais on me donne cette fonction c’est prof qui me l’a donné je vous la remet c’est def api et il fut juste que je complète où il y a des pointillés
Hors ligne
#32 22-12-2020 16:59:23
- Lisou30000
- Membre
- Inscription : 06-12-2020
- Messages : 54
Re : [Python]
Hors ligne
#33 22-12-2020 17:00:28
- Lisou30000
- Membre
- Inscription : 06-12-2020
- Messages : 54
Re : [Python]
Je comprends que après le return il faut que je mette trois valeurs
Hors ligne
#34 22-12-2020 17:01:29
- Lisou30000
- Membre
- Inscription : 06-12-2020
- Messages : 54
Re : [Python]
Mais je n’arrive pas à savoir lesquelles ?
Hors ligne
#35 22-12-2020 19:35:02
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 385
Re : [Python]
B'soir,
Toutes les fautes que j'ai corrigées sont donc des fautes de recopie ? Il faut être bien plus attentive et concentrée.
Ta nouvelle image correspond tout à fait à ce que j'ai écrit chez moi.
C'est ce que t'a donné ta prof ?
Pour affichage tu as besoin de l[0], l[1] et l[2]
Et tu as à compléter le return [...,...,...].
En 2e et 3e position, tu as dans l'ordre l[1] et l[2]
Puisqu'on commence à 0 :
0, 1, 2 sont respectivement les 1ere, 2e et 3e position
*Tu vois bien dans le dernier print que l[1], c'e'st a et l[2] c'est b...
Alors qu'est ce que l[0] ? C'est écrit dans ton code, ici :
print("On a utilisé deux polygones réguliers à", l[0], "côtés")
De plus je te l'ai dit ici :
Pour répondre demande-toi ce qu'est l[0]... Réponse : c'est le nombre de côtés du polygone...
Et dans ta fonction, c'est quoi le nb de côtés du polygone ? Et bien c'est : n.
Donc :
return [n,a,b]
Voilà mon code :
from math import sin, tan, radians,
def api(p):
n=4
a=n*sin(radians(180/n))
b=n*tan(radians(180/n))
while abs(b-a)>10**-p:
n+=1
a=n*sin(radians(180/n))
b=n*tan(radians(180/n))
return [n,a,b]
p=int(input("On cherche un encadrement de Pi à 10^-p. Quelle est la valeur de p ?"))
l=api(p)
print ("On a utilisé deux polygones réguliers à", l[0], "côtés")
print (l[1],"< pi <",l[2])
Tu vois que c'est bien ça.
Je t'ai expliqué dans le détail la raison d'être de chaque ligne et ce qu'elle fait et pourquoi : je souhaitais que tu comprennes plutôt que de recopier bêtement sans comprendre.
Bon, je ne sais pas ce que vous avez eu comme cours de Python, mais ce n'était pas si simple que ça à faire pour un débutant surtout si on le lui a déjà expliqué et qu'il n'a toujours pas compris...
Par contre, je ne vois pas à quoi correspond ce qui suit dans ton image.
Quel rapport avec ce que tu viens de faire ?
@+
Hors ligne
#36 22-12-2020 19:55:42
- Lisou30000
- Membre
- Inscription : 06-12-2020
- Messages : 54
Re : [Python]
Merci beaucoup oui je n’ai pas un bon niveau en python et mon prof me donne quand même ds exos compliqué, merci beaucoup. Mon prof m’a envoyé plusieurs programmes coorespondants à plusieurs exercices donc ça n’a strictement rien avoir.
Hors ligne
#37 22-12-2020 20:50:17
- Lisou30000
- Membre
- Inscription : 06-12-2020
- Messages : 54
Re : [Python]
J’ai un petit problème puisqu’on me demande de rentrer la valeur de p je mets 6 puisqu’on me demande ceci dans mon énonce mais dans la console python je marque donc def api(6) et on ne m’affiche rien
Hors ligne
#38 22-12-2020 22:14:25
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 385
Re : [Python]
Bonsoir
non, il faut bien garder def api(p):
Si tu mets def api(6): ça ne sert plus à rien de demander de choisir p :
1. Ça déclenche une erreur (je viens d'essayer)
2. p est utilisé dans la fonction mais elle ne sait plus ce que c'est
3. Alors que lorsque tu lui dis l=api(p) tu appelles api en lui passant le nombre p qui contient la valeur choisie avant.
Ca va te surprendre mais si j'écris
q= int(input(....
puis
l=api(q)
à l'arrivée, la fonction api récupère la valeur de q et la range dans sa variable p.
Si tu fais p =int(input(... et que tu réponds 6,
après, p contient 6 que tu vas lui passer en écrivant l=api(p)
.
La fonction fait le boulot, te renvoie [n,a,b] que le programme récupère et range dans ce qu'il sait être une liste l..
Tout au plus, tu pourrais te passer du p=int(input( )= ne pas l'écrire et écrire directement :
l=api(6).
Je viens de le faire (mais j'ai laissé def api(p): ) et de lancer le programme, j'obtiens :
On a utilisé deux polygones réguliers à 3938 côtés
3.1415923203576166 < pi < 3.141593320054338
@+
Hors ligne
#39 22-12-2020 22:27:34
- Lisou30000
- Membre
- Inscription : 06-12-2020
- Messages : 54
Re : [Python]
Vous n’avez pas bien compris ma question mais c’est pas grave, lorsqu’on me demande la valeur de p j’écris alors 6 mais rien ne s’affiche
Hors ligne
#40 23-12-2020 08:28:03
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 385
Re : [Python]
Bonjour,
Tu veux dire que ton programme lorsque à la question
p=int(input("On cherche un encadrement de Pi à 10^-p. Quelle est la valeur de p ?"))
tu réponds 6,
- le 6 ne s'affiche pas ?
- le 6 s'affiche mais le programme n'affiche rien ensuite ? Si oui, la ligne l=api(p) est-elle bien présente ? Si elle est bien là, n'y touche pas, le problème est soit dans ta fonction, soit dans une des deux lignes de print suivantes ?
O va trouver pourquoi...
@+
Hors ligne
#41 23-12-2020 09:08:36
- Lisou30000
- Membre
- Inscription : 06-12-2020
- Messages : 54
Re : [Python]
Je peux vous montrer
Hors ligne
#42 23-12-2020 09:11:29
- Lisou30000
- Membre
- Inscription : 06-12-2020
- Messages : 54
Re : [Python]
Hors ligne
#43 23-12-2020 09:12:29
- Lisou30000
- Membre
- Inscription : 06-12-2020
- Messages : 54
Re : [Python]
Oui la ligne est bien présente
Hors ligne
#44 23-12-2020 12:23:58
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 385
Re : [Python]
Bonjour
Tellement petit que c'est difficilement lisible....
J'ai réussi à lire à la fin.
Il y a quelque chose que je remarque.
Tu as écris:
while abs (b-a) >10^(-p):
Ca ça me paraît curieux...
Encore une fois la version Python de ton Lycée est légèrement différente de la version standard :
chez moi et sur tous les sites de tests de programmes Python en ligne, ton 10^(-p) déclenche une erreur, la puissance en Python c'est **
Je dois donc, moi écrire :
while abs (b-a) >10**(-p):
Mon programme qui marche :
(Tu peux le tester ici : https://www.codabrainy.com/python-compiler/) tu fais un copier/coller de mon programme dans la fenêtre de gauche qui tu cliques sur Run)
from math import sin, tan, radians
def api(p):
n=4
a=n*sin(radians(180/n))
b=n*tan(radians(180/n))
while abs(b-a)>10**(-p):
n+=1
a=n*sin(radians(180/n))
b=n*tan(radians(180/n))
return [n,a,b]
p=int(input("On cherche un encadrement de Pi à 10^-p. Quelle est la valeur de p ?"))
l=api(p)
print ("On a utilisé deux polygones réguliers à", l[0], "côtés")
print (l[1],"< pi <",l[2])

@+
Hors ligne
#45 23-12-2020 12:43:48
- Lisou30000
- Membre
- Inscription : 06-12-2020
- Messages : 54
Re : [Python]
Ça marche !!
Hors ligne
#46 23-12-2020 12:46:55
- Lisou30000
- Membre
- Inscription : 06-12-2020
- Messages : 54
Re : [Python]
Une dernière question, il faut que je complète le programme arc que je vous ai déjà envoyé après (u-v) et l.append.
Je mets donc après (u-v) >10(-p) car la distance entre deux termes consécutives doit être strictement inférieur à
10(-p) et après l.append je ne comprends pas
Hors ligne
#47 23-12-2020 12:53:24
- Lisou30000
- Membre
- Inscription : 06-12-2020
- Messages : 54
Re : [Python]
Ah oui aussi après v j’ai mis v=1/2*(u+a/u)
Hors ligne
#48 23-12-2020 15:11:36
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 385
Re : [Python]
Salut,
Et à part "compléter le programme", qu'est-ce que dit d'autre la consigne ?
Ce que je constate :
- Oui, je pense qu'il faut écrire abs(u-v)>=10**(-p) :
Pourquoi ? Parce que tu écris : la distance entre deux termes consécutifs doit être strictement inférieure à 10^(-p)
Donc si mon test it que ce n'est ni supérieur, ni =) alors la réponse est que la différence est strictement inférieure à....
Par contre, si le test que ce n'est plus > 10^(-p), alors la différence peut être inférieure ou égale à et non plus strictement inférieure à...
Mais pourquoi dis-tu : la distance entre deux termes consécutifs doit être strictement inférieure à 10^(-p) ?
C'est dans l'énoncé ?
Elle fait quoi cette fonction arc(a,p) ? Quel est son but ? Qu'est-ce que c'est a ? la valeur l|1] que t'as donnée la fonction api ?
Qu'est que c'est p ? la précision que tu as choisie en, réponse à p=int(input(... ?
Et je reviens à ma question : qu'est censée calculer la fonction arc ? Tu as quelque part un énoncé qui te le dit ?
- D'autre part ta fonction arc(a,p) écrite comme elle l'est, si elle n'était pas là, ça ne changerait rien !
Oh, oui, elle travaille mais elle ne montre rien (aucun print), ne retourne rien... Alors à quoi elle sert ?
-Quant au l.a
Hors ligne
#49 23-12-2020 15:45:56
- yoshi
- Modo Ferox
- Inscription : 20-11-2005
- Messages : 17 385
Re : [Python]
Salut,
Et à part "compléter le programme", qu'est-ce que dit d'autre la consigne ?
Ce que je constate :
- Oui, je pense qu'il faut écrire abs(u-v)>=10**(-p) :
Pourquoi ? Parce que tu écris : la distance entre deux termes consécutifs doit être strictement inférieure à 10^(-p)
Donc si mon test it que ce n'est ni supérieur, ni =) alors la réponse est que la différence est strictement inférieure à....
Par contre, si le test que ce n'est plus > 10^(-p), alors la différence peut être inférieure ou égale à et non plus strictement inférieure à...
Mais pourquoi dis-tu : la distance entre deux termes consécutifs doit être strictement inférieure à 10^(-p) ?
C'est dans l'énoncé ?
Elle fait quoi cette fonction arc(a,p) ? Quel est son but ? Qu'est-ce que c'est a ? la valeur l|1] que t'as donnée la fonction api ?
Qu'est que c'est p ? la précision que tu as choisie en, réponse à p=int(input(... ?
Et je reviens à ma question : qu'est censée calculer la fonction arc ? Tu as quelque part un énoncé qui te le dit ?
- D'autre part ta fonction arc(a,p) écrite comme elle l'est, si elle n'était pas là, ça ne changerait rien !
Oh, oui, elle travaille mais elle ne montre rien (aucun print), ne retourne rien... Alors à quoi elle sert ?
- Quant au l.append('...) puisque u et v changent tous les deux et que l'on stocke, avant le while, u et v dans l, il faut recommencer :
soit l.append((u,v)) (oui des parenthèses dans le parenthèses, je stocke le couple (u,v)
soit l.append(v) tout seul...
Je ne peux pas trancher : que dit ton énoncé à propos de la fonction arc ?
@+
Hors ligne
#50 23-12-2020 16:14:23
- Lisou30000
- Membre
- Inscription : 06-12-2020
- Messages : 54
Re : [Python]
Dans mon énoncé on me demande de compléter après les pointillés cette fonction et on me dit:
2 ) On propose un programme en Python qui doit permettre d’obtenir les termes successifs de la suite (??) :
??+1 = 1 (?? + ? ) 2 ??
{ ?0 = 1
Plus précisément ce programme doit donner tous les termes successifs de la suite (??) jusqu’à ce que la distance entre
deux termes consécutifs soit strictement inférieure à 10−? où ? est un entier naturel.
a) Complétez les lignes 23, 25 et 26 de la fonction « arc » du programme à compléter.
b) Vérifiez que vous obtenez les résultats suivants avec votre programme
Hors ligne







