2. Exercices Python#

Petits exercices Python sur les variables, les boucles et les tableaux numpy

Marc Buffat, Dpt Mécanique Lyon 1

%matplotlib inline
import numpy as np
from matplotlib import pyplot as plt
import matplotlib.pyplot as plt
plt.rc('font', family='serif', size='14')
from validation.valide_markdown import test_markdown, test_code
from validation.validation import info_etudiant, bib_validation
from IPython.display import display, Markdown, clear_output
bib_validation("cours","MGC2028L")
from SolutionExo import solution
---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
Cell In[1], line 10
      8 from IPython.display import display, Markdown, clear_output
      9 bib_validation("cours","MGC2028L")
---> 10 from SolutionExo import solution

ModuleNotFoundError: No module named 'SolutionExo'
# nom etudiant
def printmd(string):
    display(Markdown(string))
# test si numero étudiant spécifier
try: NUMERO_ETUDIANT
except NameError: NUMERO_ETUDIANT = None 
if NUMERO_ETUDIANT is None:
    NOM,PRENOM,NUMERO_ETUDIANT = info_etudiant()
printmd("## Etudiant {} {}  id={}".format(NOM,PRENOM,NUMERO_ETUDIANT))
np.random.seed(NUMERO_ETUDIANT)
_I1 = 1+np.random.randint(5)
_I2 = 1+np.random.randint(5,20)
_X  = np.round(0.01 + np.random.rand(),2)
import secrets
_L = list(secrets.token_urlsafe(_I1+_I2))

2.1. Variable et expression: exo 1#

mettre dans une variable V la valeur numérique de l’expression suivante :

\[ 2 \frac{\sin(\frac{\pi}{5}) + 1 }{ 1 + e^{2}} + 4\]
import numpy as np
### BEGIN SOLUTION
V = 2*(np.sin(np.pi/5)+1)/(1+np.exp(2)) + 4. 
print(V)
### END SOLUTION

2.2. Liste: exo1.1#

dans la liste L suivante, permuter le ième et jème élément et mettre le résultat dans L On affichera le résultat avant et après la permutation pour comparer.

printmd(f"**faire le calcul pour i={_I1}   j={_I2}**")
L = _L[:]
print(L)
### BEGIN SOLUTION
val1 = L[_I1-1]
L[_I1-1] = L[_I2-1]
L[_I2-1] = val1
print(L)
### END SOLUTION

2.3. Ecriture de boucle: exo 2#

Ecrire une boucle pour calculer le produit des entiers de I1 à I2 inclus. Le résultat est à mettre dans la variable p

printmd(f"**faire le calcul pour I1={_I1}   I2={_I2}**")
p = None
### BEGIN SOLUTION
p = 1
for i in range(_I1,_I2+1):
    p = p*i
# fin boucle
print(p)
### END SOLUTION

2.4. Traduction de formule mathématique: exo 3#

calcul de la quantité S suivante (somme des factorielles de 1 à n) dans la variable S $\( S = \sum_{i=1}^n i! \)$

printmd(f"**faire le calcul pour n={_I2}**")
S = None
### BEGIN SOLUTION
S = 0
n = _I2
faci = 1
for i in range(1,n+1):
    faci = faci*i
    S = S + faci
# fin boucle 
print(S)
### END SOLUTION

2.5. Traduction de formule mathématique: exo 3.1#

calcul de la série suivante dans la variable L $\( L = 1 + \sum_{i=1}^n \frac{x}{i} \)$

printmd(f"**faire le calcul pour n={_I2}** et x={_X}")
L = None
### BEGIN SOLUTION
n = _I2
x = _X
L = 1.
for i in range(1,n+1):
    L = L + x/i
### END SOLUTION

2.6. Formules Itératives: exo 4#

Créer un tableau numpy I de dimension n qui contient les valeurs données par la formule de récurrence :

\[ I_{k+1}= \frac{k+1}{a} I_k \mbox{ pour k > 0 }\]

avec \(I_0 = 1\).

printmd(f"**faire le calcul pour n={_I2} et a={_I1}**")
I = None
### BEGIN SOLUTION
n = _I2
a = _I1
I = np.zeros(n)
I[0] = 1
for i in range(1,n):
    I[i] = (i/a) *I[i-1]
#
### END SOLUTION

2.7. Tableaux numpy: exo 5#

créer un tableau numpy TAB de dimension N contenant des valeurs aléatoires à l’aide de la fonction numpy: np.random.rand(N). Mettre dans la variable U les p dernières valeurs du tableau TAB

printmd(f"**faire le calcul pour N={_I2} et p={_I1}**")
TAB = None
### BEGIN SOLUTION
TAB = np.random.rand(_I2)
U = TAB[-_I1:]
### END SOLUTION

2.8. Tableaux numpy: exo 6#

créer une matrice numpy A de dimension N contenant des valeurs aléatoires à l’aide de la fonction numpy: np.random.rand(N,N). Mettre dans la variable B la sous matrice de A constituée par les éléments se trouvant sur les n dernières colonnes et sur les n premières lignes de A.

printmd(f"**faire le calcul pour N={_I2} et n={_I1}**")
A = None
### BEGIN SOLUTION
A = np.random.rand(_I2,_I2)
B = A[:_I1,-_I1:]
### END SOLUTION

2.9. Tableaux numpy: exo 6.1#

créer un tableau numpy X de dimension N contenant des valeurs aléatoires entre -1 et 1 à l’aide de la fonction numpy: np.random.rand(N), qui crée un tableau de N valeurs aléatoires entre 0 et 1. On note que si \(0\le x \le 1\), alors \(-1\le 2x-1 \le 1\) . Mettre dans la variable Xpos le tableau constitué par les éléments positifs ou nuls de X et dans Xneg le tableau constitué par les éléments génatifs de X. Afficherz les tableaux pour vérifier.

printmd(f"**faire le calcul pour N={_I2}**")
X = None
### BEGIN SOLUTION
X = 2*np.random.rand(_I2)-1
Xpos = X[X>=0]
Xneg = X[X<0]
print(X)
print(Xpos)
print(Xneg)
### END SOLUTION

2.10. FIN#