affichage, types, variables, affectation

In [1]:
N = eval(input("Nombre de personnes"))
sucre, beurre, farine , oeufs = 175, 150, 250, 4
s, b, f, o = int(N*sucre/4), int(N*beurre/4), int(N*farine/4), int(N*oeufs/4)
print("Pour ",N," personnes, il faut ",s,"g de sucre, ",b,"g de beurre, ",f,"g de farine et ",o," oeufs",sep='')
Nombre de personnes7
Pour 7 personnes, il faut 306g de sucre, 262g de beurre, 437g de farine et 7 oeufs
In [2]:
N = eval(input("Nombre de personnes"))
M = eval(input("Nombre de places dans une voiture"))
nvoiture = N//M
reste = N%M
if reste is 0:
    print("Il faut",nvoiture,"voitures transportant",M,"personnes.")
else:
    print("Il faut",nvoiture,"voitures transportant",M,"personnes et une transportant",reste,"personnes.")
Nombre de personnes21
Nombre de places dans une voiture7
Il faut 3 voitures transportant 7 personnes.

utilisation de la bibliothèque de math

In [3]:
from cmath import sqrt, exp, pi
print(sqrt(-1), exp(pi*1j))
1j (-1+1.2246467991473532e-16j)
In [4]:
from math import sin, pi # manque l'importation de la constante pi!
print(sin(pi/2))
1.0

Répétitions boucles

In [ ]:
for i in range(1,11):
    for j in range(1,11):
        print(i,'*',j,'=',i*j)
In [6]:
from math import sqrt
x = 3
a = x
for i in range(5):
    print(a)
    ap = 0.5*(a+x/a)
    a = ap
#    a = 0.5*(a+x/a) # on aurait pu remplacer les deux lignes précédentes par celle-ci
print(a, sqrt(x))
3
2.0
1.75
1.7321428571428572
1.7320508100147274
1.7320508075688772 1.7320508075688772

liste, dictionnaire

In [7]:
L = list(range(30))
print(L[::2])
print(list(filter(lambda x: not x%7, L)))
L.reverse()
print(L)
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28]
[0, 7, 14, 21, 28]
[29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
In [9]:
L = 103428
print( sum( [ int(c) for c in str(L) ] ) ) # somme des chiffres du nombre
18
In [10]:
Table = [ [i*j for j in range(1,11)] for i in range(1,11) ]

for i in range(10):
    for j in range(10):
        print(Table[i][j],end=' ')
    print()
    
# Remarque: ne pas utiliser
# Table = [ [0]*10 ]*10
# pour initialiser une liste vide, une référence des listes intérieures est duppliquée (cf memento)
1 2 3 4 5 6 7 8 9 10 
2 4 6 8 10 12 14 16 18 20 
3 6 9 12 15 18 21 24 27 30 
4 8 12 16 20 24 28 32 36 40 
5 10 15 20 25 30 35 40 45 50 
6 12 18 24 30 36 42 48 54 60 
7 14 21 28 35 42 49 56 63 70 
8 16 24 32 40 48 56 64 72 80 
9 18 27 36 45 54 63 72 81 90 
10 20 30 40 50 60 70 80 90 100 
In [11]:
L = [1,2,1,3,2,1,3,2,1,1,2,1]
d = {}
for i in L:
    if i in d : d[ i ] += 1
    else : d[ i ] = 1
print(d) # affiche l'histogramme des nombres contenus dans la liste
{1: 6, 2: 4, 3: 2}
In [12]:
a = [ 1, 2 ]
b = [ 3, 4 ]
a[0] = b
b[0] = a
print(a[0][0][0][0][0][0][1])
print(a[0][0][0][0][0][1])
2
4

Le mécanisme repose sur le fait que l'affectation faire référence à la liste $b$ à la ligne 3 et $a$ à la ligne 4 mais que ces listes ne sont pas copiées. Ainsi, après la ligne 3, la liste $a$ est telle que $a = [ b, 2 ] = [ [3,4], 2]$ Après la ligne 4, on aura $a = [ [a,4], 2 ]$ Le premier élément du premier élément de $a$, soit $a[0][0]$ fait donc référence à $a$ elle-même et non à une copie de $a$. C'est donc une construction récursive dans laquelle $a[0][0]$ représente la même chose que $a$ si bien que $a[0][0][0][0][0][0][1] \equiv a[0][0][0][0][1] \equiv a[0][0][1] \equiv a[1] \equiv 2$. Ce sera toujours le résultat pour un nombre pair de [0] avant le [1]. S'il y a un nombre impair $a[0] \equiv b$ donnera $b[1] \equiv 4$ comme on le voit dans les exemples ci-dessous.

In [ ]:
 

Fonctions et graphiques

In [13]:
from pylab import *
%matplotlib inline

x = np.linspace(-3,3.0,num=101)
y = exp(x)
plot(x,y)

xlabel('$x$',size=24)
ylabel('$f(x)$',size=24)
show()
In [14]:
def derive(f,x,eps=1e-6):
    return (f(x+eps)-f(x-eps))/(2.0*eps)

from math import sqrt
print(derive(sqrt,3,1e-6), 1/(2*sqrt(3)))
0.28867513468533446 0.2886751345948129
In [15]:
def f():
    global x
    x = 0
f ()
print(x)
0

Le problème est que la variable $x$ est définie localement à l'intérieur du corps de $f$. Elle n'est donc pas accessible à l'espace global pour la commande print, d'où l'erreur. Pour la rendre accessible à l'espace global, il faut utiliser le mot-clé global et modifier ainsi le code:

In [16]:
def Factorielle(n):
    res = 1
    for i in range(1,n+1):
        res *= i
    return res

from math import factorial
print(Factorielle(4), factorial(4))

def Factorielle(n):
    if n == 1 or n == 0: return 1
    return n*Factorielle(n-1)

print(Factorielle(8), factorial(8))
24 24
40320 40320
In [ ]: