Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • master
1 result

Target

Select target project
  • rvuillem/inf-tc1
  • hwei/inf-tc1
  • nmbengue/inf-tc1
  • fernanda/inf-tc1
  • mleger/inf-tc1
  • lmeng/inf-tc1
  • gferryla/inf-tc1
  • jconso/inf-tc1
  • smaghsou/inf-tc1
  • emarquet/inf-tc1
  • ecluzel/inf-tc1
  • aaudeoud/inf-tc1
  • tsegond/inf-tc1
  • aetienne/inf-tc1
  • djoly/inf-tc1
  • bcampeas/inf-tc1
  • dnovarez/inf-tc1
  • ruetm/inf-tc1
  • cchenu/inf-tc1
  • cguiotdu/inf-tc1
  • mclouard/inf-tc1
  • gwachowi/inf-tc1
  • qbaalaou/inf-tc1
  • sbrocas/inf-tc1
  • ppupion/inf-tc1
  • kinty/inf-tc1
  • hadomo/inf-tc1
  • tgicquel/inf-tc1
  • rhahn/inf-tc1
  • cguyau/inf-tc1
  • mpairaul/inf-tc1
  • rmuller/inf-tc1
  • rlecharp/inf-tc1
  • asebasty/inf-tc1
  • qmaler/inf-tc1
  • aoussaid/inf-tc1
  • kcherigu/inf-tc1
  • sgu/inf-tc1
  • malcalat/inf-tc1
  • afalourd/inf-tc1
  • phugues/inf-tc1
  • lsteunou/inf-tc1
  • llauschk/inf-tc1
  • langloia/inf-tc1
  • aboucard/inf-tc1
  • wmellali/inf-tc1
  • ifaraidi/inf-tc1
  • lir/inf-tc1
  • ynedjar/inf-tc1
  • schneidl/inf-tc1
  • zprandi/inf-tc1
  • acoradid/inf-tc1
  • amarcq/inf-tc1
  • dcombet/inf-tc1
  • gplaud/inf-tc1
  • mkernoaj/inf-tc1
  • gbichot/inf-tc1
  • tdutille/inf-tc1
58 results
Select Git revision
  • master
1 result
Show changes
Commits on Source (107)
Showing
with 27 additions and 587 deletions
# INF-TC1
## Installation
* La distribution Anaconda offre cet avantage en étant multi-plateformes (Windows, Mac, Linux) et disposant de tous les outils dont vous aurez besoin en Informatique au cours du semestre (interpréteur Python, éditeur Spyder, divers modules). Vous obtiendrez la dernière version sur ce site : https://www.anaconda.com/download/
* Nous vous demandons donc de l’installer sur vos ordinateurs et de vérifier son fonctionnement (l’exécution d’un code simple devrait suffire) avant votre première séance de TD.
* Concerant l'éditeur de code Python, vous pouvez utiliser Spyder inclu dans Anaconda, mais vous pouvez aussi télécharger et installer Microsoft Code qui est une excellente alternative : https://code.visualstudio.com/download
## Aides en informatique
* Des [transparents d'aide](aide-informatique.pdf)
* Une vidéo de présentation de ces transparents https://replay.ec-lyon.fr/video/0920-aides-en-informatique/
## Livres
Les livres suivants sont disponibles sous forme de pdf et couvrent les points abordés en cours et en TD :
- [Think Python](books/thinkpython2.pdf), 2nd edition, par Allen B. Downey
- [Python for Everybody](books/pythonlearn.pdf), par Charles Severance
- [Problem Solving with Algorithms and Data Structures using Python](books/problemsolving.pdf), par Brad Miller et David Ranum
- [ODS Pyhon](books/ods-python.pdf), par Pat Morin ([url](https://opendatastructures.org/ods-python/))
Autres ressources :
- https://en.wikibooks.org/wiki/Algorithms/
- [computer science books](https://freecomputerbooks.com/compscAlgorithmBooks.html)
\ No newline at end of file
File added
File moved
# Exemple 1 : moyenne
# Calcul de la moyenne de deux entiers
a=input('Donner la valeur de a : ')
b=input('Donner la valeur de b : ')
print('la moyenne = ', (int(a) + int(b))/2) # int(a) : conversion de 'a' en entier
# Une seconde méthode : on convertit en lisant les valeurs en int
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
# 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,) """
# 7 Types principaux en Python
if type(1) is not int : print('oups')
if type('1') is not int : print(1)
type(3.14)
# float
type(None)
# NoneType
f = lambda c : c if type(c) is str and c.isalpha() else '?'
type(f)
# function
# Utilisation de f (voir plus loin les "lambda expressions") :
f('a') # donne 'a' car 'a' est alphabétique
f('1') # donne '?' car '1' n'est pas alphabétique
f(1) # donne '?' car 1 n'est pas une chaine
import sys;
print(sys.int_info)
# sys.int_info(bits_per_digit=30, sizeof_digit=4)
print(sys.float_info)
# sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308,
# min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15,
# mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1)
print(sys.getsizeof(float)) # La taille de la classe float
# 400
print(sys.getsizeof(float())) # La taille d'un float
# 24 # Ce que coute en octes un réel
# (valeur + infos supplémentaires)
# 8 Conversion de types
list1 = ['1', '2', '3']
str1 = ''.join(list1)
str1
# '123'
list1 = [1, 2, 3]
str1 = ''.join(str(e) for e in list1) # ou avec "" à la place de ''
str1
# '123'
a = "545.2222"
float(a)
# 545.2222 suivant le système, on peut avoir des '0' après les '2'
int(float(a))
# 545
def is_float(value):
try:
float(value)
return True
except:
return False
# On peut aussi utiliser la prédéfinie eval() qui évalue du code Python
eval("1.5")
# 1.5
# Une alternative plus sûre à eval()
import ast
ast.literal_eval("545.2222")
545.2222
ast.literal_eval("31")
31
# Des cas d'erreur
eval(toto) # toto non défini ou n'est pas un str/octes/code
ast.literal_eval(toto)
# Erreur dans les 2 cas
# Converstion en binaire
st = "hello Debase"
' '.join(format(ord(x), 'b') for x in st)
# '1101000 1100101 1101100 1101100 1101111 100000 1000100 1100101 1100010 1100001 1110011 1100101'
# Conversion de string en hexadécimal
s='Hello Debase of Ecl'
' '.join(format(ord(x), 'x') for x in s)
# '48 65 6c 6c 6f 20 44 65 62 61 73 65 20 6f 66 20 45 63 6c'
# Conversion entier en Unicode
chr(16) # Quelle est la forme hexa de 16 ?
#'\x10'
# Conversions décimal <==> base xx
int('12',8) # Quelle est la valeur décimale du nombre octal '12' (octal car base = 8)
# 10
int('12',16) # Quelle est la valeur décimale du nombre hexa '12' (hexa car base = 16)
# 18
int('12') # Quelle est la valeur décimale du nombre décimale '12' (décimal car base par défaut = 10)
# 12
int('1000',2) # Que donne le nombre binaire '1000' en décimal (binaire car base = 2)
# 8
# Pour convertir un entier en octal
oct(12)
# '0o14' #un 'O' au début (pour Octal)
oct(8)
# '0o10'
# Autres conversions
# octal
eval('0o010') == 10 # La valeur décimale de '0o010' est-elle 10
# False
eval('0o010')
# 8
oct(42) # La valeur octale de l'entier 42
# '0o52'
int('0o52', 0) # La valeur décimale de l'octale '0o52' (si base=0 alors base est dans le string)
# 42
int('1101', 2) # La valeur décimale du binaire '1101' (base explicite = 2)
#13
int('0b1101', 2) # Idem, base explicitée = 2, peut importe '0b'
#13
int('0b1101', 0) # La valeur décimale du binaire '0b1101' (base = 0 --> la base '0b' est dans le string)
#13
from struct import *
pack('hhl', 1, 2, 3)
# b'\x01\x00\x02\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00'
# b veut dire byte (2 octes). \x veut dire hexa
pack('b', 1)
# b'\x01'
pack('b', 16) # signed char de taille 1. On convertie 16 en signed char
# b'\x10'
In [39]: pack('B', 16) # unsigned char de taille 1
# b'\x10'
pack('h', 1)
# b'\x01\x00'
calcsize('h')
# 2
calcsize('b')
# 1
unpack('b', b'\x10')
# (16,)
type(unpack('b', b'\x10'))
# tuple
unpack('b', b'\x10')[0] # Première élé. Il y a virgule car taille tuple >= 2
# 16
pack('B',65) # donne b'A' = i.e. le caractère dont le code = 65
\ No newline at end of file
# 8 Conversion de types
# Exercice
# Écrire la fonction convertir(S) qui convertit son paramètre (un string)
# en un entier. Pour que la conversion soit possible, le paramètre S doit
# être être composé de chiffres éventuellement précédé d'un signe.
def convertir(S) : # S est une liste de caractères
# Il y a un signe au début ou pas ?
signe= +1 # Initialisation du signe
if S[0:1] in '+-':
if S[0:1]=='-' : signe=-1
S = S[1:] # On enlève le signe
if S.isdigit(): return int(S) * signe # On peut aussi écrire : str.isdigit(xs) !
else: return (S + " n'est pas un nombre")
S=input('Donner une chaine de chiffres: ')
print(convertir(S))
# Donner une chaine de chiffres: -124
# -124
# Donner une chaine de chiffres: 12a
# Une version qui n'utilise ni int() ni isdigit()
def convertir02(S1) : # S est une liste de caractères
assert(S1 != '' and S1 != None)
signe= +1 # Initialisation du signe
val = 0; S=S1
if S[0] in '+-':
if S[0:1]=='-' : signe=-1
S = S[1:]
for car in S :
if car in "0123456789": val = 10*val+ord(car)-ord('0')
else : return (S1 + " n'est pas un nombre")
return val * signe # On peut aussi écrire : str.isdigit(xs) !
S=input('Donner une chaine de chiffres : ')
print(convertir02(S))
# Exercice
# Écrire la fonction {\tt convertir2r(S)} qui convertit son paramètre (un
# string) en un réel (loat). Pour que la conversion soit possible, le
# paramètre {\it S} doit être être éventuellement précédé d'un signe, puis
# composé de chiffres suivis d'un '.' puis une série de chiffres. La
# présence d'un '.' est obligatoire, et qui est forcément suivi d'au moins
# un chiffre.
def convertir2r(S) : # S est une liste de caractères
assert('.' in S) # '.' obligatoire
lst_2_parties=S.split('.') # une liste des 2 parties
val_int=0
if lst_2_parties[0] != '' : val_int=convertir02(lst_2_parties[0])
# vérifier que la partie décimale ne comporte pas un second signe !
assert(lst_2_parties[1][0] not in '+-')
val_reel=0
if lst_2_parties[1] != '' : val_reel=convertir02(lst_2_parties[1])
# La partie décimale s'ajoute ou se retrache suivant le signe de val_int'
if val_int >= 0 :
return val_int + val_reel/(10**len(lst_2_parties[1]))
else : return val_int - val_reel/(10**len(lst_2_parties[1]))
S=input('Donner une chaine de chiffres (un réel) : ')
print(convertir2r(S))
convertir2r('12.34')
convertir2r('0.12')
convertir2r('13.0')
convertir2r('-3.001')
\ 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
# 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
\ No newline at end of file
# Un commentaire court commence par un # et se limite à la fin de la ligne
"""
On peut aussi créer un commentaire long = une zone de
commentaires sur plusieurs lignes placées
entre une paire de triple-guillements dont le second suit :
"""
# Remarques :
# Un ';' à la fin d'une ligne rend la ligne muette (pas d'affichage des résultats).
# Il permet également de placer plusieurs expressions sur la même ligne.
# Si vous placez un commentaire immédiatement après la signature d'une fonction}
# (ou une méthode, une classe, etc.) entre un couple de """,
# votre commentaire (appelé docstring) devient accessible avec help
\ No newline at end of file
def fibo1(f2, f1, i):
if i > 0:
return fibo1(f1, f2+f1, i-1)
else:
return f2
def fibo2(f2, f1, i):
while i > 0:
f2, f1, i = f1, f2+f1, i-1
return f2
print(fibo1(6))
print(fibo2(6))
\ No newline at end of file
def fib(n, lookup):
# Cas d'arrêt
if n == 0 or n == 1 :
lookup[n] = n
# On calcule la valeur si pas déjà calculée
if lookup[n] is None:
lookup[n] = fib(n-1 , lookup) + fib(n-2 , lookup)
# On renvoie la n-eme valeur
return lookup[n]
def main():
n = 6
max = 100
# Initialise la table de cache
lookup = [None]*(max)
print("Le nombre de fibonacci est ", fib(n, lookup))
# Le nombre de fibonacci est 8
if __name__=="__main__":
main()
\ No newline at end of file
G = {
'A' : ['B','C', 'F'],
'B' : ['D', 'E'],
'C' : ['F'],
'D' : ['G'],
'E' : ['F'],
'F' : ['G', 'H'],
'G' : ['H'],
'H' : []
}
v = set()
def traitement(v, G, n):
if n not in v:
v.add(n)
print(n)
for m in G[n]:
traitement(v, G, m)
if __name__ == '__main__':
traitement(v, G, 'A')
if len(v) > 0:
print("Que se passe-t-il ?")
# Par exemple pour Fool et Sage vous devez renvoyez le résultat suivant :
#
# FOOL
# POOL
# POLL
# POLE
# PALE
# SALE
# SAGE
#
# SOLUTION:
graph = {'A': ['B', 'C'],
'B': ['C', 'D'],
'C': ['D'],
'D': ['C'],
'E': ['F'],
'F': ['C']
}
def chemin(graphe, source, destination, visite=None):
if source == destination:
return [destination]
else:
visite = visite or set()
for s in graphe[source]:
if s not in visite:
visite.add(s)
print("trace:", source + " > " + s)
sous_chemin = chemin(graphe, s, destination, visite)
if sous_chemin is not None:
return [source] + sous_chemin
print(chemin(simGraphe(["AA", "AB", "BC", "AC", "DD"]), "AA", "BC"))
# ['AA', 'AB', 'AC', 'BC']
\ No newline at end of file
# 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")
class Node:
def __init__(self, data = None, next = None):
self.data = data
self.next = next
class LinkedList:
def __init__(self):
self.head = None
def listprint(self):
printval = self.head
while printval is not None:
print(printval.dataval)
printval = printval.nextval
def push(self, n):
if self.head is None:
self.head = Node(n)
else:
node = self.head
while node.next is not None:
node = node.next
node.next = Node(n)
def detectLoop(self):
s = set()
temp = self.head
while (temp):
if (temp in s):
return True
s.add(temp)
temp = temp.next
return False
\ No newline at end of file