02_Baumgartner_Chappatte.ipynb-4

publicité
02_Baumgartner_Chappatte.ipynb-4
October 24, 2016
Joris Chappatte et David Baumgartner
1
Série 1
Remarque: On utilisera Python 3.
1.1
Exercice 1
Question
a.
b.
a.
c.
d.
e.
f.
g.
h.
Compément
Vrai
Faux
x
x
Voir cell suivante
x
x
x
Si l’on oublie le duck typing. . .
x
x
Voir cell suivante
x
x
In [1]: # point c.
1+4*3 # si c'était évalulé de gauche à droite sans priorité des opérations,
# point h.
x = lambda: 0 # est une fonction d'arité 2
1.2
Exercice 2
a. A = 15, B = 13
b. A = 5, B = 5
c. Non, car la troisième instruction «écrase» la valeur de A.
d. C <- A A <- B B <- C
ou
1
A <- A+B
B <- A-B
A <- A-B
1.3
Exercice 3
• x**y désigne la puissance, équivalent mathématique de xy , donc est équivalente à
x
· · · · · x}.
| · x {z
y fois
• x//y désigne la division euclidenne (aussi dite entière), et compte donc le nombre de fois
que l’on peut « mettre au maximum y dans x »
• x%y désigne le reste de la division euclidienne, donc c’est la soustraction de x - x//y.
On suppose que l’arithmétique sur les flottants fonctionne comme dans un monde parfait, et
que l’on n’a pas d’erreur d’arrondi (qui ne devraient a priori pas survenir dans ce genre de cas
non-critique, mais dépend des implémentations).
a. 15*4+2=60+2=62
b. 15*(4+2)=15*6=90
c. a=4;3**3+a ⇐⇒ 3**3+4=27+4=31
d. 4+3*3**2/2+7=4+3*9/2+7=4+27/2+7=4+13.5+7=17.5+7=24.5 (24 sur Python 2 car
27/2=13)
e. 4+3*3**2/2.0+7=4+3*9/2.0+7=4+27/2.0+7=4+13.5+7=17.5+7=24.5
chose sur Python 2 car 27/2.0=13.5)
(même
f. 4+3*3**2//2.0+7=4+3*9//2.0+7=4+27//2.0+7=4+13.0+7=17.0+7=24.0 (même
chose sur Python 2 car 27//2.0=13.0 (on note que c’est un flottant))
g. 79-5*7+3**2*2=79-5*7+9*2=79-35+9*2=79-35+18=44+18=62
h. (3*5**2 <= 150 / 2)=(3*25 <= 150/2)=(75 <= 150/2)=(75 <= 75.0)=True
i. 34%8=2
j. (35%8 != 43%8)=(3 != 43%8)=(3 != 3)=False
1. Pour Python 2, / est la division entière (car le diviseur est entier) et retourne donc un entier,
pour Python 3, c’est la division « réelle », et retourne donc un flottant
2. C’est la division réelle, car c’est une divsion par un flottant, autant sur Python 2 que Python
3
3. C’est euclidienne par 2.0, qui «compte» combien de fois au maximum l’on peut mettre 2.0
dans, en l’occurence 27.
2
1.4
1.5
Exercice 4
x
y
z
Opération
7
7
7
23
23
23
23
11.0
–
2
2
2
-2
-2
4
4
–
–
17
17
17
44
44
44
x=7
y=2
z=x+5*y
x=x*3+2
y=-2
z=z-2*y+x
y=4
x=z/y
Exercice 5
a. (250 == 750 / 3)=(250 == 250.0)=True
b. not (27/3 >= 9)=not (9.0 >= 9)=not True=False
c. ((True or False) == (False or False))=(True == False)=False
d. ((8 != 8) and True)=(False and True)=False
e. ((5%2==0)ˆTrue)=((1==0)ˆTrue)=(FalseˆTrue)=True
f. (not not (14%7 != 0) or True)=(not not (0 != 0) or True)=(not not
False or True)=(not True or True)=(False or True)=True
g. True and False or False and True or True and False or True=False
or False and True or True and False or True=False and True or True
and False or True=False or True and False or True=True and False or
True=False or True=True
1.6
Exercice 6
a. x >= 5 and x < 11
b. (x < -3) or (x >= 7) or (x = 0)
c. (x%2 == 1) and (x >= 1) and (x < 20)
d. round(x*10**7) == round(math.pi/2*10**7)
e. Fonctionnement de XOR: XOR(A,B) est vrai si et seulement si A est différent de B.
(x or y) and not (x and y)
3
1.7
Exercice 7
a. Valide, mais déprécié par la PEP-08.
b. Valide
c. Valide, mais déprécié, les majuscules étant réservées aux classes.
d. Invalide, car il commence par un caractère numérique
e. Valide
f. Invalide, car c’est un mot-clef
g. Valide, mais déprécié (car classe)
h. Invalide, car il y a le symbole -, qui représente l’opérateur de soustraction, et Variable
commence par une majuscule
i. Invalide, car le symbole ! est réservé.
• La fonction type retrourne un type de l’objet (=“méthode d’instantiation” pour l’objet)
passé en premier paramètre si l’on fournit un seul argument. Si l’on fournit trois arguments,
type retourne un nouveau type d’objet: le premier argument étant le nom (obj.__name__)
du type (ou classe) à retourner, le second les types (ou classes) dont le type/la classe dérive,
et finalement les définitions des méthodes et attributs du type/de la classe retourné/e.
a. int
b. float
c. bool
d. bool
e. str
f. list
g. tuple
1.8
1.
2.
3.
4.
Exercice 8
truediv(neg(y), x)
add(2,truediv(mul(x,y),z))
mul(neg(4),truediv(sub(10,mul(5,3)),sub(mul(4,2),7)))
or_(not_(lt(mul(neg(12),13),mul(12,11))),ge(pow(11,10),pow(9,12)))
4
1.9
Exercice 9
In [2]: import math
def imc(mass, size):
assert size > 0
return mass/(size**2)
def size_inv_imc(imc, mass):
assert imc > 0
return math.sqrt(mass/imc)
def mass_inc_imc(imc, size):
return imc*(size**2)
size2 = lambda v: size_inv_imc(21.75, v)
mass2 = lambda v: mass_inc_imc(21.75, v)
t = [*map(size2, [20, 40, 60]), 1.8, 2]
m = [*map(mass2, t)]
t1, t2, t3, t4, t5 = tuple(t)
m1, m2, m3, m4, m5 = tuple(m)
In [3]: %matplotlib inline
import matplotlib.pyplot as plt
plt.plot([t1, t2, t3, t4, t5], [m1, m2, m3, m4, m5])
plt.show()
5
In [4]: # Bonus :-)
%matplotlib inline
import numpy as np
x = np.linspace(1, 2)
mass_vec = np.vectorize(mass2)
plt.plot(x, mass_vec(x))
Out[4]: [<matplotlib.lines.Line2D at 0x105cb5908>]
6
In [ ]:
7
Téléchargement