UTSPE · Python au lycée

J’apprends à écrire des formules en Python

Fonctions et suites : traduire une expression mathématique, respecter la syntaxe et construire progressivement un programme correct.

× devient *Puissance : **Fonction : defValeur renvoyée : returnRécurrence : boucle for

1. Traduire les symboles mathématiques

Règle d’or. Python ne devine ni les multiplications ni les fractions. Chaque opération doit être écrite explicitement.
Écriture mathématiqueÉcriture PythonAttention
\(3x+2\)3*x + 23x est interdit
\(x^2\)x**2^ ne signifie pas puissance
\(\dfrac{x+1}{2x-3}\)(x+1)/(2*x-3)parenthèses obligatoires
\(\sqrt{x}\)sqrt(x)après from math import sqrt
\(2^n\)2**ndeux astérisques

À vous

Traduisez \(5x^2-3x+7\) :

Éditeur · Expression Python
Piège classique : 5x^2 cumule deux erreurs. Il faut écrire 5*x**2.

2. Programmer une fonction

Pour la fonction \(f(x)=3x^2-2x+1\), le paramètre est x et return renvoie l’image calculée.

def f(x):
    return 3*x**2 - 2*x + 1

Définir

def f(x): annonce le nom de la fonction et sa variable.

Renvoyer

return est indenté de quatre espaces et renvoie le résultat.

Tester \(f(x)=3x^2-2x+1\)

9

Compléter

Éditeur · Fonction g

où \(g(x)=\dfrac{x^2+1}{x-2}\).

3. Programmer une suite explicite

Une suite explicite se programme comme une fonction dont le paramètre est le rang \(n\).

Pour \(u_n=3\times2^n-1\), on écrit :
def u(n):
    return 3*2**n - 1
Calculer un terme de \((u_n)\)

47

Exercice guidé

Écrivez la formule Python correspondant à \(v_n=\dfrac{2n+1}{n+3}\).

Éditeur · Suite explicite v
Pourquoi faut-il des parenthèses ?

Sans parenthèses, Python ne sait pas que tout \(2n+1\) constitue le numérateur et que tout \(n+3\) constitue le dénominateur.

4. Programmer une suite définie par récurrence

Pour \(u_0=2\) et \(u_{n+1}=2u_n+1\), il faut partir de la valeur initiale puis appliquer la relation exactement \(n\) fois.

def u(n):
    u = 2             # valeur initiale u_0
    for k in range(n):
        u = 2*u + 1 # terme suivant
    return u
Pourquoi range(n) ? Pour obtenir \(u_n\) à partir de \(u_0\), on effectue exactement \(n\) passages au terme suivant.
Tester \(w_0=4\), \(w_{n+1}=\dfrac{w_n+2}{2}\)

2.25

Remettre les trois lignes essentielles


Écrire maintenant le programme complet

Vous pouvez choisir librement les noms du compteur et de la variable qui contient le terme.

Éditeur · Suite récurrente w

5. Repérer et corriger les erreurs

Erreur 1

def f(x):
return 3x^2 + 1

Repérez trois erreurs.

Correction
def f(x):
    return 3*x**2 + 1

Il manquait l’indentation, le signe * et le deuxième astérisque de la puissance.

Erreur 2

def u(n):
    u = 2
    for k in range(n):
        u = 2*k + 1
    return u

Quelle variable doit être utilisée dans la relation ?

Correction

Il faut écrire u = 2*u + 1. La relation dépend du terme précédent u, pas du compteur k.

Erreur 3

def v(n):
    return 2*n+1/n+3

Pourquoi la fraction est-elle fausse ?

Correction

Écrire (2*n+1)/(n+3) afin de délimiter numérateur et dénominateur.

Erreur 4

def w(n):
    w = 4
    for k in range(n+1):
        w = (w+2)/2
    return w

Pourquoi obtient-on le terme suivant ?

Correction

range(n+1) effectue \(n+1\) mises à jour. Pour obtenir \(w_n\), il faut range(n).

6. Banque d’exercices autocorrectifs

10 exercices progressifs. Choisissez un exercice, écrivez votre programme puis utilisez Tester. Le correcteur vérifie le calcul et accepte vos propres noms de fonctions et de variables.
Sauvegarde automatique
Choisissez un exercice.
📱 Sur téléphone : utilisez les touches ci-dessous pour insérer rapidement les mots et symboles Python.
1
Prêt. Écrivez votre programme puis cliquez sur « Tester ».
Afficher la solution seulement après avoir essayé
def a(n):
    a = 5
    for k in range(n):
        a = (3*a + 1)/2
    return a
À retenir. Une formule explicite utilise directement \(n\). Une suite récurrente nécessite une valeur initiale et une boucle.
,'m')),state=init?init[1]:null,loop=param?new RegExp('for\\s+[A-Za-z_]\\w*\\s+in\\s+range\\s*\\(\\s*'+param+'\\s*\\)\\s*:').test(code):false;let recurrence=false,returned=false;if(state){const assigns=code.split('\n').map(l=>l.match(new RegExp('^\\s*'+state+'\\s*=\\s*(.+?)\\s*ed.addEventListener('input',()=>{localStorage.setItem(key(choice.value),ed.value);lines();status.textContent='Enregistré';setTimeout(()=>status.textContent='Sauvegarde automatique',900)}); ed.addEventListener('scroll',()=>{nums.scrollTop=ed.scrollTop}); ed.addEventListener('keydown',e=>{if(e.key==='Tab'){e.preventDefault();const a=ed.selectionStart,b=ed.selectionEnd;ed.setRangeText(' ',a,b,'end');ed.dispatchEvent(new Event('input'))}else if(e.key==='Enter'){e.preventDefault();const a=ed.selectionStart,line=ed.value.slice(0,a).split('\n').pop(),indent=(line.match(/^\s*/)||[''])[0]+(line.trim().endsWith(':')?' ':'');ed.setRangeText('\n'+indent,a,ed.selectionEnd,'end');ed.dispatchEvent(new Event('input'))}}); choice.addEventListener('change',load);root.querySelector('#runPythonTests').addEventListener('click',test); root.querySelector('#resetPythonEditor').addEventListener('click',()=>{ed.value=tasks[choice.value].starter;localStorage.removeItem(key(choice.value));lines();out.textContent='Éditeur réinitialisé.';ed.focus()}); root.querySelector('#copyPythonCode').addEventListener('click',async()=>{try{await navigator.clipboard.writeText(ed.value);status.textContent='Code copié'}catch(e){status.textContent='Sélectionnez puis copiez le code'}}); load(); })(); ))).filter(Boolean).map(m=>m[1]).filter(x=>Number(x.trim())!==t.init);recurrence=assigns.some(expr=>equivalent(expr,state,t.next,t.samples));returned=new RegExp('return\\s+'+state+'\\b').test(code)}checks=[['Une fonction à un paramètre est définie',!!def],['Une variable de suite est initialisée à '+t.init,!!state],['La boucle utilise le rang demandé',loop],[t.label,recurrence],['La variable calculée est renvoyée',returned]]} const ok=checks.length>0&&checks.every(x=>x[1]);out.innerHTML=checks.map(x=>(x[1]?'✓ ':'✗ ')+x[0]+'').join('\n')+(ok?'\n\nProgramme correct. Vos noms de variables sont acceptés.':'\n\nCorrigez les points marqués d’une croix.')} ed.addEventListener('input',()=>{localStorage.setItem(key(choice.value),ed.value);lines();status.textContent='Enregistré';setTimeout(()=>status.textContent='Sauvegarde automatique',900)}); ed.addEventListener('scroll',()=>{nums.scrollTop=ed.scrollTop}); ed.addEventListener('keydown',e=>{if(e.key==='Tab'){e.preventDefault();const a=ed.selectionStart,b=ed.selectionEnd;ed.setRangeText(' ',a,b,'end');ed.dispatchEvent(new Event('input'))}else if(e.key==='Enter'){e.preventDefault();const a=ed.selectionStart,line=ed.value.slice(0,a).split('\n').pop(),indent=(line.match(/^\s*/)||[''])[0]+(line.trim().endsWith(':')?' ':'');ed.setRangeText('\n'+indent,a,ed.selectionEnd,'end');ed.dispatchEvent(new Event('input'))}}); choice.addEventListener('change',load);root.querySelector('#runPythonTests').addEventListener('click',test); root.querySelector('#resetPythonEditor').addEventListener('click',()=>{ed.value=tasks[choice.value].starter;localStorage.removeItem(key(choice.value));lines();out.textContent='Éditeur réinitialisé.';ed.focus()}); root.querySelector('#copyPythonCode').addEventListener('click',async()=>{try{await navigator.clipboard.writeText(ed.value);status.textContent='Code copié'}catch(e){status.textContent='Sélectionnez puis copiez le code'}}); load(); })();