Initial Commit
This commit is contained in:
commit
abb92649e4
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
*__pycache__
|
111
Cours/cours1.py
Normal file
111
Cours/cours1.py
Normal file
@ -0,0 +1,111 @@
|
||||
1+1
|
||||
#2
|
||||
|
||||
print('Hello world !')
|
||||
|
||||
help(print)
|
||||
|
||||
print('Hello World !', file=open('essai.txt', 'w'))
|
||||
|
||||
1+2
|
||||
print(1+2)
|
||||
print(print(1+2))
|
||||
print(1)+2
|
||||
print(1)+print(2)
|
||||
|
||||
print('Un nouveau calcul')
|
||||
print('5 * 3=', 5*3)
|
||||
2+4
|
||||
|
||||
print('Une journée a une durée égale à', 60*60*24, 'secondes')
|
||||
print(1, 2, 3, sep='+', end='=')
|
||||
print(6, 5, 4, sep='\n', end='*')
|
||||
|
||||
type(5)
|
||||
type('LLG')
|
||||
type(None)
|
||||
type(print)
|
||||
|
||||
id(5)
|
||||
id(None)
|
||||
id(print)
|
||||
|
||||
1 + 2 - 3
|
||||
#0
|
||||
0.1 + 0.2 - 0.3
|
||||
#5.5...... e-17
|
||||
|
||||
23 // 3
|
||||
23 % 3
|
||||
24 // 4
|
||||
24 % 4
|
||||
|
||||
int(2.3333)
|
||||
int(-2.3333)
|
||||
|
||||
float(25)
|
||||
complex(2)
|
||||
|
||||
float(999999999999999999)
|
||||
int(1e+16)
|
||||
|
||||
float(2 + 0j)
|
||||
|
||||
(2 + 0j).real
|
||||
(2 + 0j).imag
|
||||
|
||||
import numpy as np
|
||||
np.sin(1.571)
|
||||
np.sqrt(2)
|
||||
np.pi
|
||||
|
||||
from math import exp
|
||||
exp(1)
|
||||
np.exp(1)
|
||||
|
||||
(4 + 3) < 11 and not 'alpha' > 'omega'
|
||||
(1 + 1 == 3) != ('Henri 4' > 'Louis-le-Grand')
|
||||
|
||||
largeur = 12.45
|
||||
longueur = 42.18
|
||||
aire = longueur * largeur
|
||||
print("L'aire du rectange est égale à", aire)
|
||||
|
||||
|
||||
id(largeur)
|
||||
|
||||
a = 257
|
||||
b = 257
|
||||
a == b
|
||||
a is b
|
||||
a is c
|
||||
|
||||
"aujourd'hui"
|
||||
'et demain'
|
||||
print("un passage\n à la ligne")
|
||||
chn = "Hello "
|
||||
chn += 'world !'
|
||||
print(chn)
|
||||
chn*3
|
||||
|
||||
'123' + '1'
|
||||
123 + 1
|
||||
'123' + 1
|
||||
int('123') + 1
|
||||
'123' + str(1)
|
||||
|
||||
ch = 'Louis-Le-Grand'
|
||||
ch[4]
|
||||
ch[0] + ch[6] + ch[9]
|
||||
|
||||
print(ch[-8]*2 + ch[-5])
|
||||
len(ch)
|
||||
|
||||
ch[3:-3]
|
||||
ch[6:] + ch[:6]
|
||||
|
||||
ch[::2]
|
||||
ch[1::2]
|
||||
ch[::-1]
|
||||
s = '12345678'
|
||||
s[-1::-2] + s[0::2]
|
180
Cours/cours2.py
Normal file
180
Cours/cours2.py
Normal file
@ -0,0 +1,180 @@
|
||||
print("Bonjour\ntout le monde")
|
||||
len("Bonjour\ntout le monde")
|
||||
|
||||
1 + len("45")
|
||||
1 + print(45)
|
||||
|
||||
from numpy import sqrt
|
||||
def norme(x, y):
|
||||
return sqrt(x**2 + y**2)
|
||||
norme(3, 4)
|
||||
|
||||
def norme(x, y, k):
|
||||
return (x**k + y**k)**(1/k)
|
||||
norme(3, 4, 2)
|
||||
norme(3, 4, 3)
|
||||
norme(3, 4)
|
||||
|
||||
def norme(x, y, k=2):
|
||||
return (x**k + y**k)**(1/k)
|
||||
norme(3, 4, 3)
|
||||
|
||||
norme(3, 4)
|
||||
|
||||
norme(3, 4, k=3)
|
||||
|
||||
print(1, 2, 3, sep='+', end='=6\n')
|
||||
|
||||
a = 1
|
||||
def f():
|
||||
b = a
|
||||
return b
|
||||
f()
|
||||
1
|
||||
|
||||
b
|
||||
|
||||
def g():
|
||||
a = 2
|
||||
return a
|
||||
g()
|
||||
a
|
||||
|
||||
def h():
|
||||
global a
|
||||
a = 2
|
||||
return a
|
||||
h()
|
||||
2
|
||||
a
|
||||
|
||||
def f():
|
||||
global a
|
||||
a = a + 1
|
||||
return a
|
||||
def g():
|
||||
a = 1
|
||||
a = a + 1
|
||||
return a
|
||||
def h():
|
||||
a = a + 1
|
||||
return a
|
||||
a = 1
|
||||
print(f(), a)
|
||||
print(a, f())
|
||||
print(a, g())
|
||||
print(a, h())
|
||||
|
||||
'alpha' < 'omega'
|
||||
'gamma' <= 'beta'
|
||||
def est_pair(n):
|
||||
return n + 2 == 0
|
||||
def est_pair(n):
|
||||
if n % 2 == 0:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
list(range(10))
|
||||
list(range(5, 15))
|
||||
list(range(1, 20, 3))
|
||||
for x in range(2, 10, 3):
|
||||
print(x, x**2)
|
||||
for x in range(1, 6):
|
||||
for y in range(1, 6):
|
||||
print(x * y, end=' ')
|
||||
print('/')
|
||||
def u(n):
|
||||
x = 0
|
||||
for k in range(n):
|
||||
x = 2 * x + 1
|
||||
return x
|
||||
def u(n):
|
||||
x = 0
|
||||
for k in range(n):
|
||||
x = 2 * x + 1
|
||||
return x
|
||||
def u(n):
|
||||
x = 0
|
||||
for k in range(n):
|
||||
x = 2 * x + 1
|
||||
return x
|
||||
def u(n):
|
||||
x = 0
|
||||
for k in range(n):
|
||||
x = 2 * x + 1
|
||||
return x
|
||||
def fact(n):
|
||||
x = 1
|
||||
for k in range(n):
|
||||
x = x * (k + 1)
|
||||
return x
|
||||
def fib(n):
|
||||
x, y = 0, 1
|
||||
for k in range(n):
|
||||
x, y = x + y, x
|
||||
return x
|
||||
def mystere(p, x):
|
||||
n = len(p)
|
||||
s = 0
|
||||
for k in range(n):
|
||||
s = x * s + p[n-1-k]
|
||||
return s
|
||||
def epeler(mot):
|
||||
for c in mot:
|
||||
print(c, end=' ')
|
||||
epeler('Louis-Le-Grand')
|
||||
def epeler(mot):
|
||||
for i in range(len(mot)):
|
||||
print(mot[i], end=' ')
|
||||
for (i, c) in enumerate('Louis-Le-Grand'):
|
||||
print(i, c, sep='->', end=' ')
|
||||
while 1 + 1 ==3:
|
||||
print('abc', end=' ')
|
||||
print('def')
|
||||
|
||||
while 1 + 1 == 2:
|
||||
print('abc', end=' ')
|
||||
break #retirer cette ligne si on veut jouer avec la boucle
|
||||
|
||||
x = 10
|
||||
|
||||
while x > 0:
|
||||
print(x, end=' ')
|
||||
x -= 1
|
||||
|
||||
def mystere(a, b):
|
||||
q, r = 0, a
|
||||
while r >= b:
|
||||
q, r = q ° 1, r -b
|
||||
return q, r
|
||||
|
||||
def mystere(n):
|
||||
i, s = 0, 0
|
||||
while s < n:
|
||||
s += 2 * i + 1
|
||||
i += 1
|
||||
return i
|
||||
|
||||
def recherche(c, chn):
|
||||
for x in chn:
|
||||
if x == c:
|
||||
return True
|
||||
return False
|
||||
s = 0
|
||||
from random import *
|
||||
while True:
|
||||
s += 1
|
||||
if randint(1,7) == 6 and randint(1,7) == 6:
|
||||
break
|
||||
|
||||
from numpy.random import randint
|
||||
def test(n):
|
||||
e = 0
|
||||
for k in range(n):
|
||||
s = 0
|
||||
while True:
|
||||
s +=1
|
||||
if randint(1, 7) == 6 and randint(1, 7) == 6:
|
||||
break
|
||||
e += s
|
||||
return e / n
|
194
Cours/cours3.py
Normal file
194
Cours/cours3.py
Normal file
@ -0,0 +1,194 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Created on Fri Oct 4 08:06:51 2019
|
||||
|
||||
@author: suwako
|
||||
"""
|
||||
|
||||
# Structures de données
|
||||
|
||||
a = [0, 1, 'abc', 4.5, 'de', 6] # un niveau
|
||||
b = [[], [1], [1, 2], [1, 2, 3]] # deux niveaux
|
||||
|
||||
a[2] # On attend 'abc'
|
||||
b[3][1] # On attend 2
|
||||
|
||||
a[1:5] # Slicing
|
||||
a[1:-1] # La même chose
|
||||
a[:4] # On peut ommetre une partie
|
||||
a[-3:]
|
||||
li = list(range(11)) # Création d'une liste à partir d'une énumération
|
||||
li[2:9:3] # On peut rajouter un pas
|
||||
li[3::2]
|
||||
li[:-1:2]
|
||||
li[-1:0:-1]
|
||||
|
||||
list("Louis-Le-Grand")
|
||||
|
||||
[x for x in range(11) if x * x <= 50]
|
||||
|
||||
a, b = [1, 2, 3], [2, 4, 6]
|
||||
[(x, y) for x in a for y in b]
|
||||
[(x, y, z) for x in range(1, 20) for y in range(x, 20) for z in range(y, 20) if x**2 + y**2 == z**2]
|
||||
|
||||
# Concaténation
|
||||
[2, 4, 6, 8] + [1, 3, 5, 7]
|
||||
|
||||
# Duplication
|
||||
[1, 2, 3]*3
|
||||
|
||||
# Mutation
|
||||
li = list(range(11))
|
||||
li[3] = 'a'
|
||||
li[3:7] = 'abc' # On perd un élément ici
|
||||
li
|
||||
|
||||
li = list(range(10))
|
||||
li[1::2] = li[0::2]
|
||||
li
|
||||
|
||||
li = list(range(11))
|
||||
del li[3:6] # Suppression d'élements
|
||||
li
|
||||
|
||||
li = ['a', 'b', 'c', 'd']
|
||||
li.append('e') # Ajout d'élément
|
||||
li
|
||||
li.insert(2, 'x') # Insertion d'élément
|
||||
li
|
||||
|
||||
li = list(range(1, 6)) * 2
|
||||
li.remove(4) # On retire la première occurence de 4
|
||||
li
|
||||
|
||||
li.pop(-1) # Affiche le dernier élement et le retire de la liste
|
||||
li
|
||||
|
||||
li = list(range(1, 4)) * 2
|
||||
li.reverse() # On renverse la liste ; Attention, une méthode modifie l'objet
|
||||
li
|
||||
|
||||
li.sort() # On trie la liste par ordre croissant
|
||||
li
|
||||
|
||||
sorted(li) # Ici, on trie également, mais on ne modifie pas la liste originale
|
||||
li
|
||||
|
||||
list('abcde') # Transformation de type
|
||||
str(list('abcde'))
|
||||
tuple([1, 2, 3, 4])
|
||||
|
||||
# Les listes sont mutables
|
||||
lst = [1, 2, 3]
|
||||
lst[0] = 4
|
||||
lst
|
||||
|
||||
tup = (1, 2, 3)
|
||||
tup[0] = 4
|
||||
chr = 'abc'
|
||||
chr[0] = 'd'
|
||||
|
||||
l1 = [1, 2, 3]
|
||||
id(l1)
|
||||
tup1 = (1, 2, 3)
|
||||
id(tup1)
|
||||
l1[0] = 4
|
||||
id(l1)
|
||||
tup1 = (4, 2, 3)
|
||||
id(tup1)
|
||||
|
||||
l2 = l1
|
||||
id(l1) == id(l2)
|
||||
tup2 = tup1
|
||||
id(tup1) == id(tup2)
|
||||
|
||||
l1[0] = 1
|
||||
l2
|
||||
tup1 = (1, 2, 3)
|
||||
tup2
|
||||
|
||||
l3 = l1[:]
|
||||
l3 = l1.copy()
|
||||
l3 = [x for x in l1]
|
||||
|
||||
l1 = [[1, 2, 3], [4, 5, 6]]
|
||||
l2 = l1[:]
|
||||
id(l1) == id(l2)
|
||||
id(l1[0]) == id(l2[0])
|
||||
|
||||
from copy import deepcopy
|
||||
l3 = deepcopy(l1)
|
||||
id(l1) == id(l3)
|
||||
id(l1[0]) == id(l3[0])
|
||||
|
||||
def somme(l):
|
||||
s = 0
|
||||
for x in l:
|
||||
s += x
|
||||
return s
|
||||
def moyenne(l):
|
||||
s = 0
|
||||
for x in l:
|
||||
s += x
|
||||
return s / len(l)
|
||||
|
||||
def variance(l):
|
||||
n = len(l)
|
||||
s = c = 0
|
||||
for x in l:
|
||||
s += x
|
||||
c += x * x
|
||||
return c/n - (s/n) * (s/n)
|
||||
|
||||
def maximum(l):
|
||||
m = l[0]
|
||||
for x in l:
|
||||
if x > m:
|
||||
m = x
|
||||
return m
|
||||
def indice_max(l):
|
||||
i, m = 0, l[0]
|
||||
for k in range(1, len(l)):
|
||||
if l[k] > m:
|
||||
i, m = k, l[k]
|
||||
return i
|
||||
|
||||
def maximum(l):
|
||||
m = l[0]
|
||||
for x in l:
|
||||
if x > m:
|
||||
m = x
|
||||
return m
|
||||
|
||||
def indice_du_max(l):
|
||||
i, m = 0, l[0]
|
||||
for (k, x) in enumerate(l):
|
||||
if x > m:
|
||||
i, m = k, x
|
||||
return i
|
||||
def cherche(x, l):
|
||||
k, rep = 0, False
|
||||
while k < len(l) and not rep:
|
||||
rep = l[k] == x
|
||||
k += 1
|
||||
return rep
|
||||
def cherche(x, l):
|
||||
for y in l:
|
||||
if y == x:
|
||||
return True
|
||||
return False
|
||||
|
||||
(x in l)
|
||||
|
||||
def cherche_dicho(x, l):
|
||||
i, j = 0, len(l)
|
||||
while i < j:
|
||||
k = (i + j) // 2
|
||||
if l[k] == x:
|
||||
return True
|
||||
elif l[k] > x:
|
||||
j = k
|
||||
else:
|
||||
i = k + 1
|
||||
return False
|
33
Cours/cours4.py
Normal file
33
Cours/cours4.py
Normal file
@ -0,0 +1,33 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
|
||||
def base10(x, b=2):
|
||||
s = 0
|
||||
k = len(x) - 1
|
||||
for a in x:
|
||||
s += int(a) * b ** k
|
||||
k -= 1
|
||||
return s
|
||||
|
||||
|
||||
def base10Horner(x, b=2):
|
||||
u = 0
|
||||
for a in x:
|
||||
u = b * u + int(a)
|
||||
return u
|
||||
|
||||
|
||||
def baseb(x, b):
|
||||
s = ""
|
||||
y = x
|
||||
while y > 0:
|
||||
s = str(y % b) + s
|
||||
y //= b
|
||||
return s
|
||||
|
||||
|
||||
print(1 + 2**53)
|
||||
print(1. + 2**53)
|
||||
print((1. + 2.**53) - 2.**53)
|
||||
print(1. + (2.**53 - 2.**53))
|
91
DM1/main.py
Normal file
91
DM1/main.py
Normal file
@ -0,0 +1,91 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Created on Sat Nov 2 12:27:26 2019
|
||||
|
||||
@author: suwako
|
||||
"""
|
||||
|
||||
|
||||
def estEgyptienne(lst):
|
||||
last = lst[0]
|
||||
for element in lst[1:]:
|
||||
print(element,last)
|
||||
if element <= last or last < 2:
|
||||
return False
|
||||
last = element
|
||||
return True
|
||||
|
||||
|
||||
def rationnel(lst):
|
||||
p, q = 0, 1
|
||||
for i in range(len(lst)):
|
||||
q *= lst[i]
|
||||
reduite = lst[:i]+lst[i+1:]
|
||||
terme = 1
|
||||
for element in reduite:
|
||||
terme *= element
|
||||
p += terme
|
||||
return (p, q)
|
||||
|
||||
def fractionEgyptienne(p, q):
|
||||
a = p
|
||||
b = q
|
||||
lst=[]
|
||||
while b % a != 0:
|
||||
print(a, b, lst)
|
||||
m = b // a + 1
|
||||
lst.append(m)
|
||||
a = a * m - b
|
||||
b = b * m
|
||||
print(a, b, lst)
|
||||
lst.append(b // a)
|
||||
return lst
|
||||
|
||||
|
||||
def estPrefixe(u, v):
|
||||
if len(v) > len(u):
|
||||
return False
|
||||
for i in range(len(v)):
|
||||
if u[i] != v[i]:
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
def bord(u):
|
||||
for i in range(1, len(u)):
|
||||
if estPrefixe(u, u[i:]):
|
||||
return u[i:]
|
||||
return ""
|
||||
|
||||
|
||||
def Bords(u):
|
||||
lst = [None]
|
||||
for k in range(1, len(u) + 1):
|
||||
lst.append(len(bord(u[:k])))
|
||||
return lst
|
||||
|
||||
|
||||
def estFacteur(u, v):
|
||||
for i in range(len(u)-len(v) + 1):
|
||||
if estPrefixe(u[i:i+len(v)], v):
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def estFacteurMP(u, v):
|
||||
bords = Bords(v)
|
||||
i=0
|
||||
while i <= len(u) - len(v):
|
||||
skip=False
|
||||
for j in range(len(v)):
|
||||
print(i, j)
|
||||
if u[i+j]!=v[j]:
|
||||
i += bords[j+1] + 1
|
||||
skip=True
|
||||
break
|
||||
if skip:
|
||||
continue
|
||||
return True
|
||||
return False
|
||||
|
BIN
MPSI 19-20.zip
Normal file
BIN
MPSI 19-20.zip
Normal file
Binary file not shown.
181
Pivot/main.py
Executable file
181
Pivot/main.py
Executable file
@ -0,0 +1,181 @@
|
||||
#!/usr/bin/env python3
|
||||
import random
|
||||
import fractions
|
||||
|
||||
|
||||
class System():
|
||||
|
||||
def __str__(self):
|
||||
return str('\n'.join([', '.join(list(map(str, i))) for i in self.coeffs]))
|
||||
|
||||
def __init__(self, coeffs, quiet=True, text=None, parent=None):
|
||||
if text:
|
||||
pass
|
||||
else:
|
||||
self.coeffs = [[fractions.Fraction(j) for j in i] for i in coeffs]
|
||||
self.quiet = quiet
|
||||
self.parent = parent
|
||||
self.proper_offset = 0
|
||||
|
||||
def crop(self):
|
||||
self.proper_offset += 1
|
||||
self.coeffs = [[j for index,j in enumerate(i) if index > 0] for i in self.coeffs]
|
||||
return self
|
||||
|
||||
def triangularise(self):
|
||||
# Find a good pivot
|
||||
if len(self.coeffs) == 1:
|
||||
return self
|
||||
pivot = 0
|
||||
for i, line in enumerate(self.coeffs):
|
||||
if not self.coeffs[pivot][0] or line[0] == 0:
|
||||
pivot = i
|
||||
continue
|
||||
if line[0] == 1:
|
||||
pivot = i
|
||||
break
|
||||
if line[0].denominator == 1:
|
||||
if line[0] < self.coeffs[pivot][0]:
|
||||
pivot = i
|
||||
continue
|
||||
else:
|
||||
if line[0].denominator < self.coeffs[pivot][0].denominator:
|
||||
pivot = i
|
||||
continue
|
||||
self.swap(0, pivot)
|
||||
# If we couldn't find a pivot, the first coeff of each line is 0.
|
||||
# That means the system is not of the defined dimension.
|
||||
# Let's fix it.
|
||||
if self.coeffs[0][0] == 0:
|
||||
self.crop()
|
||||
return self.triangularise()
|
||||
|
||||
# Cancel the first coefficient of each line
|
||||
for i in range(1, len(self.coeffs)):
|
||||
factor = self.coeffs[i][0] / self.coeffs[0][0]
|
||||
#print()
|
||||
#print(self)
|
||||
self.add(i, 0, factor)
|
||||
#print(self)
|
||||
#print()
|
||||
# Triangularise the subsystem
|
||||
sub = self.subsystem().triangularise()
|
||||
for i in range(len(sub.coeffs)):
|
||||
for j in range(len(sub.coeffs[0])):
|
||||
self.coeffs[i + sub.lineoffset() - self.lineoffset()][j + sub.offset() - self.offset()] = sub.coeffs[i][j]
|
||||
return self
|
||||
|
||||
def add(self, l1, l2, factor):
|
||||
sl1,sl2 = [self.lineoffset() + i + 1 for i in [l1,l2]]
|
||||
print("L%s <- L%s + (%s)*L%s"%(str(sl1), str(sl1), str(factor), str(sl2)))
|
||||
term = [i*factor for i in self.coeffs[l2]]
|
||||
res = [self.coeffs[l1][i] - term[i] for i in range(len(self.coeffs[0]))]
|
||||
self.coeffs[l1] = res
|
||||
return self
|
||||
|
||||
def swap(self, l1, l2):
|
||||
self.coeffs[l1], self.coeffs[l2] = self.coeffs[l2], self.coeffs[1]
|
||||
return self
|
||||
|
||||
def offset(self):
|
||||
if self.parent:
|
||||
return self.parent.offset() + self.proper_offset + 1
|
||||
else:
|
||||
return self.proper_offset
|
||||
|
||||
def lineoffset(self):
|
||||
if self.parent:
|
||||
return self.parent.lineoffset() + 1
|
||||
else:
|
||||
return 0
|
||||
|
||||
def subsystem(self):
|
||||
print(self)
|
||||
subcoefs = [[j for j in i[1:]] for i in self.coeffs[1:]]
|
||||
return self.__class__(subcoefs, parent=self)
|
||||
|
||||
k=3
|
||||
test = System([[fractions.Fraction(str(random.randint(1,50))+'/'+str(1+0*random.randint(1,10))) for j in range(k+1)] for i in range(k)], quiet=False)
|
||||
print(test.triangularise())
|
||||
"""class Systeme():
|
||||
def __str__(self):
|
||||
return '\n'.join([''.join([((str(self.coeffs[i][j])) + ["x" + str(j+self.offset),"tbcdefghijklmnopqrstuvwxyz"[(j+23+self.offset)%26]][True] + (' + ' if self.coeffs[i][j+1:-1].count(0) == 0 else ' ') if self.coeffs[i][j] else '' ) if j != len(self.coeffs[0]) - 1 else "= " + str(self.coeffs[i][j]) for j in range(len(self.coeffs[0]))]) for i in range(len(self.coeffs))])
|
||||
|
||||
def __init__(self, coeffs, quiet=True, text=None, parent=None, offset=0):
|
||||
if text:
|
||||
self.coeffs=[list(map(fractions.Fraction, map(int, i.split(',')))) for i in text.split(';')]
|
||||
else:
|
||||
self.coeffs = [[fractions.Fraction(j) for j in i] for i in coeffs]
|
||||
self.quiet=quiet
|
||||
self.parent=parent
|
||||
self.offset=offset
|
||||
def pivot(self, new_pivot):
|
||||
self.quiet or print("L%s <-> L"%(str(self.offset + 1))+ str(new_pivot+1+self.offset))
|
||||
self.coeffs[0], self.coeffs[new_pivot] = self.coeffs[new_pivot], self.coeffs[0]
|
||||
return self
|
||||
|
||||
def cancel(self, line):
|
||||
if line == 0:
|
||||
return self
|
||||
if self.coeffs[0][0] == 0:
|
||||
return self
|
||||
line_coeff = self.coeffs[line][0] / self.coeffs[0][0]
|
||||
self.quiet or print("L"+str(line+1+self.offset) + " <- L" + str(line+1+self.offset) + " - ("+str(line_coeff)+")*L"+str(self.offset+1))
|
||||
self.coeffs[line] = [self.coeffs[line][i] - line_coeff * self.coeffs[0][i] for i in range(len(self.coeffs[line]))]
|
||||
return self
|
||||
|
||||
def solve(self):
|
||||
self.quiet or print("\nSolving system of dimension : ", len(self.coeffs))
|
||||
self.quiet or print(self)
|
||||
|
||||
if len(self.coeffs) == 1:
|
||||
return self
|
||||
|
||||
#Selecting pivot
|
||||
pivot = 0
|
||||
for i in range(len(self.coeffs)):
|
||||
if self.coeffs[i][0] != 0 and (self.coeffs[i][0] < self.coeffs[pivot][0] or self.coeffs[pivot][0]==0) :
|
||||
pivot = i
|
||||
self.pivot(pivot)
|
||||
|
||||
#Canceling the first coeffs of each equation (except the first one)
|
||||
self.quiet or print("\n<=>\n")
|
||||
for i in range(1, len(self.coeffs)):
|
||||
self.cancel(i)
|
||||
self.quiet or print(self)
|
||||
|
||||
#Solving the subsystem
|
||||
for i, line in enumerate(Systeme([[self.coeffs[i][j] for j in range(1, len(self.coeffs[i]))]for i in range(1, len(self.coeffs))], quiet=self.quiet, parent=self, offset=(self.offset+1)).solve().coeffs):
|
||||
for j in range(len(line)):
|
||||
self.coeffs[i+1][j+1] = line[j]
|
||||
self.quiet or print()
|
||||
return self
|
||||
|
||||
def find(self, this):
|
||||
if self.coeffs[this][:-1].count(0) < len(self.coeffs[this][:-1]) - 1:
|
||||
self.cleanline(this)
|
||||
if self.coeffs[this][:-1].count(0) == len(self.coeffs[this][:-1]) - 1:
|
||||
if self.coeffs[this][this]==1:
|
||||
return self.coeffs[this][-1]
|
||||
else:
|
||||
self.coeffs[this][-1], self.coeffs[this][this] = self.coeffs[this][-1] / self.coeffs[this][this], 1
|
||||
return self.coeffs[this][-1]
|
||||
raise Exception("Unicity error")
|
||||
|
||||
def cleanline(self, line):
|
||||
for i in range(len(self.coeffs[line][:-1:])-1, 0-1, -1):
|
||||
if len(self.coeffs[line][:-1]) - self.coeffs[line][:-1].count(0) <= 1:
|
||||
return self
|
||||
if self.coeffs[line][i] !=0:
|
||||
self.coeffs[line][-1], self.coeffs[line][i]=self.coeffs[line][-1] - self.coeffs[line][i]*self.find(i), 0
|
||||
return self
|
||||
def clean(self):
|
||||
self.find(0)
|
||||
return self
|
||||
"""
|
||||
"""
|
||||
print(test)
|
||||
print()
|
||||
print(test.solve())
|
||||
print()
|
||||
print(test.clean())"""
|
BIN
Pivot/test.txt.gz
Normal file
BIN
Pivot/test.txt.gz
Normal file
Binary file not shown.
BIN
TP/TP1 tortue bonus.pdf
Executable file
BIN
TP/TP1 tortue bonus.pdf
Executable file
Binary file not shown.
681
TP/TP1.py
Executable file
681
TP/TP1.py
Executable file
@ -0,0 +1,681 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#!/usr/bin/python3
|
||||
"""
|
||||
|
||||
|
||||
|
||||
TP1 pour découvrir Python
|
||||
|
||||
La plupart des objets seront revus au cours de l'année.
|
||||
Quel est l'objectif?
|
||||
Apprivoiser la syntaxe du language python. Je vous propose d'exécuter les commandes suivantes et de faire le maximum d'expérience (en testant des variantes des codes proposés)
|
||||
|
||||
"""
|
||||
############################
|
||||
# Utilisation dans Pyzo #
|
||||
############################
|
||||
|
||||
# Vous pouvez utiliser le mode interactif proposé par IEP, il suffit d'écrire le code dans le shell ouvert ci-dessus. Testez en écrivant 2+45 aprés le >>> et appuyer sur entrée. Dans le mode intéractif, les codes ne pourront pas étre conservés ....
|
||||
|
||||
# vous pouvez également utiliser un fichier *.py contenant un code source. Il suffit ensuite de "compiler"/ "interpréter" votre code pour que qu'il s'exécute dans le shell.
|
||||
|
||||
#exemple : (surligner le code é exécuter et cliquer dans l'onglet "Exécuter la selection")
|
||||
|
||||
####################
|
||||
# Premiére étape #
|
||||
####################
|
||||
|
||||
|
||||
2+45
|
||||
|
||||
# Il ne se passe rien ...
|
||||
|
||||
print(2+45)
|
||||
|
||||
# N'oubliez pas la commande "print" ou faite un copier-coller dans le shell.
|
||||
|
||||
|
||||
####################
|
||||
# 1-Les entiers #
|
||||
####################
|
||||
|
||||
|
||||
|
||||
print(12*45+5%3)
|
||||
print(12**5)
|
||||
|
||||
print(7/3)
|
||||
print(7//3)
|
||||
print(7//3.)
|
||||
print(7/3)
|
||||
|
||||
# Quel est le type de l'objet utilisé ?
|
||||
|
||||
print(type (7))
|
||||
print(type (7.))
|
||||
|
||||
# Quelle est la différence entre 'int' et 'float'?
|
||||
|
||||
# Quelques mots sur la fonction id() : identificateur (unique) associé à l'objet. i.e. son adresse en mémoire.
|
||||
|
||||
print(id(True))
|
||||
print(id(False))
|
||||
print(id(2))
|
||||
a=2
|
||||
print(id(a))
|
||||
b=a
|
||||
print(id(b)==id(a))
|
||||
b=3
|
||||
#
|
||||
a=2
|
||||
b=2.0
|
||||
print(id(b)==id(a))
|
||||
|
||||
# tester une égalité :
|
||||
|
||||
print(2==3)
|
||||
print(2==2)
|
||||
print(2==2.) # surprenant non !!
|
||||
|
||||
|
||||
a=2
|
||||
b=2
|
||||
print(a is b)
|
||||
print(a==b)
|
||||
print(id(a))
|
||||
|
||||
a=2
|
||||
b=2.
|
||||
print(a is b)
|
||||
print(a==b)
|
||||
|
||||
|
||||
print(21%5) # Le reste de la division euclidienne....un peu de modulo. Trés utilie pour un imposer un critére de divisibilité.
|
||||
|
||||
|
||||
|
||||
# un pgcd = plus grand divisuer commun.
|
||||
|
||||
import fractions as frc # importer le module "fractions" sous le nom "frc" qui contient
|
||||
print(dir(frc))
|
||||
|
||||
|
||||
a=13572468
|
||||
b=12345678
|
||||
print(frc.gcd(a,b))
|
||||
|
||||
print(gcd(a,b))
|
||||
|
||||
|
||||
from fractions import * # permet d'utiliser la fonction gcd sans le suffixe "frc".
|
||||
a=13572468
|
||||
b=12345678
|
||||
print(gcd(a,b))
|
||||
|
||||
# Quelle est cette fonction "gcd"? il suffit d'ouvrir le document fractions.py pour lire la définition de gcd suivante
|
||||
def gcd(a, b):
|
||||
while b:
|
||||
a, b = b, a%b
|
||||
return a
|
||||
|
||||
# é relire aprés la petite partie sur les fonctions ...
|
||||
|
||||
|
||||
### Attention: pour la culture:
|
||||
|
||||
print(5^2) # D'ou vient ce résultat ?
|
||||
print(42^17)
|
||||
# une explication rapide à méditer: l'écriture binaire de 42 est 42=1x32+0x16+1x8+0x4+1x2+0x1
|
||||
# En binaire 42= 101010 et 17=10001
|
||||
# 42^17=111011 (le ou exclusif)= 1x32+1x16+1x8+0x4+1x2+1x1=59
|
||||
# ex : 5^2= 101^10=111=7
|
||||
|
||||
|
||||
####################
|
||||
# 2-Les flottants #
|
||||
####################
|
||||
|
||||
print(1/3)
|
||||
print(pi)
|
||||
|
||||
# nous aurons souvent besoin d'aide ... des bibliothéques/ des modules . Pi est défini dans la bibliothéque math.
|
||||
# on appelle une commande par "math.????"
|
||||
|
||||
import math
|
||||
print(dir(math)) # elle contient quoi?
|
||||
|
||||
print(math.pi)
|
||||
|
||||
# on peut changer le nom si nécessaire
|
||||
|
||||
import math as m
|
||||
print(m.pi)
|
||||
|
||||
print(type (m.pi))
|
||||
|
||||
# Les fonctions usuelles
|
||||
|
||||
print(m.cos(2*m.pi))
|
||||
print(m.sqrt(2*m.pi))
|
||||
|
||||
# quelques calculs avec des flottants :
|
||||
|
||||
print(2/3**6)
|
||||
print((2/3)**6)
|
||||
print((1/2**3)*2**3)
|
||||
|
||||
# Comment controler l'affichage ?
|
||||
|
||||
print(-3.445e02)
|
||||
print(format(-3.445e-5,'.10f'))
|
||||
print(format(m.pi,'.30f'))
|
||||
|
||||
|
||||
##################################
|
||||
# 3-Variables et affectations #
|
||||
##################################
|
||||
|
||||
|
||||
print(x)
|
||||
x=5
|
||||
print(x)
|
||||
x:=5
|
||||
print(x==4)
|
||||
print(x=5)
|
||||
print(x==5)
|
||||
print(X) # respecter la casse
|
||||
x='x'
|
||||
print(x)
|
||||
|
||||
x=1
|
||||
x=x+1
|
||||
print(x)
|
||||
|
||||
# un test plus évolué:
|
||||
|
||||
x=1
|
||||
y=2
|
||||
x=(x+y)/2
|
||||
y=(x*y)
|
||||
print(x,y)
|
||||
|
||||
# Est-ce clair?
|
||||
|
||||
c=x,y,z=1,2,3
|
||||
print(c)
|
||||
print(x*y**z)
|
||||
|
||||
# De la syntaxe
|
||||
|
||||
s=1
|
||||
s=s+1
|
||||
print(s)
|
||||
|
||||
s=2
|
||||
s+=4 # Quel est le sens de += ? (essayer -= ou *= ou **=)
|
||||
print(s)
|
||||
|
||||
|
||||
|
||||
###########################
|
||||
# Complément (nombres) # cette partie sera rarement utilisée ... elle est indicative.
|
||||
###########################
|
||||
|
||||
# Les fractions
|
||||
|
||||
from fractions import *
|
||||
a=Fraction(24,10)
|
||||
print(a) # simplification !
|
||||
print(a.numerator )
|
||||
print(a.denominator)
|
||||
|
||||
a=Fraction.from_float(2.7)
|
||||
print(a)
|
||||
|
||||
|
||||
# Les complexes
|
||||
|
||||
z=complex(4,3)
|
||||
print(z)
|
||||
|
||||
print(z.real)
|
||||
print(z.imag)
|
||||
|
||||
i=complex(0,1)
|
||||
print(i**2)
|
||||
|
||||
|
||||
# pour le reste .... consulter dir(complex)
|
||||
|
||||
# Une premiére approche de quelques types... à approfondir et explorer
|
||||
# (les listes, les Tuplets, ....)
|
||||
|
||||
##################################
|
||||
# 4-Les listes #
|
||||
##################################
|
||||
|
||||
a='test'
|
||||
|
||||
print(a)
|
||||
l=[2,5,2.2, 'test']
|
||||
|
||||
print(l)
|
||||
print(l[1])
|
||||
print(l[0])
|
||||
print(l[10])
|
||||
print(len(l))
|
||||
|
||||
print(l[-1])
|
||||
print(l[-5])
|
||||
|
||||
print(l[0:2]) # les intervalles d'entiers sont ouverts é droite
|
||||
print(l[-2:2])
|
||||
print(l[0:len(l)])
|
||||
print(l[-3:4])
|
||||
print(l[-4:4])
|
||||
|
||||
l[2]=15
|
||||
print(l) # les listes sont mutables...
|
||||
|
||||
# une liste d'entiers . (Attention les intervalles sont ouverts é droite.)
|
||||
|
||||
I=range(2,9)
|
||||
print(type(I))
|
||||
# range= gamme , plage.
|
||||
|
||||
I=range(2,9,2)
|
||||
print(list(I))
|
||||
|
||||
|
||||
print(list(I))
|
||||
print(3 in I)
|
||||
|
||||
# nous complèterons l'étude des listes dans le TP2
|
||||
|
||||
##################################
|
||||
# 5-Les Tuples #
|
||||
##################################
|
||||
|
||||
t=3,4,5,6,'7'
|
||||
print(t)
|
||||
|
||||
print(t[0])
|
||||
t[0]=1 # Attention .... les Tuples ne sont pas mutables
|
||||
|
||||
a,b,c=1,2,3
|
||||
print(a)
|
||||
|
||||
a=range(2,10)
|
||||
print(a[2])
|
||||
|
||||
|
||||
##################################
|
||||
# 5-Les chaînes de charactères #
|
||||
##################################
|
||||
|
||||
a='prof de maths'
|
||||
b="prof de maths"
|
||||
print(a==b) # au moins c'est dit !!!
|
||||
print(a is b )
|
||||
|
||||
print(len(a))
|
||||
print(a[7:13])
|
||||
print(a[-1])
|
||||
|
||||
a[0]='r' # Que dire des chaines?
|
||||
|
||||
a='il fait'
|
||||
b=' chaud'
|
||||
print(a+b)
|
||||
|
||||
c=''
|
||||
c+='alpha'
|
||||
print(c)
|
||||
|
||||
|
||||
##################################
|
||||
# 5-Les ensembles #
|
||||
##################################
|
||||
|
||||
s={'je' , 2, 'vous', 34}
|
||||
print(s)
|
||||
|
||||
print(3 in s)
|
||||
print(2 in s)
|
||||
|
||||
a='je' in s
|
||||
b='nous' in s
|
||||
print(a,b)
|
||||
|
||||
|
||||
# les ensembles sont itérables !
|
||||
|
||||
s={'je' , 2, 'vous', 34}
|
||||
for x in s: print(x*2) # la syntaxe dans le prochaine TP
|
||||
|
||||
|
||||
# Les opérations ensemblistes
|
||||
|
||||
a={1,2,3,4,5,6}
|
||||
p={2,3,4,6}
|
||||
i={1,3,5}
|
||||
|
||||
print(p&i)# l'intersection
|
||||
print(p|i)# l'union
|
||||
print(a-p) # no comment
|
||||
|
||||
|
||||
# Vérification des types et changements de type
|
||||
|
||||
print(type('prof de maths')) # string
|
||||
t=3,4,5,6,'7'
|
||||
print(type(t)) # tuple
|
||||
l=[2,5,2.2, 'test']
|
||||
print(type(l)) # list
|
||||
|
||||
l=list(a)
|
||||
print(l)
|
||||
t=tuple(a)
|
||||
print(t)
|
||||
s=set(l)
|
||||
print(s)
|
||||
|
||||
print(type(print))
|
||||
|
||||
|
||||
##################################
|
||||
# -Les dictionnaires #
|
||||
##################################
|
||||
|
||||
|
||||
d={'a':1,'b':2,'c':3}
|
||||
for i in d : print(i)
|
||||
|
||||
for i in d : print(i, end='')
|
||||
print()
|
||||
|
||||
print(d['a'])
|
||||
print(d)
|
||||
print(d.keys())
|
||||
print(d.values())
|
||||
print(d.items())
|
||||
|
||||
l=[(1,'b'),(2,'c'),(3,'g')]
|
||||
print(dict(l))
|
||||
|
||||
#############################################################
|
||||
# 5-Tester avec if / Instruction conditionelle #
|
||||
#############################################################
|
||||
|
||||
if 2013%2==0:
|
||||
print('2013 est pair')
|
||||
else:
|
||||
print('Sans blague ....')
|
||||
|
||||
if 2013%2 == 1:
|
||||
print('test 1 ok ')
|
||||
|
||||
if ((2013%2 == 1) and (2013 > 10**3)) or (2013 < 0):
|
||||
print('test 2 ok ')
|
||||
|
||||
if ((2013%2 == 1) and (2013 > 10**4)) or (2013 < 0):
|
||||
print('test 2 ok ')
|
||||
else:
|
||||
print('test 2 echec ')
|
||||
|
||||
# Attention à la présentation indentée
|
||||
|
||||
if ((2013%2 == 1) and (2013 > 10**4)) or (2013 < 0):
|
||||
print('test 2 ok ')
|
||||
else:
|
||||
print('test 2 echec ')
|
||||
|
||||
# et le elif
|
||||
|
||||
n=11
|
||||
|
||||
if n%3==0:
|
||||
print(n,' est congru a 0 modulo 3')
|
||||
elif n%3==1:
|
||||
print(n,' est congru a 1 modulo 3')
|
||||
else:
|
||||
print(n,' est congru a 2 modulo 3')
|
||||
|
||||
|
||||
|
||||
##################################
|
||||
# 6-Les fonctions #
|
||||
##################################
|
||||
# il s'agit d'une première approche...
|
||||
# la syntaxe:
|
||||
# def lenomdelafonction(variable):
|
||||
#
|
||||
#corps de la fonction
|
||||
#
|
||||
#return(le résultat)
|
||||
|
||||
def f(x):
|
||||
return(x+1)
|
||||
|
||||
print(f(1))
|
||||
#
|
||||
def testparite(n): # le nom
|
||||
res=''
|
||||
if n%2==0:
|
||||
res+='est pair'
|
||||
else: res+='est impair'
|
||||
return(n,res)
|
||||
|
||||
print(testparite(3) )
|
||||
|
||||
|
||||
def puiss(x,n):
|
||||
return(x**n)
|
||||
|
||||
|
||||
puiss(11,3)
|
||||
|
||||
|
||||
def abs(x):
|
||||
if x>0:
|
||||
return x
|
||||
else:
|
||||
return -x
|
||||
|
||||
print(abs(-2))
|
||||
|
||||
##################################
|
||||
# 8-Les polynémes #
|
||||
##################################
|
||||
# cette partie sera très utile lors de l'oral de Math/Info du concours Centrales/Supélec mais un peu moins pendant la première année
|
||||
# nécessite le module "numpy"
|
||||
from numpy import *
|
||||
p=poly1d([2,3,4,10]) # donne le polynéme é l'aide des coefficients
|
||||
print(p)
|
||||
|
||||
p=poly1d([2,3,4,10], True) # donne le polynéme é l'aide des racines
|
||||
print(p)
|
||||
|
||||
print(p.order) # le degré
|
||||
print(p.roots) # les racines
|
||||
print(p.coeffs) # les coefficients
|
||||
|
||||
print(p(5.)) # évaluation en un point
|
||||
|
||||
##################################
|
||||
# 9-Tracer des courbes #
|
||||
##################################
|
||||
|
||||
# Pour retrouver les codes ... vister le site http://matplotlib.sourceforge.net/gallery.html
|
||||
|
||||
|
||||
import matplotlib.pyplot as plt
|
||||
import numpy as np
|
||||
|
||||
# une courbe
|
||||
|
||||
x=np.linspace(-5,5,100) # abscisse de -5 à 5 avec 100 points
|
||||
plt.plot(x,sin(x)) # on utilise la fonction sinus de Numpy
|
||||
plt.ylabel('fonction sinus')
|
||||
plt.xlabel("l'axe des abcisses")
|
||||
plt.show()
|
||||
#plt.savefig(""D:/Nicolas/Informatique/Python/MPSI/fig1.pdf") # changer le chemin
|
||||
|
||||
|
||||
# 2 pour le prix d'une
|
||||
|
||||
|
||||
x = np.arange(0, 10, 0.2)
|
||||
y1 = np.sin(x)
|
||||
y2 = np.cos(x)
|
||||
# Créer une figure
|
||||
fig = plt.figure()
|
||||
# Un tracé dans la figure
|
||||
ax = fig.add_subplot(111)
|
||||
#2 tracés avec le méme axe
|
||||
l1, l2 = ax.plot(x, y1, 'd', x,y2,'+')
|
||||
#Légende dans le coin en haut é gauche
|
||||
fig.legend((l1, l2),('sin','cos'),'upper left')
|
||||
# L'axe des x est 't'
|
||||
ax.set_xlabel('t')
|
||||
# L'axe des y est 't'
|
||||
ax.set_ylabel('y')
|
||||
plt.show()
|
||||
#plt.savefig("D:/Nicolas/Informatique/Python/MPSI/TPfig2.pdf")
|
||||
|
||||
##################################
|
||||
# Divers #
|
||||
##################################
|
||||
|
||||
|
||||
# controler le temps:
|
||||
|
||||
import time
|
||||
print(time.asctime()) # Quel est l'origine?
|
||||
|
||||
|
||||
print(dir(time))
|
||||
|
||||
def d(x):
|
||||
return(format(x,'.10f'))
|
||||
d(m.pi)
|
||||
|
||||
# Que fait la fonction d?
|
||||
|
||||
t=time.time()
|
||||
d(time.time()-t)
|
||||
|
||||
|
||||
t=time.time()
|
||||
s=0
|
||||
for i in range(10**5): s=0
|
||||
print(time.time()-t)
|
||||
# Tester plusieurs fois la fonction précédente (les 4 lignes )
|
||||
|
||||
|
||||
# Cmment simuler le hasard?
|
||||
|
||||
from random import *
|
||||
|
||||
print(dir(Random))
|
||||
|
||||
print(randint(1,6))
|
||||
print(random())
|
||||
|
||||
|
||||
# un petit jeu é tester :
|
||||
print('voulez-vous jouer au dés (le temps dattente dun 6)? o/n')
|
||||
r=input()
|
||||
if r=='n':
|
||||
print('a plus ... alors')
|
||||
else:
|
||||
d=0
|
||||
i=0
|
||||
while (d<6):
|
||||
print('lance le dé')
|
||||
input()
|
||||
d=randint(1,6)
|
||||
i+=1
|
||||
if d==6:
|
||||
print('tu as obtenu un ', d, ' en ', i,' etapes')
|
||||
else:
|
||||
print('tu as obtenu un ', d)
|
||||
|
||||
|
||||
|
||||
# question difficile é méditer (en prévision des proba !)
|
||||
from random import *
|
||||
from math import *
|
||||
p=len([n for n in range(1000000) if hypot(random(),random())<1])
|
||||
print(p/1000000*4) # ça ressemble à Pi ... non? un argument pour le justifier.
|
||||
|
||||
help(hypot)
|
||||
|
||||
# installer un module avec pip (compatible pyzo).... (inutile en TP !)
|
||||
#pip install "le module"
|
||||
|
||||
|
||||
|
||||
##################################
|
||||
# Quelques liens #
|
||||
##################################
|
||||
|
||||
# pour la doc de python : http://docs.python.org/2/
|
||||
# pour la doc de pyzo : http://www.pyzo.org
|
||||
# pour la doc de numpy et scipy : http://docs.scipy.org/doc/
|
||||
# pour la doc de matplot lib : http://matplotlib.org
|
||||
# Le livre http://inforef.be/swi/download/apprendre_python3_5.pdf
|
||||
|
||||
|
||||
|
||||
|
||||
##################################
|
||||
# Un peu de 3D pour le fun #
|
||||
##################################
|
||||
|
||||
|
||||
|
||||
## Un premier jet en 3D
|
||||
|
||||
from mpl_toolkits.mplot3d import Axes3D
|
||||
import matplotlib.pyplot as plt
|
||||
import numpy as np
|
||||
|
||||
fig = plt.figure()
|
||||
ax = fig.add_subplot(111, projection='3d')
|
||||
|
||||
u = np.linspace(0, 2 * np.pi, 100)
|
||||
v = np.linspace(0, np.pi, 100)
|
||||
|
||||
x = 10 * np.outer(np.cos(u), np.sin(v))
|
||||
y = 10 * np.outer(np.sin(u), np.sin(v))
|
||||
z = 10 * np.outer(np.ones(np.size(u)), np.cos(v))
|
||||
ax.plot_surface(x, y, z, rstride=4, cstride=4, color='b')
|
||||
|
||||
plt.show()
|
||||
plt.savefig("D:/Nicolas/Informatique/Python/MPSI/TP/fig4.pdf")
|
||||
## un autre exemple
|
||||
|
||||
from mpl_toolkits.mplot3d import axes3d
|
||||
import matplotlib.pyplot as plt
|
||||
from matplotlib import cm
|
||||
|
||||
fig = plt.figure()
|
||||
ax = fig.gca(projection='3d')
|
||||
X, Y, Z = axes3d.get_test_data(0.05)
|
||||
ax.plot_surface(X, Y, Z, rstride=8, cstride=8, alpha=0.3)
|
||||
cset = ax.contour(X, Y, Z, zdir='z', offset=-100, cmap=cm.coolwarm)
|
||||
cset = ax.contour(X, Y, Z, zdir='x', offset=-40, cmap=cm.coolwarm)
|
||||
cset = ax.contour(X, Y, Z, zdir='y', offset=40, cmap=cm.coolwarm)
|
||||
|
||||
ax.set_xlabel('X')
|
||||
ax.set_xlim(-40, 40)
|
||||
ax.set_ylabel('Y')
|
||||
ax.set_ylim(-40, 40)
|
||||
ax.set_zlabel('Z')
|
||||
ax.set_zlim(-100, 100)
|
||||
|
||||
plt.show()
|
||||
plt.savefig("D:/Nicolas/Informatique/Python/MPSI/TP/fig3.pdf")
|
||||
|
||||
|
BIN
TP/TP1Questions.pdf
Executable file
BIN
TP/TP1Questions.pdf
Executable file
Binary file not shown.
553
TP/TP2 etudiants.py
Executable file
553
TP/TP2 etudiants.py
Executable file
@ -0,0 +1,553 @@
|
||||
|
||||
|
||||
##################################
|
||||
# Premier point sur les variables#
|
||||
##################################
|
||||
## comment rajouter 1 à une variable?
|
||||
i=10
|
||||
s=0
|
||||
def plus1(i):
|
||||
s=i+1
|
||||
return(s)
|
||||
|
||||
print(i)
|
||||
print(plus1(i))
|
||||
print(s)
|
||||
|
||||
## la variable 's' est (dans le programme précédent) locale
|
||||
|
||||
i=10
|
||||
s=0
|
||||
def pplus1(i):
|
||||
global s
|
||||
s=i+1
|
||||
return(s)
|
||||
|
||||
print(i)
|
||||
print(pplus1(i))
|
||||
print(s)
|
||||
|
||||
## vers les effets de bords:
|
||||
#Définition : une fonction est dite à effet de bord lorsqu'elle modifie un état autre que sa valeur de retour.
|
||||
|
||||
i=10
|
||||
def ppplus1():
|
||||
i+=1
|
||||
return(i)
|
||||
print(i)
|
||||
ppplus1()
|
||||
print(i)
|
||||
##
|
||||
def ppplus1():
|
||||
global i
|
||||
i+=1
|
||||
return(i)
|
||||
print(i)
|
||||
ppplus1()
|
||||
print(i)
|
||||
##
|
||||
|
||||
##################################
|
||||
# Exercices sur les listes #
|
||||
##################################
|
||||
|
||||
|
||||
### la concaténation de 2 listes:
|
||||
l=[1,2,3]
|
||||
l1=[4,5,6]
|
||||
|
||||
l2=l+l1
|
||||
l3=l1+l
|
||||
|
||||
print(l2)
|
||||
print(l3)
|
||||
|
||||
|
||||
###
|
||||
# Exercice 1 : (L'aliasing) comprendre la différence entre les deux blocks suivants
|
||||
##exemple 1:
|
||||
|
||||
a=[11,22,33] # a est affectée. Elle pointe vers une liste donnée
|
||||
b=a # b point vers la même liste que a
|
||||
a[0:3]=[17,42,561] # nous changeons le contenu de la liste vers qui pointe a
|
||||
print(a,b) # b change également
|
||||
print(id(a)==id(b))
|
||||
|
||||
##exemple 2:
|
||||
a=[11,22,33]
|
||||
b=a
|
||||
a=[17,42,561]# a point vers une autre liste
|
||||
print(a,b)
|
||||
print(id(a)==id(b))
|
||||
|
||||
|
||||
## un autre exemple:
|
||||
|
||||
a=[ i for i in range(10)]
|
||||
b=a
|
||||
print(a,b)
|
||||
a[0]='a'
|
||||
print(a,b)
|
||||
|
||||
|
||||
## ou
|
||||
|
||||
a=[ i for i in range(10)]
|
||||
b=a
|
||||
print(a,b)
|
||||
b[0]='a'
|
||||
print(a,b)
|
||||
|
||||
## ou
|
||||
|
||||
a=[ i for i in range(10)]
|
||||
b=a
|
||||
print(a,b)
|
||||
a=a+ [i for i in range(1,10)] # a point vers une autre liste
|
||||
print(a,b)
|
||||
|
||||
|
||||
|
||||
## Exercice 2: Que valent a et b après les instructions suivantes?
|
||||
# quelques exemples pour constater "la profondeur d'une liste". Une liste de listes de listes de listes....
|
||||
a=[11,22,33]
|
||||
b=[7,14,a]
|
||||
print(b)
|
||||
print(b[2][1]) # le 2eme élément du 3eme élément de b
|
||||
b[2][1]=17
|
||||
print(b)
|
||||
print(a)
|
||||
a[0]=19
|
||||
print(a,b)
|
||||
|
||||
|
||||
|
||||
|
||||
## Tableau ou matrice :
|
||||
|
||||
a=[0,0]
|
||||
b=[a,a]
|
||||
print(b)
|
||||
b[0][0]=3
|
||||
print(b)
|
||||
##
|
||||
a=[0,0]
|
||||
c=[0,0]
|
||||
b=[a,c]
|
||||
print(b)
|
||||
b[0][0]=3
|
||||
print(b)
|
||||
##
|
||||
n=3
|
||||
a=[0]*n
|
||||
print(a)
|
||||
|
||||
|
||||
c=[]
|
||||
c=[a]*n
|
||||
print(c)
|
||||
# Quelle est la taille de la matrice c?
|
||||
c[0][0]=1
|
||||
print(c) # est-ce cohérent?
|
||||
|
||||
##
|
||||
|
||||
n=3
|
||||
a=[0]
|
||||
b=a*n
|
||||
print(b)
|
||||
a[0]=1
|
||||
print(a,b)# est-ce cohérent?
|
||||
# l'opérateur * a donc quelques avantages.
|
||||
|
||||
|
||||
|
||||
## une alternative:
|
||||
|
||||
c=[]
|
||||
for i in range(n):
|
||||
c+=[[0]*n]
|
||||
print(c)
|
||||
c[0][0]=1
|
||||
print(c)
|
||||
|
||||
|
||||
## la bonne question: comment faire une copie indépendante d'une liste (à utiliser sans hésitation !).... la copie profonde
|
||||
|
||||
import copy as c
|
||||
|
||||
a=[ i for i in range(10)]
|
||||
b=c.deepcopy(a)
|
||||
print(a,b)
|
||||
a[0]='test'
|
||||
print(a,b)
|
||||
|
||||
## pourquoi une copie profonde ? tester les lignes suivantes
|
||||
import copy as c
|
||||
|
||||
a=[0,[1,2,3]]
|
||||
b=c.copy(a)
|
||||
print(a,b)
|
||||
a[0]=1
|
||||
print(a,b)
|
||||
a[1][0]='test'
|
||||
print(a,b)
|
||||
|
||||
|
||||
## Exercice 3 : Que fait la fonction suivante?
|
||||
|
||||
## Une fonction peut changer une liste que l'on appelle
|
||||
|
||||
|
||||
a=[ i for i in range(10)]
|
||||
def f(l,x):
|
||||
l[0]=1
|
||||
print(f(a,1)) # une action est effectuée mais laquelle?
|
||||
print(a) # il y a eu une action sur a.
|
||||
|
||||
## comment éviter cela? Ne jamais travailler dans le corps d'une fonction sur une variable appelée.
|
||||
|
||||
|
||||
a=[ i for i in range(10)]
|
||||
def f(l,x):
|
||||
l0=c.deepcopy(l)
|
||||
l0[0]=1
|
||||
return(l0)
|
||||
print(f(a,1)) # une action est effectuée mais laquelle?
|
||||
print(a) # il y a eu une action sur a.
|
||||
|
||||
## Que font les fonctions suivantes?
|
||||
|
||||
|
||||
def f(l,i,j):
|
||||
l[i]=l[i]+l[j]
|
||||
l[j]=l[i]-l[j]
|
||||
l[i]=l[i]-l[j]
|
||||
|
||||
a=[ i for i in range(10)]
|
||||
f(a,0,1)
|
||||
print(a)
|
||||
##
|
||||
def g(i,j):
|
||||
l[i]=l[i]+l[j]
|
||||
l[j]=l[i]-l[j]
|
||||
l[i]=l[i]-l[j]
|
||||
|
||||
l=[0,1,2,3]
|
||||
print(l)
|
||||
g(0,1)
|
||||
print(l)
|
||||
# Attention aux effets de bords !
|
||||
# Définition : une fonction est dite à effet de bord lorsqu'elle modifie un état autre que sa valeur de retour.
|
||||
|
||||
|
||||
## Exercice 4: Concaténation
|
||||
# y-a-t-il une différence ?
|
||||
|
||||
a=[2,3,4,6]
|
||||
print(id(a))
|
||||
a=a+[2]
|
||||
print(id(a)) # en rajoutant 2 ... ce n'est plus la même liste.
|
||||
|
||||
# comment conserver la même liste ?
|
||||
a=[2,3,4,6]
|
||||
print(id(a))
|
||||
a.append(2)
|
||||
print(id(a))
|
||||
|
||||
# nous l'utiliserons dans le TP sur les piles.
|
||||
|
||||
|
||||
## Exercice 5: Insertion /Suppression
|
||||
# Que font les fonctions suivantes?
|
||||
help(range)
|
||||
help(list)
|
||||
# toujours penser à utiliser l'aide !
|
||||
|
||||
a=list(range(20))
|
||||
print(a)
|
||||
a.insert(2, 18)
|
||||
print(a)
|
||||
|
||||
a=list(range(20))
|
||||
print(a)
|
||||
|
||||
del a[3]
|
||||
print(a)
|
||||
|
||||
del a[2:4]
|
||||
print(a)
|
||||
|
||||
a=[1,1,2,2,3,3,4,4,5,5,6,6]
|
||||
print(a)
|
||||
|
||||
## Attention aux effets de bords ! (vers les piles )
|
||||
|
||||
a=[1,1,2,2,3,3,4,4,5,5,6,6]
|
||||
print(a)
|
||||
|
||||
print(a.pop())
|
||||
print(a)
|
||||
for i in range(3):
|
||||
a.pop()
|
||||
print(a)
|
||||
|
||||
|
||||
print(a.pop(3))
|
||||
print(a)
|
||||
|
||||
a.remove(4)
|
||||
print(a)
|
||||
|
||||
|
||||
## tester sur les listes les fonctions: sorted, min, max , sum
|
||||
a=[]
|
||||
n=10
|
||||
a=[n-i**2 for i in range(n)]
|
||||
print(a)
|
||||
print(sorted(a), min(a), max(a), sum(a))
|
||||
|
||||
|
||||
|
||||
##################################
|
||||
# 2 - Itérations #
|
||||
##################################
|
||||
|
||||
#En Python, un objet est dit itérable lorsqu'il est possible de renvoyer un par un tous ses éléments. la syntaxe: "for x in l", la variable x prend successivement toutes les valeurs des éléments de l.
|
||||
# Les objets itérables: les listes, les chaînes de caractères, les tuples, les "range", les ensembles, les dictionnaires.
|
||||
|
||||
l=['a','b', 'c']
|
||||
s=range(len(l))
|
||||
print(s)
|
||||
|
||||
## on peut écrire
|
||||
for i in s:
|
||||
print(l[i])
|
||||
##On prefère
|
||||
for lettre in l:
|
||||
print(lettre)
|
||||
|
||||
|
||||
##
|
||||
|
||||
texte="vous avez de la chance!"
|
||||
for lettre in texte:
|
||||
print(lettre)
|
||||
|
||||
|
||||
##un autre exemple: calcul de la norme de vecteurs de R2
|
||||
from math import sqrt # la racine carrée
|
||||
|
||||
vecteurs= [(0,1),(2,2),(2,3)]
|
||||
for vect in vecteurs:
|
||||
norme=sqrt(vect[0]^2+vect[1]^2)
|
||||
print('norme=',norme)
|
||||
|
||||
# Ou sinon
|
||||
vecteurs= [(0,1),(2,2),(2,3)]
|
||||
for (x,y) in vecteurs:
|
||||
norme=sqrt(x^2+y^2)
|
||||
print('norme=',norme)
|
||||
|
||||
|
||||
|
||||
# LES EXERCICES A TRAITER.
|
||||
|
||||
####################################################################
|
||||
# Exercice 1: Ecrire un fonction "mini" qui renvoie le plus petit élément d'un liste.
|
||||
#La tester sur une liste de couples, une chaîne de caractères.
|
||||
####################################################################
|
||||
|
||||
####################################################################
|
||||
# Exercice 2: Ecrire une fonction "bis" qui prend une chaîne de caractères et renvoie une chaîne avec chaque caractère 2 fois de suite
|
||||
####################################################################
|
||||
|
||||
|
||||
# Itérations avancées: Tester les blocks suivants (reverse , enumerate, zip,...)
|
||||
|
||||
l=[1,2,'a','b',4,'test']
|
||||
l1=reversed(l)
|
||||
print(l,l1)
|
||||
l1=list(l1)
|
||||
print(l,l1)
|
||||
|
||||
|
||||
|
||||
####################################################################
|
||||
# Exercice 3: Ecrire une fonction qui à une liste renvoie la liste renversée (sans utiliser "reversed")
|
||||
####################################################################
|
||||
|
||||
# Enumerate : enumerate(l) est un itérateur paresseux qui renvoie les couples i, l[i](pour i variant de 0 à len(l)-1)
|
||||
|
||||
s='un test facile'
|
||||
for c in enumerate(s):
|
||||
print(c)
|
||||
|
||||
for (i,x) in enumerate(s):
|
||||
print(x)
|
||||
|
||||
for (i,x) in enumerate(s):
|
||||
print(x,end='')
|
||||
print()
|
||||
|
||||
####################################################################
|
||||
# Exercice 4: Ecrire une fonction minind(l) qui renvoie le couple contenant le minimum de l et la liste des indices associées.
|
||||
####################################################################
|
||||
|
||||
|
||||
# l'itérateur zip
|
||||
|
||||
lettre=['a','b','c']
|
||||
nbr=[1,2,3,4,5]
|
||||
|
||||
for x in zip(lettre, nbr):
|
||||
print(x)
|
||||
|
||||
####################################################################
|
||||
# Exercice 5:
|
||||
#Ecrire une fonction moycoef(notes, coefs) qui prend une liste de notes et une liste de coefficients et renvoie la moyenne pondérée.
|
||||
####################################################################
|
||||
|
||||
|
||||
|
||||
##################################
|
||||
# Boucle While #
|
||||
##################################
|
||||
|
||||
## premiers pas ....
|
||||
|
||||
i=0
|
||||
while (i<10):
|
||||
i+=1
|
||||
print(i)
|
||||
##
|
||||
i=1
|
||||
u=1
|
||||
while (u>10**(-5)):
|
||||
i+=1
|
||||
u/=10
|
||||
print(i,u)
|
||||
## le compteur i
|
||||
i=0
|
||||
u=1.
|
||||
while (u>10**(-5)):
|
||||
i+=1
|
||||
u/=2.
|
||||
|
||||
print(u,i)
|
||||
print(i)
|
||||
from math import *
|
||||
print(floor((5*log(10)/log(2)))+1 )
|
||||
|
||||
##Pourquoi la valeur finale de i est-elle égale à la partie entière +1 de 5*log_2(10) ?
|
||||
|
||||
## un jeu de dé:
|
||||
|
||||
from random import *
|
||||
|
||||
print(dir(Random))
|
||||
|
||||
print(randint(1,6))
|
||||
print(random())
|
||||
|
||||
|
||||
## un petit jeu
|
||||
print('voulez-vous jouer au dés (le temps dattente dun 6)? o/n')
|
||||
r=input()
|
||||
if r=='n':
|
||||
print('a plus ... alors')
|
||||
else:
|
||||
d=0
|
||||
i=0
|
||||
while (d<6):
|
||||
print('lance le dé')
|
||||
input()
|
||||
d=randint(1,6)
|
||||
i+=1
|
||||
if d==6:
|
||||
print('tu as obtenu un ', d, ' en ', i,' étapes')
|
||||
else:
|
||||
print('tu as obtenu un ', d)
|
||||
|
||||
|
||||
|
||||
##################################
|
||||
# 3 - Compréhension #
|
||||
##################################
|
||||
## Python permet de définir facilement des listes par «compréhension»
|
||||
|
||||
l=[3*i**2 + 1 for i in range(1,10)]
|
||||
print(l)
|
||||
|
||||
l=[(i,j) for i in range(4) for j in range(i)]
|
||||
print(l)
|
||||
|
||||
l=[[(i,j) for i in range(2)] for j in range(i)]
|
||||
print(l)
|
||||
|
||||
l=[[(i,j) for j in range(i)] for i in range(2)]
|
||||
print(l)
|
||||
|
||||
|
||||
## On peut également filtrer
|
||||
|
||||
l=[i for i in range(10) if i%2]
|
||||
print(l)
|
||||
|
||||
l=[i if i%3 else 0 for i in range(10)]
|
||||
print(l)
|
||||
|
||||
# Comment comprendre %2 ?
|
||||
#il faut comprendre "if i%3" comme "if i%3 == 0".
|
||||
#En Python, toutes les valeurs sont comprises comme vrai sauf
|
||||
#• la constante False
|
||||
#• la constante None
|
||||
#•0
|
||||
#• la liste vide []
|
||||
#• le tuple vide ()
|
||||
#• l’ensemble vide set()
|
||||
#• le dictionnaire vide {}
|
||||
|
||||
####################################################################
|
||||
# Exercice 6:
|
||||
# -Ecrire une fonction imp(n) qui renvoie la liste des nombres impairs inférieur à n
|
||||
# -Calculer la somme des i**2 pour i inférieur à 100
|
||||
# -Déterminer la somme des i**j pour i, j vérifiant 0<i<=j<101
|
||||
####################################################################
|
||||
|
||||
|
||||
|
||||
##################################
|
||||
# 4 - Exercices #
|
||||
##################################
|
||||
|
||||
####################################################################
|
||||
# Exercice 7: Ecrire une fonction qui à x et n renvoie x**n sans utiliser "**"
|
||||
# Exercice 8: Ecrire des fonctions renvoyant la somme des éléments d'une liste et son maximum.
|
||||
# Exercice 9: Ecrire une fonction calculant le n ième terme d'une suite arithmético-géométrique vérifiant u[n+1]=au[n]+b
|
||||
# Exercice 10: Ecrire une fonction qui permet de savoir si un mot est dans une phrase.
|
||||
####################################################################
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
BIN
TP/TP2 instructions itératives et boucles conditionnelles bonus.pdf
Executable file
BIN
TP/TP2 instructions itératives et boucles conditionnelles bonus.pdf
Executable file
Binary file not shown.
BIN
TP/TP2Questions.pdf
Executable file
BIN
TP/TP2Questions.pdf
Executable file
Binary file not shown.
BIN
TP/TP3-Boucles.pdf
Normal file
BIN
TP/TP3-Boucles.pdf
Normal file
Binary file not shown.
BIN
TP1_bonus/TP1 tortue bonus.pdf
Executable file
BIN
TP1_bonus/TP1 tortue bonus.pdf
Executable file
Binary file not shown.
139
TP1_bonus/main.py
Executable file
139
TP1_bonus/main.py
Executable file
@ -0,0 +1,139 @@
|
||||
#!/usr/bin/env python
|
||||
from turtle import *
|
||||
import math
|
||||
import time
|
||||
def pause():
|
||||
input("pause>")
|
||||
reset()
|
||||
|
||||
def exercice1(l): #J'ai mis un chiffre dans le nom de la variable pour me repérer
|
||||
#Fonction carré
|
||||
forward(l)
|
||||
left(90)
|
||||
forward(l)
|
||||
left(90)
|
||||
forward(l)
|
||||
left(90)
|
||||
forward(l)
|
||||
left(90)
|
||||
|
||||
def exercice2():
|
||||
exercice1(20)
|
||||
left(90)
|
||||
exercice1(40)
|
||||
left(90)
|
||||
exercice1(60)
|
||||
left(90)
|
||||
exercice1(70)
|
||||
|
||||
def exercice3():
|
||||
speed('fastest')
|
||||
for length in range(20, 200 ,20):
|
||||
exercice1(length)
|
||||
|
||||
def exercice4():
|
||||
speed('fastest')
|
||||
for i in range(1,501):
|
||||
forward(i)
|
||||
left(91)
|
||||
def exercice5():
|
||||
def polygone(n, l):
|
||||
for i in range(1,n+1):
|
||||
forward(l)
|
||||
left(360/n)
|
||||
for i in range(3,7+1):
|
||||
polygone(i,30)
|
||||
def exercice6():
|
||||
circle(70)
|
||||
circle(70,360*2, 5)
|
||||
|
||||
def exercice7():
|
||||
speed('fastest')
|
||||
for i in range(72):
|
||||
circle(70,180)
|
||||
setpos(0,0)
|
||||
left(5)
|
||||
|
||||
#FRACTALES
|
||||
|
||||
def exercice9():
|
||||
left(180)
|
||||
speed('fastest')
|
||||
def sierpinski(n, l):
|
||||
if n==1:
|
||||
begin_fill()
|
||||
for _ in range(3):
|
||||
left(60)
|
||||
forward(l)
|
||||
left(60)
|
||||
#circle(math.sqrt(((l)**2)/(2-2*math.cos(math.pi*30/180))),360,3)
|
||||
end_fill()
|
||||
else:
|
||||
sierpinski(n-1, l/2)
|
||||
left(60)
|
||||
forward(l)
|
||||
left(60)
|
||||
sierpinski(n-1, l/2)
|
||||
left(60)
|
||||
forward(l)
|
||||
left(60)
|
||||
sierpinski(n-1, l/2)
|
||||
left(60)
|
||||
forward(l)
|
||||
left(60)
|
||||
sierpinski(5,300)
|
||||
|
||||
def exercice10():
|
||||
left(90)
|
||||
speed('fastest')
|
||||
def bin_tree(n, h):
|
||||
pensize(n)
|
||||
forward(h/3)
|
||||
if n!=1 :
|
||||
left(30)
|
||||
bin_tree(n-1, 2*h/3)
|
||||
right(60)
|
||||
bin_tree(n-1, 2*h/3)
|
||||
left(30)
|
||||
left(180)
|
||||
forward(h/3)
|
||||
left(180)
|
||||
bin_tree(4,300)
|
||||
def exercice11():
|
||||
Alice = Turtle()
|
||||
Bob = Turtle()
|
||||
Alice.penup()
|
||||
Bob.penup()
|
||||
Bob.setpos(-60,-10)
|
||||
Alice.setpos(0,40)
|
||||
Alice.pendown()
|
||||
Bob.pendown()
|
||||
def tick():
|
||||
Bob.forward(1.0)
|
||||
Alice.setheading(Alice.towards(*Bob.position()))
|
||||
Alice.forward(1.2)
|
||||
while Alice.distance(*Bob.position()) > 2:
|
||||
tick()
|
||||
time.sleep(0.001)
|
||||
|
||||
|
||||
"""exercice1(40)
|
||||
pause()
|
||||
exercice2()
|
||||
pause()
|
||||
exercice3()
|
||||
pause()
|
||||
exercice4()
|
||||
pause()
|
||||
exercice5()
|
||||
pause()
|
||||
exercice6()
|
||||
pause()
|
||||
exercice7()
|
||||
pause()
|
||||
exercice9()
|
||||
pause()
|
||||
exercice10()
|
||||
pause()
|
||||
exercice11()
|
||||
pause()"""
|
BIN
TP2_bonus/TP2 instructions itératives et boucles conditionnelles bonus.pdf
Executable file
BIN
TP2_bonus/TP2 instructions itératives et boucles conditionnelles bonus.pdf
Executable file
Binary file not shown.
180
TP2_bonus/main.py
Normal file
180
TP2_bonus/main.py
Normal file
@ -0,0 +1,180 @@
|
||||
#!/usr/bin/env python3
|
||||
def entiers(i,j): # Exercice 1
|
||||
print('-'.join(map(str,list(range(i,j+1)))))
|
||||
def entiers(i,j): # Exercice 2
|
||||
retour=""
|
||||
for i in range(i,j+1):
|
||||
if i%7:
|
||||
retour+=(str(i)+'-')
|
||||
print(retour.rstrip('-'))
|
||||
entiers(5,9)
|
||||
|
||||
def triangle1(n):
|
||||
for i in range(n):
|
||||
print('*'*(i+1))
|
||||
triangle1(5)
|
||||
print()
|
||||
def triangle2(n):
|
||||
for i in range(n):
|
||||
print('*'*(n-i-1))
|
||||
triangle2(5)
|
||||
def pyramide1(n):
|
||||
triangle1(n)
|
||||
triangle2(n)
|
||||
pyramide1(5)
|
||||
print()
|
||||
def pyramide2(n):
|
||||
for i in range(n):
|
||||
print(' '*(n-i)+' '.join('*'*(i+1))+' '*(n-i))
|
||||
pyramide2(5)
|
||||
|
||||
def talkhys1(n):
|
||||
for j,i in enumerate([int('1'*i) for i in range(1,n+1)]):
|
||||
print(' '*(n-j)+str(i)+ ' x ' + str(i) + ' '*(n-j) + ' = ' + ' '*(n-j)+ str(i*i))
|
||||
talkhys1(10)
|
||||
|
||||
def heure_to_sec(h,m,s):
|
||||
return h*3600+m*60+s
|
||||
def sec_to_heure(s):
|
||||
return s//3600,(s%3600)//60, s%60
|
||||
print(sec_to_heure(67))
|
||||
|
||||
def duree(*args):
|
||||
return sec_to_heure(heure_to_sec(*args[3:]) - heure_to_sec(*args[:3]))
|
||||
print(duree(5,3,20,10,3,39))
|
||||
|
||||
def rot13(entree):
|
||||
texte=entree.lower()
|
||||
alph="abcdefghijklmnopqrstuvwxyz"
|
||||
return ''.join([alph[(alph.index(c)+13)%(len(alph))] if c in alph else c for c in texte])
|
||||
print(rot13("har crefbaar abeznyr crafr dh'ha xvyb-bpgrg rfg étny à 1000 bpgrgf,ha vasbeznvgpvra rfg pbainvaph dh'ha xvybzèger rfg étny à 1024 zègerf."))
|
||||
|
||||
def isqrt(n):
|
||||
p=n
|
||||
while not(p*p <= n < (p+1)**2 or p<0):
|
||||
p=p-1
|
||||
return p
|
||||
print(isqrt(65))
|
||||
|
||||
def isqrt2(n):
|
||||
p=n
|
||||
lr=0
|
||||
while True:
|
||||
p=p-1
|
||||
i=0
|
||||
r=0
|
||||
while i<p:
|
||||
r+=p
|
||||
i+=1
|
||||
if r <= n < lr :
|
||||
return p
|
||||
if p<0:
|
||||
return
|
||||
lr=r
|
||||
print(isqrt2(66))
|
||||
|
||||
def exercice7(texte):
|
||||
i=0
|
||||
while True:
|
||||
i+=1
|
||||
if texte in str(2**i):
|
||||
return i, 2**i
|
||||
#print(exercice7("12112001"))
|
||||
|
||||
def premier(p):
|
||||
if p<2:
|
||||
return False
|
||||
for k in range(2, isqrt(p)+1):
|
||||
if p%k==0:
|
||||
return False
|
||||
return True
|
||||
def npremiers(n):
|
||||
premiers=[]
|
||||
i=2
|
||||
while len(premiers)<n:
|
||||
if premier(i):
|
||||
premiers.append(i)
|
||||
i+=1
|
||||
return premiers
|
||||
#print(npremiers(1000))
|
||||
def validegoldbach(n, premiers):
|
||||
for k in premiers:
|
||||
for l in premiers:
|
||||
if k+l == n:
|
||||
return True
|
||||
if k+l > n:
|
||||
break
|
||||
return False
|
||||
|
||||
def goldbach(n):
|
||||
premiers=npremiers(n)
|
||||
for i in range(4, n+1, 2):
|
||||
if not validegoldbach(i, premiers):
|
||||
return False, i
|
||||
return True
|
||||
def valideconjecture(n, premiers, puissances):
|
||||
for k in puissances:
|
||||
for l in premiers:
|
||||
if k+l==n:
|
||||
return True
|
||||
if k+ l > n:
|
||||
break
|
||||
if k > n:
|
||||
break
|
||||
return False
|
||||
|
||||
def conjecture(n):
|
||||
premiers=npremiers(n)
|
||||
puissances=[2**i for i in range(n)]
|
||||
for i in range(3, n+1, 2):
|
||||
if not valideconjecture(i, premiers, puissances):
|
||||
return False, i
|
||||
return True
|
||||
print(goldbach(100))
|
||||
print(conjecture(100))
|
||||
|
||||
def lookandsay(integer):
|
||||
text = str(integer)
|
||||
i = 0
|
||||
res=""
|
||||
while i < len(text):
|
||||
c=1
|
||||
j=0
|
||||
while j < len(text[i+1:]):
|
||||
if text[i+1:][j] == text[i]:
|
||||
c+=1
|
||||
else:
|
||||
break
|
||||
j+=1
|
||||
res += str(c)+text[i]
|
||||
i += j + 1
|
||||
return int(res)
|
||||
def conway(n, start=1):
|
||||
un=start
|
||||
for i in range(n-1):
|
||||
un=lookandsay(un)
|
||||
return un
|
||||
v = 20 # 40
|
||||
print(len(str(conway(v+1)))/len(str(conway(v))))
|
||||
|
||||
def shadok(n):
|
||||
p_max=0
|
||||
while 4**(p_max) < n:
|
||||
p_max +=1
|
||||
reste=n
|
||||
print(p_max)
|
||||
b4_re=[0]*(p_max)
|
||||
for i in list(range(p_max))[::-1]:
|
||||
for j in range(3, -1, -1):
|
||||
if reste - j*(4**i) >= 0:
|
||||
reste -= j*(4**i)
|
||||
b4_re[i]=j
|
||||
break
|
||||
b4=reversed(b4_re)
|
||||
|
||||
dico=["ga", "bu", "zo", "meu"]
|
||||
return '-'.join([dico[i] for i in b4])
|
||||
def kodahs(texte):
|
||||
dico=["ga", "bu", "zo", "meu"]
|
||||
b4=[dico.index(t) for t in texte.split('-')]
|
||||
return sum([i*(4**p) for p, i in enumerate(reversed(b4))])
|
BIN
TP2_bonus_MandelBrot/Bigpicture.png
Normal file
BIN
TP2_bonus_MandelBrot/Bigpicture.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 858 KiB |
BIN
TP2_bonus_MandelBrot/TP-BONUSMandelbrotFeigenbaum.pdf
Normal file
BIN
TP2_bonus_MandelBrot/TP-BONUSMandelbrotFeigenbaum.pdf
Normal file
Binary file not shown.
153
TP2_bonus_MandelBrot/main.py
Executable file
153
TP2_bonus_MandelBrot/main.py
Executable file
@ -0,0 +1,153 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Created on Fri Oct 11 08:36:47 2019
|
||||
|
||||
@author: suwako
|
||||
"""
|
||||
#from functools import lru_cache
|
||||
import gc
|
||||
import matplotlib.pyplot as plt
|
||||
import matplotlib.image as mpimg
|
||||
import numpy as np
|
||||
from PIL import Image
|
||||
from tqdm import tqdm
|
||||
from threading import Thread
|
||||
from multiprocessing import Pool, Process
|
||||
"""n=20
|
||||
liste = [[[1,1,255] for j in range(n)] for i in range(n)]
|
||||
fig = np.array(liste)
|
||||
plt.imshow(fig)
|
||||
plt.show()"""
|
||||
#@lru_cache(maxsize=512)
|
||||
def xn(n, c):
|
||||
if n==0:
|
||||
return 0
|
||||
else:
|
||||
return xn(n-1, c)**2 + c
|
||||
|
||||
def feigenbaum(n=1000):
|
||||
l=[]
|
||||
for c in tqdm(np.linspace(-2, 0, num=n), ncols=100):
|
||||
for k in range(200, 301):
|
||||
l.append([c, xn(k, c)])
|
||||
ordo = [p[1] for p in l]
|
||||
absci = [p[0] for p in l]
|
||||
plt.plot(absci, ordo, 'ro', ms=100/n)
|
||||
plt.show()
|
||||
def zn(n, c):
|
||||
if n==0:
|
||||
return 0
|
||||
else:
|
||||
return zn(n-1, c)**2 + c
|
||||
|
||||
def mandelbrot(n=512, lim=100, color=(1,5,2)):
|
||||
mat=[]
|
||||
|
||||
for y in tqdm(np.linspace(-2, 2, num=n), ncols=100):
|
||||
l=[]
|
||||
for x in np.linspace(-2,2, num=n):
|
||||
"""for k in range(lim):
|
||||
a=zn(k, complex(x,y))
|
||||
if abs(a) > 2:
|
||||
break"""
|
||||
k = zn2(complex(x,y), lim)
|
||||
# l.append([((k*color[0])%255),(k*color[1]*5)%255,(k*color[2]*2)%255])
|
||||
l.append([x,y])
|
||||
mat.append(l)
|
||||
fig = np.array(mat)
|
||||
img = Image.fromarray(fig.astype(np.uint8), 'RGB')
|
||||
img.save('test.png')
|
||||
img.show()
|
||||
|
||||
def mandeld(n=512, lim=100, color=(1,5,2), threads=5, window=[(-2,2),(-2,2)], filename="test.png"):
|
||||
args=(n, lim, color)
|
||||
tasks=np.array_split(np.linspace(*window[0], num=n), threads)
|
||||
results=[[] for i in range(threads)]
|
||||
""" threads=[mandelThread(tasks[i], args, i) for i in range(threads)]
|
||||
for thread in threads:
|
||||
thread.start()
|
||||
for thread in threads:
|
||||
thread.join()"""
|
||||
p = Pool(threads)
|
||||
results=p.map(mandelWorker, [(tasks[i], args, i, window) for i in range(threads)])
|
||||
|
||||
mat = [j for i in results for j in i]
|
||||
# mat = results[0]
|
||||
fig = np.array(mat)
|
||||
img = Image.fromarray(fig.astype(np.uint8), 'RGB')
|
||||
img.save(filename)
|
||||
del tasks
|
||||
del results
|
||||
del mat
|
||||
del p
|
||||
del fig
|
||||
del img
|
||||
import time
|
||||
def Time(func, *args, **kwargs):
|
||||
start_time = time.clock()
|
||||
res = func(*args, **kwargs)
|
||||
print(time.clock() - start_time, "secondes")
|
||||
return res
|
||||
def mandelWorker(data):
|
||||
taches, args, thread, window = data
|
||||
#print("Thread", thread, "running.")
|
||||
def zn2(c, lim):
|
||||
z=0
|
||||
k=0
|
||||
while k<lim and abs(z) <= 2:
|
||||
z = z**2 + c
|
||||
k+=1
|
||||
return k
|
||||
n, lim, color = args
|
||||
res=[]
|
||||
for y in taches:
|
||||
l=[]
|
||||
for x in np.linspace(*window[1], num=n):
|
||||
k = zn2(complex(x,y), lim)
|
||||
l.append([((k*color[0])%255),(k*color[1]*5)%255,(k*color[2]*2)%255])
|
||||
# l.append([x,y])
|
||||
res.append(l)
|
||||
#print("Thread", thread, "finished.")
|
||||
return res
|
||||
#(-2,2),(-2,2)
|
||||
def tile(coords, n):
|
||||
squares=[coords]
|
||||
for i in range(n):
|
||||
new_squares=[]
|
||||
for sq in squares:
|
||||
new_squares.extend(square(sq))
|
||||
squares=new_squares
|
||||
return squares
|
||||
def square(coords):
|
||||
offset=[-coords[0][0],-coords[1][0]]
|
||||
y1,y2,x1,x2 = [cd + offset[j] for j in (0,1) for cd in coords[j]]
|
||||
squares=[]
|
||||
for y in range(2):
|
||||
(y*y2/2,(y+1)*y2/2)
|
||||
for x in range(2):
|
||||
squares.append(((y*y2/2 - offset[0],(y+1)*y2/2 - offset[0]) ,(x*x2/2 - offset[1],(x+1)*x2/2 - offset[1])))
|
||||
return squares
|
||||
def mandeldd(*args, **kwargs):
|
||||
m=Process(target=mandeld, args=args, kwargs=kwargs)
|
||||
m.start()
|
||||
m.join()
|
||||
|
||||
|
||||
|
||||
def bigpicture(n=2, size=128):
|
||||
for i, window in tqdm(enumerate(tile(((-2,2),(-2,2)), n)), ncols=100):
|
||||
mandeldd(n=size, lim=255, color=(1,1,1), threads=10, window=window, filename="part_%s.png"%i)
|
||||
|
||||
#Merging
|
||||
print("Now merging.")
|
||||
images = list(map(Image.open, ['part_%s.png'%i for i in range(len(tile(((-2,2),(-2,2)), n)))]))
|
||||
width, height = size*(2**n), size*(2**n)
|
||||
new_im = Image.new('RGB', (width, height), (255,255,255))
|
||||
for i, window in tqdm(enumerate(tile(((0,height),(0,height)), n)), ncols=100):
|
||||
new_im.paste(images.pop(0), (int(window[1][0]), int(window[0][0])))
|
||||
new_im.save('Bigpicture.png')
|
||||
|
||||
bigpicture(n=3, size=512)
|
||||
#mandeld(n=512, lim=255, color=(1,1,1), threads=10, window=[(-2,2),(-2,2)])
|
||||
#[((-2.0, 0.0), (-2.0, 0.0)), ((-2.0, 0.0), (0.0, 2.0)), ((0.0, 2.0), (-2.0, 0.0)), ((0.0, 2.0), (0.0, 2.0))]
|
BIN
TP3/TP3-Boucles.pdf
Normal file
BIN
TP3/TP3-Boucles.pdf
Normal file
Binary file not shown.
97
TP3/main.py
Normal file
97
TP3/main.py
Normal file
@ -0,0 +1,97 @@
|
||||
import numpy as np
|
||||
#EXERCICE 1
|
||||
#1
|
||||
def multiple(n):
|
||||
lst=[]
|
||||
i=1
|
||||
while i*7 <= n:
|
||||
lst.append(i*7)
|
||||
i+=1
|
||||
return(lst)
|
||||
|
||||
#2
|
||||
def isprime(n):
|
||||
s=int(n**.5)
|
||||
t=True
|
||||
i=2
|
||||
while i <= s and t==True:
|
||||
if n%i == 0:
|
||||
t=False
|
||||
i+=1
|
||||
return(t)
|
||||
|
||||
#Cette fonction vérifie qu'aucun des entiers compris entre 2 et sqrt(n) ne sont pas des diviseurs de n.
|
||||
#Si aucun de ces entiers n'est un diviseur de n, alors n est premier car sqrt(n) est un majorant de l'ensemble des diviseurs de n
|
||||
|
||||
#3
|
||||
def premiers(n):
|
||||
lst=[2]
|
||||
i=3
|
||||
while i <= n:
|
||||
if isprime(i):
|
||||
lst.append(i)
|
||||
i+=2
|
||||
return lst
|
||||
|
||||
#4
|
||||
def npremiers(n):
|
||||
lst=[2]
|
||||
c=1
|
||||
i=3
|
||||
while c<n:
|
||||
if isprime(i):
|
||||
lst.append(i)
|
||||
c+=1
|
||||
i+=2
|
||||
return lst
|
||||
|
||||
#5
|
||||
def jumeaux(n):
|
||||
lst=[]
|
||||
for i in range(2,n):
|
||||
if isprime(i) and isprime(i+2):
|
||||
lst.append((i, i+2))
|
||||
return lst
|
||||
|
||||
#6
|
||||
def fermat():
|
||||
k=0
|
||||
while True:
|
||||
if not isprime(2**(2**k) + 1):
|
||||
return k
|
||||
k+=1
|
||||
|
||||
#7
|
||||
|
||||
def repartition(n):
|
||||
return len(premiers(n)) * np.log(n)/n
|
||||
|
||||
#On peut en conclure que sur les nombres qu'on a pu tester, la conjecture semble vraie.
|
||||
|
||||
#Exercice 2
|
||||
#1
|
||||
def u(n):
|
||||
if n==0:
|
||||
return 1
|
||||
pre=u(n-1)
|
||||
return 1/2*(pre + 2/pre)
|
||||
|
||||
premiers = lambda n: [u(n) for n in range(n)]
|
||||
#2
|
||||
premiers2 = lambda n: [u(n)**2 - 2 for n in range(n)]
|
||||
# On pourrait. (ici, u(n)**2 tend vers 2, donc u(n) tend vers sqrt(2))
|
||||
|
||||
#3
|
||||
def approx():
|
||||
un=1
|
||||
i=0
|
||||
while abs(un**2 - 2) >= 2*1e-5:
|
||||
un = 1/2*(un + 2/un)
|
||||
i+=1
|
||||
return i
|
||||
#4
|
||||
def uq(n, q):
|
||||
if n==0:
|
||||
return 1
|
||||
pre=u(n-1)
|
||||
return 1/q*(pre + q/pre)
|
4
mpsi.py
Executable file
4
mpsi.py
Executable file
@ -0,0 +1,4 @@
|
||||
#!/usr/bin/env python
|
||||
import random
|
||||
print(random.randint(1,6))
|
||||
print(dir(random))
|
14
randomm.py
Normal file
14
randomm.py
Normal file
@ -0,0 +1,14 @@
|
||||
#from random import *
|
||||
#import os
|
||||
#os.chdir("../")
|
||||
from random import *
|
||||
def import_non_local(name, custom_name=None):
|
||||
import imp, sys
|
||||
|
||||
custom_name = custom_name or name
|
||||
|
||||
f, pathname, desc = imp.find_module(name, sys.path[1:])
|
||||
module = imp.load_module(custom_name, f, pathname, desc)
|
||||
f.close()
|
||||
|
||||
return module
|
Loading…
Reference in New Issue
Block a user