2. Exercices Python de base#
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
# 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))
Etudiant Marc BUFFAT id=137764122
2.1. Variable et expression: exo 1#
mettre dans une variable V la valeur numérique de l’expression suivante :
import numpy as np
### BEGIN SOLUTION
V = 2*(np.sin(np.pi/5)+1)/(1+np.exp(2)) + 4.
print(V)
### END SOLUTION
4.378537283233776
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}**")
faire le calcul pour i=4 j=8
L = _L[:]
print(L)
### BEGIN SOLUTION
val1 = L[_I1-1]
L[_I1-1] = L[_I2-1]
L[_I2-1] = val1
print(L)
### END SOLUTION
['1', 'x', 'D', 'S', '4', 'D', 'L', 'i', 'r', 'C', 'x', 'k', '8', 'd', 'E', 'T']
['1', 'x', 'D', 'i', '4', 'D', 'L', 'S', 'r', 'C', 'x', 'k', '8', 'd', 'E', 'T']
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}**")
faire le calcul pour I1=4 I2=8
p = None
### BEGIN SOLUTION
p = 1
for i in range(_I1,_I2+1):
p = p*i
# fin boucle
print(p)
### END SOLUTION
6720
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}**")
faire le calcul pour n=8
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
46233
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}")
faire le calcul pour n=8 et x=0.91
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 :
avec \(I_0 = 1\).
printmd(f"**faire le calcul pour n={_I2} et a={_I1}**")
faire le calcul pour n=8 et a=4
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}**")
faire le calcul pour N=8 et p=4
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}**")
faire le calcul pour N=8 et n=4
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}**")
faire le calcul pour N=8
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
[ 0.43381826 0.0213368 0.16936852 -0.06052477 -0.74041107 0.23983356
-0.30882713 0.58089572]
[0.43381826 0.0213368 0.16936852 0.23983356 0.58089572]
[-0.06052477 -0.74041107 -0.30882713]