Inscription / Connexion Nouveau Sujet
Niveau terminale
Partager :

Programme PYthon

Posté par
liliewideos
18-12-21 à 03:14

Bonjour, je dois faire l'exercice 127 p153 du livre Bordas terminale.
Enoncé : "Un lapin se déplace dans un terrier composé de trois galeries A,B et C. À chaque fois qu'il est soumis à un stimulus, le lapin reste dans la galerie où il se trouve ou change de galerie.
Soit n un entier naturel, On note:
an→ la probabilité que le lapin soit dans la galerie A
bn→ la probabilité que le lapin soit dans la galerie B
cn→ la probabilité que le lapin soit dans la galerie C
(Voir image pour le reste)

J'ai réussi l'intégralité de l'exercice sans problème à l'exception du programme python. Je ne le trouve vraiment pas clair, quelqu'un pourrait-il m'aider ?  Je ne vois vraiment pas comment le compléter.
Les valeurs initiales pour n=0 sont a=1 ; b = 0 et c=0 (je ne sais pas où mettre ces informations)
Les formules pour calculer les probabilités sont :
a=(1/3)*a+(1/4)*b
b=(2/3)*a+(1/2)b+(2/3)*c
c=(1/4)*b+(1/3)c

Je sais que ces 3 probabilités doivent être calculées en même temps.
Le "in range" doit aller de 1 à n+1
(enfin je suppose car on connaît déjà les valeurs pour n=0)
Mais ce sont les "L" qui me pose problème...
Dès le début, je ne sais pas quoi mettre à "l=..."
Merci d'avance pour votre aide !

Programme PYthon

Posté par
ZEDMAT
re : Programme PYthon 18-12-21 à 10:33

Bonjour,
Juste en passant,

l=[] est une liste
(comme il est dit dans l'énoncé : "renvoie la LISTE des trois probabilités")

Va voir dans un tuto python, ce qu'est une liste et comment cela s'utilise...

Je laisse la place (désolé, pas dispo ce matin).

Posté par
carita
re : Programme PYthon 18-12-21 à 10:41

bonjour à vous

@ZEDMAT, je pourrai prendre le relai.

Le "in range" doit aller de 1 à n+1    --- exact

Dès le début, je ne sais pas quoi mettre à "l=..."    --- on initialise la liste L pour l'étape 0 (je mets une majuscule pour la lisibilité ici)

Posté par
ty59847
re : Programme PYthon 18-12-21 à 10:46

Ici, la fonction lapin doit renvoyer un tableau avec les 3 valeurs a(n), b(n) et c(n)
La dernière ligne pourrait être return ( a, b, c)  mais je suppose que cette syntaxe ne marche pas.
Donc ici, on contourne :

l[0]=a
l[1]=b
l[2]=c
return (l)

Et du coup, au début il faut initialiser l,   pour dire que l est un tableau.
Je ne pratique pas assez Python, mais je pense qu'une des solutions pour la 1ère ligne,  ça pourrait être quelque chose comme :
l=[0,0,0]

MAIS
Il y a une erreur dans ce que tu proposes.

Au début, on a  :  a=1 , b=0 , c=0
Après la 1ère boucle, on veut avoir :  a=1/3 ,  b=2/3 , c=0

Déroulons ton programme.
Au début tu as bien  :  a=1 , b=0 , c=0
Puis tu exécutes l'instruction a=(1/3)*a+(1/4)*b ; donc a=1/3
Puis tu exécutes l'instruction b=(2/3)*a+(1/2)b+(2/3)*c ; et tu obtiens  : b=2/9
Alors que tu voulais b=2/3

Je te laisse chercher comment corriger ça.

Posté par
carita
re : Programme PYthon 18-12-21 à 12:34

en attendant le retour de liliewideos

@ ty59847,
"La dernière ligne pourrait être return ( a, b, c)  mais je suppose que cette syntaxe ne marche pas."
si, si, cette syntaxe fonctionne; elle retourne les 3 probas dans un triplet - avec des parenthèses.

"Donc ici, on contourne (sous-entendu : avec une liste)"    c'est plus qu'un artifice d'écriture pour le return.
l'intervention de la liste (ou de toute autre variable) permet de palier la difficulté que tu as pointée du doigt :
la liste conserve 'intactes' les 3 probas de rang n pendant les calculs des probas de rang n+1.

c'est pourquoi initialisation de L, avant la boucle, doit correspondre aux probas des 3 suites à l'étape 0 :
ainsi, dès la 1ère itération dans la boucle, on commence les calculs avec i=1... etc. jusqu'à i=n

@liliewideos
pour pouvoir tester la fonction, et répondre à la question 3)
il faudra que tu appelles l'exécution de cette fonction : soit dans le corps du programme,
soit directement dans ton interpréteur (essaie avec plusieurs valeurs croissantes de n)

ps : je serai absente cet aprèm, je laisse la main.

Posté par
ZEDMAT
re : Programme PYthon 18-12-21 à 12:41

Citation :
au début il faut initialiser l,   pour dire que l est une LISTE tableau.
pour la 1ère ligne,  ça pourrait être quelque chose comme :
l=[0,0,0]


l=[] suffit pour créer la LISTE  l... vide

Le "return (l)" renvoie la liste en sortie de fonction.

Posté par
liliewideos
re : Programme PYthon 18-12-21 à 15:58

Déjà, merci d'avoir pris le temps de me répondre mais je sais bien tout ça mais c'est la tournure du programme que je comprends pas.
Je répète j'ai fais TOUT LE RESTE DU DEVOIR. Il me manque juste le programme python. Si seulement mon prof faisait son travail en nous enseignant mais il ne nous dit rien c'est débrouillez vous... ça me déprime sérieux !

Voilà où j'en suis du coup (toujours aussi flou) :

def lapin(n):
       L= **
      For i in range (1;n+1) :
           a=***;b=***;c=***
           L[0] = a
           L[1] = b
           L[2] = c
      Return (L)

** toujours floue je ne sais pas si je dois mettre les valeurs de a b c pour n=0 ou alors démarrer tout à zéro ou je dois mettre L[0], L[1] , L[2]
*** ce sont les formules mais où je mets les valeurs initiales

Je teste avec le programme edupython de l'école mais rien ne marche...

Si seulement ils nous laissaient faire les programmes de a à z... leurs programmes n'ont ni queue ni tête à chaque fois

Posté par
liliewideos
re : Programme PYthon 18-12-21 à 16:04

ty59847 @ 18-12-2021 à 10:46


Au début, on a  :  a=1 , b=0 , c=0
Après la 1ère boucle, on veut avoir :  a=1/3 ,  b=2/3 , c=0

Déroulons ton programme.
Au début tu as bien  :  a=1 , b=0 , c=0
Puis tu exécutes l'instruction a=(1/3)*a+(1/4)*b ; donc a=1/3
Puis tu exécutes l'instruction b=(2/3)*a+(1/2)*b+(2/3)*c ; et tu obtiens  : b=2/9
Alors que tu voulais b=2/3

Je te laisse chercher comment corriger ça.

Les calculs a / b / c doivent se faire avec les mêmes valeurs à l'instant T mais je ne peux pas sortir du script de l'exercice du coup je suis bloquée.
Normalement si je mets
a=formule ; b=formule ; c= formule
Cela se fait simultanément MAIS où est-ce-que je mets les valeurs a0 b0 et c0

Posté par
ZEDMAT
re : Programme PYthon 18-12-21 à 16:41

La liste L contient les valeurs de a, b et c.
Donc avant d'entrer dans la boucle, on met dans la liste L les valeurs initiales de a, b et c.

Donc
L=[1,0,0] puisque "au départ " le lapin est dans la galerie A.

Posté par
liliewideos
re : Programme PYthon 18-12-21 à 17:12

Je pense que je me suis mal exprimée.
Le problème n'est pas de faire un programme Python qui fonctionne, ça j'y arrive sans le moindre problème.(voir photo)
Le problème est de respecter le script de l'exercice.
Je m'explique, d'habitude, je rajoute des lignes car je trouve les programmes incomplets.
Mais, mon prof a été hyper claire, si je rajoute quoi que ce soit il me colle un zéro direct, car je cite "il faut que tu arrêtes de te prendre pour une mathématiciennes!"
Donc j'ai juste besoin de votre aide pour que le programme colle au script de l'énoncé...
Je vois pas l'intérêt, du moment que mon programme fonctionne... Et puis compléter ça peut vouloir dire rajouter des lignes de codes...
Enfin bref, j'ai vraiment besoin de votre aide

Posté par
liliewideos
re : Programme PYthon 18-12-21 à 17:13

Programme PYthon

malou edit > ** image rapatriée sur le serveur de l' **

Posté par
ZEDMAT
re : Programme PYthon 18-12-21 à 17:46

Citation :
j'ai juste besoin de votre aide pour que le programme colle au script de l'énoncé...

Alors ne commence pas par remettre des lignes....

Quelques indications :

1) Si tu crées la liste L=[1,0,0] qui contient a0, b0 et c0, tu n'as pas besoin de créer les variables a, b et c.
La première valeur de la liste L (qui contient la valeur de a quand n=0) est "récupérable" sous la notation : L[0].
De même b, c'est L[1]
Et c, c'est L[2]

2) Tu sais sûrement que le signe = est une affectation ; donc
a=a+1
a du sens
donc L[0]=L[0] +5 en aurait aussi... si on en avait besoin.

A toi d'adapter....

Posté par
alb12
re : Programme PYthon 18-12-21 à 17:49

salut,
pour qu'on puisse copier ton code il faut le mettre entre les balises generees en cliquant sur le bouton </> situe sous le message

moncode

Posté par
ZEDMAT
re : Programme PYthon 18-12-21 à 18:00

J'ai oublié de joindre "ton" image, un peu raturée

A l'avenir ne mets plus des liens vers des images "externes" (elles seront supprimées par les modérateurs ). Apprends à joindre des images à ton message (voir l'outil Img sous la fenêtre où tu écris).

Ensuite pour les scripts python, il y a beaucoup mieux .
Ton script dans l'éditeur python est du vulgaire texte que tu peux copier (CTRL+C) et ensuite venir coller (CTRL+V)dans ton message sur l'
En plus pour garder les indentations de ton script, copie le, ce script, entre des balises code que tu actives avec l'outil </> (toujours dans les outils sous la fenêtre où tu écris....

mets ton script entre les 2 balises
et regarde ce que tu obtiens en mode Aperçu avant de POSTER.

Ainsi , on peut récupérer ton script sans avoir à le saisir

Programme PYthon

Posté par
ty59847
re : Programme PYthon 18-12-21 à 18:01

Là tu fais un blocage. Tu as décidé que cet exercice était mal conçu, et 'inconsciemment', à l'insu de ton plein gré, tu veux montrer que cet exercice est mal conçu.
La solution, c'est la copie de ce que tu as fait. La solution est même un petit peu plus simple que ce que tu as fait.  
Laisse tomber cet exercice, passe une bonne nuit. Et demain, en 20 secondes, tu vas trouver.

Posté par
liliewideos
re : Programme PYthon 18-12-21 à 22:46

ZEDMAT @ 18-12-2021 à 18:00


Programme PYthon


Enfin un message utile !
Si vous m'aviez dit d'entrée qu'il fallait remplacer a par l[0]; b par l[1} et c par l[2] dans les formules de la boucle on aurait gagné du temps.

Je mets la solution si jamais quelqu'un là cherche, cela lui fera gagner du temps !
Merci et bonne continuation

Solution :

def lapin(n):
l=[1,0,0]
    for i in range (1,n+1):
        a=(1/3)*l[0]+(1/4)*l[1];b=(2/3)*l[0]+(1/2)*l[1]+(2/3)*l[2];c=(1/4)*l[1]+(1/3)*l[2]
        l[0]=a
        l[1]=b
        l[2]=c
    return(l)

Posté par
alb12
re : Programme PYthon 18-12-21 à 23:18

voilà !
une alternative


def lapin(n):
  #local a,b,c,k
  """renvoie la liste des 3 probabilites"""
  a,b,c=1.,0,0
  for k in range(1,n+1):
    a,b,c=(1/3)*a+(1/4)*b,(2/3)*a+(1/2)*b+(2/3)*c,(1/4)*b+(1/3)*c
  return [a,b,c]



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Inscription gratuite

Fiches en rapport

parmi 1675 fiches de maths

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !