Skip to content
Snippets Groups Projects
Commit b43cb569 authored by Romain Vuillemot's avatar Romain Vuillemot
Browse files

Mise à jour exemples de code

parent 9289a0f8
Branches
No related tags found
No related merge requests found
Showing
with 272 additions and 149 deletions
# 5 Introduction aux fonctions
## Exemple : moyenne de deux entiers
# Calcul de la moyenne de deux entiers par une fonction (de signature entier x entier -> reel)
def moyenne(a,b):
return (a+b)/2
# --- Partie Principale ----
a=input('Donner la valeur de a : ')
b=input('Donner la valeur de b : ')
print('la moyenne = ', moyenne(int(a),int(b)))
\ No newline at end of file
## 5.2 Exercice : Racines d'une quadratique avec une fonction
# Reprendre l'exemple du calcul des racines d'une équation de seconde degré
# et placer les calculs dans la fonction {\tt quadratique(a, b, c)} qui
# reçoit en paramètre les coefficients {\it a,b} et {\it c} et renvoie les
# racines de cette équation.
from math import sqrt
def quadratique(a, b, c):
if (a == 0):
if ( b != 0) :
return ("Pas quadratique : racine simple x "+str(-c/b))
else:
return ("une blague ! ")
else :
delta=b*b-4*a*c #b*b OU b**2
if(delta < 0) :
return ("pas de racines réelles")
else :
if(delta>0) : # Le test initial sur la valeur de "a" montre son intérêt ici.
assert(a != 0) # Pas utile mais on montre aux élèves l'intérêt de "assert".
x1=(-b+math.sqrt(delta))/(2*a)
x2=(-b-math.sqrt(delta))/(2*a)
return ("x1 = "+str(x1)+ " x2 = "+ str(x2))
else :
x1 = x2 = -b/(2*a)
return ("racine double x1 = x2 = "+str(x1))
# La partie principale
a=int(input('Donner le coefficient a : '))
b=int(input('Donner le coefficient b : '))
c=int(input('Donner le coefficient c : '))
print(quadratique(a,b,c))
## 5.3 Exercice : Moyenne et écart type
# Créer une liste de 100 nombres de la distribution N(16,2).
import random
echantillon=[random.gauss(16,2) for n in range(100)]
def moyenne_liste(liste):
return sum(liste)/len(liste)
def variance(liste):
moy=moyenne_liste(liste)
return moyenne_liste([(x-moy)**2 for x in liste])
# ---------- Partie Principale ----------
# Pour tester nos calculs sans lire des entiers, on fait un tirage Normale
echantillon=[random.gauss(16,2) for n in range(100)]
print("Moyenne = " , moyenne_liste(echantillon))
print("Ecart type = " , variance(echantillon)**0.5) # %* {\color{magenta} $\sqrt{Var}$} *)
""" TRACE :
Moyenne = 15.92301989946788
Ecart type = 1.9934234202474366
"""
# 5.4 Variante : Exercice (suite écart type)
echantillon=[random.gauss(16,2) for n in range(100)]
varia = moyenne([x**2 for x in echantillon])-moyenne(echantillon)**2
print("De la seconde façon : ", varia**0.5)
""" Trace :
De la seconde façon : 1.8839867058987951
"""
# 6 Créer un script Python indépendant
from racines import trinome;
print(trinome(2.0, -4.0, 2.0))
# --- Partie Principale ---------
print(trinome(1.0, -3.0, 2.0))
print(trinome(1.0, -2.0, 1.0))
print(trinome(1.0, 1.0, 1.0))
""" On obtient
(2, 1.0, 2.0)
(1, 1.0)
(0,) """
# Modules Python
# import tel_module as mod1
# import un_module as mod2
# mod1.fonc(..) #appel de la fonction fonc du tel_module
# mod2.fonc(..) #appel de la fonction homonyme du un_module
# import tel_module
#
# def ma_fonction():
# localname = tel_module.fonc
# foo = localname(bar)
import scipy.stats as st
st.nanmean()
# Si vous obtenez le message
# ModuleNotFoundError: No module named 'scipy'
# ..vous devez installer le module avec la commande
#
# pip3 install scipy
#
\ No newline at end of file
# Modules Python
# import tel_module as mod1
# import un_module as mod2
# mod1.fonc(..) #appel de la fonction fonc du tel_module
# mod2.fonc(..) #appel de la fonction homonyme du un_module
# import tel_module
#
# def ma_fonction():
# localname = tel_module.fonc
# foo = localname(bar)
import scipy.stats as st
st.nanmean()
# Si vous obtenez le message
# ModuleNotFoundError: No module named 'scipy'
# ..vous devez installer le module avec la commande
#
# pip3 install scipy
#
\ No newline at end of file
def addition(a, b):
return a + b
def addition_inf(*argv):
res = 0
for arg in argv:
res += arg
return res
if __name__=="__main__":
assert addition(1, 2) == 3
assert not addition(1, 2) == 2
assert addition_inf(1, 1, 1) == 3
assert not addition_inf(1, 1, 1) == 2
assert addition_inf(1, 1, 1) == addition(1, 2)
\ No newline at end of file
def valide(seq):
"""Retourne True si séquence ADN."""
ret = len(seq) != 0
for c in seq:
ret = (ret and True) if (c in "atgc") else False
return ret
if __name__=="__main__":
assert valide("atgc")
assert not valide("atgcz")
class File():
def __init__(self, values = []):
self.__values = []
for v in values:
self.ajoute(v)
def ajoute(self, v):
self.__values.append(v)
return v
def supprime(self):
v = self.__values.pop(0)
return v
def renvoie(self, critere = lambda x : True):
for v in self.__values:
if critere(v):
return v
return False
def affiche(self):
for v in self.__values:
print(v)
def taille(self):
return len(self.__values)
if __name__ == "__main__":
f = File()
for d in [1, 2, 3]:
f.ajoute(d)
......@@ -18,6 +18,39 @@ graph = {'A': ['B', 'C'],
'F': ['C']
}
class Graphe(dict):
def __init__(self, liens, noeuds):
for v in liens:
self[v] = set()
for e in noeuds:
self.ajout_noeud(e)
def ajout_lien(self, lien):
self[lien[0]].add(lien[1])
self[lien[1]].add(lien[0])
def ajout_noeud(self, noeud):
self[noeud] = set()
def simGraphe(mots):
d = {}
g = Graphe(mots, [])
for mot in mots:
for i in range(len(mot)):
groupe = mot[:i] + '_' + mot[i+1:]
if groupe in d:
d[groupe].append(mot)
else:
d[groupe] = [mot]
for groupe in d.keys():
for mot1 in d[groupe]:
for mot2 in d[groupe]:
if mot1 != mot2:
g.ajout_lien([mot1, mot2])
return g
def chemin(graphe, source, destination, visite=None):
if source == destination:
......
# Exercice : pair/impair
# Lire un entier au clavier et décider (et afficher) s'il est pair ou impair.
a=int(input('Donner un entier positif : '))
if (a%2 ==1):
print(a, " est impair")
else :
print(a, " est pair")
File moved
# Exemple 1 : moyenne
# Calcul de la moyenne de deux entiers
a=input('Donner la valeur de a : ')
......@@ -9,30 +8,3 @@ print('la moyenne = ', (int(a) + int(b))/2) # int(a) : conversion de 'a' en ent
a=int(input('Donner la valeur de a : '))
b=int(input('Donner la valeur de b : '))
print('la moyenne = ', (a+b)/2)
# Exemple 2 : racines carrées
import math;
a=int(input('Donner le coefficient a : '))
b=int(input('Donner le coefficient b : '))
c=int(input('Donner le coefficient c : '))
if (a == 0):
if ( b != 0) :
print("Pas quadratique : racine simple x = ",-c/b)
else:
print("une blague ! ")
else :
delta=b*b-4*a*c #ou b**2
if(delta < 0) :
print("pas de racines reelles")
else :
assert(a != 0) # Déjà vérifié mais pour montrer l'intérêt de "assert".
if(delta>0) :
x1 = (-b+math.sqrt(delta))/(2*a)
x2 = (-b-math.sqrt(delta))/(2*a)
print("x1 = ",x1)
print("x2 = ",x2)
else :
x1 = x2 = -b/(2*a)
print("racine double x1 = x2 = ",x1)
\ No newline at end of file
def parite(a):
""" Lire un entier au clavier et décider (et afficher) s'il est pair ou impair. """
if (a%2 == 1):
print(a, " est impair")
else :
print(a, " est pair")
if __name__=="__main__":
while True:
try:
a = int(input('Donner un entier positif : '))
parite(a)
break
except ValueError:
print("Ce n'est pas un nombre valide.. ré-essayer !")
\ No newline at end of file
class Pile():
def __init__(self, values = []):
self.__values = []
for v in values:
self.ajoute(v)
def ajoute(self, v):
self.__values.append(v)
return v
def supprime(self):
v = self.__values.pop()
return v
def affiche(self):
for v in self.__values:
print(v)
def taille(self):
return len(self.__values)
if __name__ == "__main__":
p = Pile()
for d in [1, 2, 3]:
p.ajoute(d)
# Résolution équation quadratique
from math import sqrt;
def trinome(a, b, c):
""" Résolution équation quadratique """
delta = b**2 - 4*a*c
if delta > 0.0:
assert(a != 0)
......
def recherche(element, liste):
a = 0
b = len(liste)-1
while a < b :
m = (a+b) //2
if liste[m] == element :
return m
elif liste[m] > element :
b = m-1
else :
a = m+1
return a
print (recherche(3, [3, 1, 4, 2, 3]))
class Tas():
def __init__(self):
self.__values = []
def push(self, value):
self.__values.append(value)
def peek(self, i): # pop sans suppression
return self.__values[i], i
def fg(self, i):
left_i = 2 * i + 1
if left_i > len(self.__values):
return None, left_i
else:
return self.__values[left_i], left_i
def fd(self, i):
droite_i = 2 * i + 2
if droite_i > len(self.__values):
return None, droite_i
else:
return self.__values[droite_i], droite_i
def parent(self, i):
return self.__values[(i - 1) // 2]
def afficher(self):
return ' '.join(str(v) for v in self.__values)
def inserer(self, value):
self.push(value)
i = len(self.__values) - 1
while (i + 1) // 2 > 0:
if self.__values[i] < self.parent(i):
tmp = self.__values[i // 2]
self.__values[i // 2] = self.__values[i]
self.__values[i] = tmp
i = i // 2
def supprimer(self, i):
v = self.__values.pop(i)
max_i = i
n = len(self.__values) - 1
while self.__values[i] > self.fg(i)[0] or self.__values[i] > self.fd(i)[0]:
max = self.__values[i]
if i < n and max > self.fg(i)[0]:
max_i = 2 * i + 1
if i < n and max > self.fd(i)[0]:
max_i = 2 * i + 2
if max_i != i:
self.__values[i], self.__values[max_i] = self.__values[max_i], self.__values[i]
i = max_i
return v
\ No newline at end of file
from random import *
effectifs=[0,0,0,0,0,0]
# OU
# effectif=[0]*6
for n in range(10000):
dice=randint(1,6)
effectifs[dice-1]+=1
print(effectifs)
#--> [1642, 1710, 1683, 1661, 1678, 1626]
# Donner l'intervalle de confiance associé à ce résultat à 95%
#Même chose avec 2 dés
from random import *
effectifs=[0]*11
for n in range(10000):
de1=randint(1,6)
de2=randint(1,6)
twodice=de1+de2
effectifs[twodice-2]+=1
print(effectifs)
# --> [299, 540, 832, 1159, 1401, 1665, 1401, 1103, 787, 541, 272]
\ No newline at end of file
from math import *
from random import *
def tirage_gauss_centre_reduit():
x=uniform(0,1)
y=sqrt(-2*log(uniform(0,1)))
y = y*cos(x*2*pi)
return y
try :
n=int(input("combien de valeurs : "))
for i in range(n) :
print("Le tirage : ", tirage_gauss_centre_reduit())
except ValueError as err :
print("Error: {0}".format(err))
""" TRACE :
combien de valeurs : 5
Le tirage : 0.1675459650607427
Le tirage : -0.8810297798592189
Le tirage : 0.4764601603767129
Le tirage : -1.8446292482050937
Le tirage : -0.35483078367598453
"""
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment