diff --git "a/Python/Corrig\303\251s/controle.py" "b/Python/Corrig\303\251s/controle.py" new file mode 100644 index 0000000000000000000000000000000000000000..15d7524097ed21b02bf2261675b418abc6bbadbe --- /dev/null +++ "b/Python/Corrig\303\251s/controle.py" @@ -0,0 +1,66 @@ +# -*- coding: latin-1 -*- +''' +Created on 12 juin 2014 + +@author: sderozier & oinizan +''' + +# Dictionnaire +sequences = { +"A.KE.Q23-CXC-CG" : +"ATGGACCCGGTAGATCCTAACCTAGAGCCCTGGAATCACCCGGGAAGTCAGCCTACAACTGCTTGCAACAAATGTTACTGTAAAAAGTGTTGTTATCATTGTCAAGTTTGCTTTTTGAACAAAGGCTTAGGCATCTCCTATGGCAGGAAGAAGCGGAGACAGCGACGAGGAGCTCCTCAGAGCAGTAAGGATCATCAAAATTCTATACAAAAGCAGCCCATACCCCAAACCCAAGGGGTCTCGACAGGCCCGAAAGAATCGAAGAAGAAGATGGAGAGCAAGGCAGAGGCAGATCGATTCGATTAG", +"A.SE.SE6594" : +"ATGGATCCAGTAGATCCTAACCTAGAGCCTTGGAACCATCCGGGGAGTCAGCCTTCAACTGCTTGTAACAAGTGTTACTGTAAAATATGTTGCTATCATTGCCCAGTTTGCTTTTTGAACAAAGGCTTAGGCATCTCCTATGGCAGGAAGAAGCGGACCCGGCGACGAGGAGCTCCTCAAAGCAATAAGGATCATCAAAATCCTATATCAAAGCAGCCCATACCCCAAACCCAGGGGGACTCGACAGGCCCGGAAGAATCGAAGAAGAAGGTGGAGAGCAAGGCAGAGACAGATCGATTCGATTAG", +"A.SE.SE7253" : +"ATGGATCCGGTAGATCCTAACTTAGAGCCCTGGAACCACCCGGGAAGTCAGCCTACAACTCCTTGTAGCAAGTGTTACTGTAAAAAGTGTTGCTATCATTGCATAGTTTGCTTTCAGAACAAAGGCTTAGGCATCTCCTATGGCAGGAAGAAGCGGAGACAGCGACGAAGAACTCCTCAGAGCAGTAAGGATCATCAAAATCCTATACCAAAGCAGCCCATACCCCAGACCCAAGGGGTCTCGACAGGCCCAGAAGAATCGAAGAAGAAGGTGGAGAGCAAGGCAGAGGCAGATCGATTCGATTAG", +"A.SE.SE7535" : +"ATCGACCCGGTAGATCCTAACCTAGAGCCCTGGAATCATCCGGGAAGTCAGCCTACAACTGCTTGTAACAAGTGCTATTGTAAAAAGTGTTGCTATCATTGTCAAGCTTGCTTTTTGAACAAAGGCTTAGGCATCTCCTATGGCAGGAAGAAGCGGAAACAGCGACGAGGAGCTCCTCAGAGCAATAAGGATCATCAAAATCCTATACAACAGCAGTCCATACCCCAAACCCAAGGGATCCCGACAGGCCCGGAAGAATCGAAGAAGAAGGTGGAGAGCAAGGCAGAGACAGATCGATTCGATTAG", +} + +# A.KE.Q23-CXC-CG +# Sequence +seq23 = sequences["A.KE.Q23-CXC-CG"] +# Longueur +len23 = len(seq23) +# 1er codon +codon1_23 = seq23[:3] +# Dernier codon +codont_23 = seq23[(len23-((len23%3)-3)):(len23-(len23%3))] + +# A.SE.SE7535 +# Sequence +seq7535 = sequences["A.SE.SE7535"] +# Longueur +len7535 = len(seq7535) +# 1er codon +codon1_7535 = seq7535[:3] +# Dernier codon +codont_7535 = seq7535[(len7535-((len7535%3)-3)):(len7535-(len7535%3))] + +# TESTS +# Sequences +if seq23 == seq7535 : + print ("Les sequences sont identiques !") +else : + print ("Les deux sequences sont differentes !") +# Longueurs +if len23 == len7535 : + print ("Les deux sequences sont de meme longueur !") +else : + print ("Les deux sequences n'ont pas la meme longueur !") +# 1er codon = ATG +if codon1_7535 == "ATG" : + print ("Le 1er codon est bien une methionine !") +else : + print ("Le 1er codon n'est pas une methionine !") + +if codon1_23 == "ATG" and codon1_7535 == "ATG" : + print ("Les deux codons sont bien des methionines !") +else : + print ("Les deux codons ou l'un des deux codons n'est pas une methionine !") + +# Dernier codon = TAA, TGA, TAG +if codont_7535 == "TAA" or codont_7535 == "TGA" or codont_7535 == "TAG" : + print ("Le dernier codon est bien un codon stop !") +else : + print ('Le dernier codon n\'est pas un codon stop !') diff --git "a/Python/Corrig\303\251s/dictionnaire.py" "b/Python/Corrig\303\251s/dictionnaire.py" new file mode 100644 index 0000000000000000000000000000000000000000..827ab605d12abfe2e194ccc576afd18a8cd41075 --- /dev/null +++ "b/Python/Corrig\303\251s/dictionnaire.py" @@ -0,0 +1,54 @@ +# -*- coding: latin-1 -*- +''' +Created on 12 juin 2014 + +@author: sderozier & oinizan +''' +from variable import length + +# Dictionnaire +sequences = { +"A.KE.Q23-CXC-CG" : +"ATGGACCCGGTAGATCCTAACCTAGAGCCCTGGAATCACCCGGGAAGTCAGCCTACAACTGCTTGCAACAAATGTTACTGTAAAAAGTGTTGTTATCATTGTCAAGTTTGCTTTTTGAACAAAGGCTTAGGCATCTCCTATGGCAGGAAGAAGCGGAGACAGCGACGAGGAGCTCCTCAGAGCAGTAAGGATCATCAAAATTCTATACAAAAGCAGCCCATACCCCAAACCCAAGGGGTCTCGACAGGCCCGAAAGAATCGAAGAAGAAGATGGAGAGCAAGGCAGAGGCAGATCGATTCGATTAG", +"A.SE.SE6594" : +"ATGGATCCAGTAGATCCTAACCTAGAGCCTTGGAACCATCCGGGGAGTCAGCCTTCAACTGCTTGTAACAAGTGTTACTGTAAAATATGTTGCTATCATTGCCCAGTTTGCTTTTTGAACAAAGGCTTAGGCATCTCCTATGGCAGGAAGAAGCGGACCCGGCGACGAGGAGCTCCTCAAAGCAATAAGGATCATCAAAATCCTATATCAAAGCAGCCCATACCCCAAACCCAGGGGGACTCGACAGGCCCGGAAGAATCGAAGAAGAAGGTGGAGAGCAAGGCAGAGACAGATCGATTCGATTAG", +"A.SE.SE7253" : +"ATGGATCCGGTAGATCCTAACTTAGAGCCCTGGAACCACCCGGGAAGTCAGCCTACAACTCCTTGTAGCAAGTGTTACTGTAAAAAGTGTTGCTATCATTGCATAGTTTGCTTTCAGAACAAAGGCTTAGGCATCTCCTATGGCAGGAAGAAGCGGAGACAGCGACGAAGAACTCCTCAGAGCAGTAAGGATCATCAAAATCCTATACCAAAGCAGCCCATACCCCAGACCCAAGGGGTCTCGACAGGCCCAGAAGAATCGAAGAAGAAGGTGGAGAGCAAGGCAGAGGCAGATCGATTCGATTAG", +"A.SE.SE7535" : +"ATGGACCCGGTAGATCCTAACCTAGAGCCCTGGAATCATCCGGGAAGTCAGCCTACAACTGCTTGTAACAAGTGCTATTGTAAAAAGTGTTGCTATCATTGTCAAGCTTGCTTTTTGAACAAAGGCTTAGGCATCTCCTATGGCAGGAAGAAGCGGAAACAGCGACGAGGAGCTCCTCAGAGCAATAAGGATCATCAAAATCCTATACAACAGCAGTCCATACCCCAAACCCAAGGGATCCCGACAGGCCCGGAAGAATCGAAGAAGAAGGTGGAGAGCAAGGCAGAGACAGATCGATTCGATTAG", +} + +# Sequence A.SE.SE6594 +print "Sequence de A.SE.SE6594 : ", sequences["A.SE.SE6594"] + +# Tous les noms des sequences +listeCles = sequences.keys() +print "Liste des cles : ", listeCles + +# Toutes les sequences +listeValues = sequences.values() +print "Liste des valeurs : ", listeValues + +# Toutes les noms des sequences ordonnes +listeClesSort = sorted(listeCles) +print "Liste des cles ordonnees avec sorted : ", listeClesSort +listeCles.sort() +print "Liste des cles ordonnees avec sort() : ", listeCles + +# Longueur de la sequence A.SE.SE7253 +seq7253 = sequences["A.SE.SE7253"] +length7253 = len(seq7253) +print "Longueur de A.SE.SE7253 : ", length7253 + +# 1er codon de A.SE.SE7253 +codon1 = seq7253[:3] +print "1er codon : ", codon1 + +# Dernier codon de A.SE.SE7253 +# Quel est l'indice de fin du dernier paquet de 3=> len(seq7253)-(len(seq7253)%3 +# Quel est l'indice de début du dernier paquet de 3=> (len(seq7253)-(len(seq7253)%3-3 + +codont = seq7253[(len(seq7253)-(len(seq7253)%3)-3):(len(seq7253)-(len(seq7253)%3))] +print "Dernier codon : ", codont + +print type(listeCles) diff --git "a/Python/Corrig\303\251s/liste.py" "b/Python/Corrig\303\251s/liste.py" new file mode 100644 index 0000000000000000000000000000000000000000..4a28de641caaf3b50926508d77e54c5154e213c8 --- /dev/null +++ "b/Python/Corrig\303\251s/liste.py" @@ -0,0 +1,30 @@ +# -*- coding: latin-1 -*- +''' +Created on 12 juin 2014 + +@author: sderozier & oinizan +''' + +# Sequence +sequence = "atg ccc AAA AAC Cat GGa Taa" +print ("Sequence : ", sequence) + +# Sequence en lettres majuscules +sequpper = sequence.upper() +print ("Sequence en lettres majuscules : ", sequpper) + +# Passage en liste +seqliste = sequpper.split() # seqliste = sequence.split(" ") +print ("SeqListe : ", seqliste) + +# Longueur de la sequence +length = len(seqliste) * 3 +print ("Longueur de la sequence : ", length) + +# 1er codon +codon1 = seqliste[0] +print ("1er codon : ", codon1) + +# Dernier codon +codont = seqliste[len(seqliste)-1] +print ("Dernier codon : ", codont) diff --git "a/Python/Corrig\303\251s/nom-prenom.py" "b/Python/Corrig\303\251s/nom-prenom.py" new file mode 100644 index 0000000000000000000000000000000000000000..3c16854389dd97423d4112d8256f99d29045ec2d --- /dev/null +++ "b/Python/Corrig\303\251s/nom-prenom.py" @@ -0,0 +1,9 @@ +# -*- coding: latin-1 -*- +''' +Created on 13 mars 2019 + +@author: oinizan +''' + +import sys +print ("Je m'appelle", sys.argv[1], sys.argv[2]) diff --git "a/Python/Corrig\303\251s/revcomp.py" "b/Python/Corrig\303\251s/revcomp.py" new file mode 100644 index 0000000000000000000000000000000000000000..e8539bc8c527782dfcd7c16ff603f5b5068ea4de --- /dev/null +++ "b/Python/Corrig\303\251s/revcomp.py" @@ -0,0 +1,39 @@ +# -*- coding: latin-1 -*- +''' +Created on 12 juin 2014 + +@author: sderozier & oinizan +''' + +def reverse(seq) : +# return seq[::-1] + + rev = "" + + for i in range(len(seq)) : + + rev += seq[len(seq)-1-i] + + return rev + +def complement(seq) : + + comp = "" + + for nucleotide in seq : + + nucleotides = {"A" : "T", "T" : "A", "G" : "C", "C" : "G"} + + comp += nucleotides[nucleotide] + + return comp + +# Sequence initiale +sequence = "ATGATGCAGCT" +print ("Sequence initiale : ", sequence) + +seqreverse = reverse(sequence) +print ("Sequence reversee : ", seqreverse) + +seqcomplement = complement(seqreverse) +print ("Sequence finale : ", seqcomplement) diff --git "a/Python/Corrig\303\251s/traduction.py" "b/Python/Corrig\303\251s/traduction.py" new file mode 100644 index 0000000000000000000000000000000000000000..3be460d9a3b8ece4fdc09e144063d7801316971a --- /dev/null +++ "b/Python/Corrig\303\251s/traduction.py" @@ -0,0 +1,49 @@ +# -*- coding: latin-1 -*- +''' +Created on 13 juin 2014 + +@author: sderozier & oinizan +''' + +def traduction(sequence): + + # Dictionnaire contenant le code genetique + code_genetique = { + "GCT":"A","GCC":"A","GCA":"A","GCG":"A", + "TTA":"L","TTG":"L","CTT":"L","CTC":"L", + "CTA":"L","CTG":"L","CGT":"R","CGC":"R", + "CGA":"R","CGG":"R","AGA":"R","AGG":"R", + "AAA":"K","AAG":"K","AAT":"N","AAC":"N", + "ATG":"M","GAT":"D","GAC":"D","TTT":"F", + "TTC":"F","TGT":"C","TGC":"C","CCT":"P", + "CCC":"P","CCA":"P","CCG":"P","CAA":"Q", + "CAG":"Q","TCT":"S","TCC":"S","TCA":"S", + "TCG":"S","AGT":"S","AGC":"S","GAA":"E", + "GAG":"E","ACT":"T","ACC":"T","ACA":"T", + "ACG":"T","GGT":"G","GGC":"G","GGA":"G", + "GGG":"G","TGG":"W","CAT":"H","CAC":"H", + "TAT":"Y","TAC":"Y","ATT":"I","ATC":"I", + "ATA":"I","GTT":"V","GTC":"V","GTA":"V", + "GTG":"V","TAG":"*","TGA":"*","TAA":"*"} + + length = len(sequence) + print ("Longueur Seq : ", length) + + protein = "" + + for i in range(0, length, 3): + + codon = sequence[i:i+3] + + if ( len(codon) == 3 ): + + protein += code_genetique[sequence[i:i+3]] + + else: + + print ("Ma sequence n'est pas complete !") + + return protein + +sequence = "ATGACCATGATTACGAATTCCCGGGGATCCGTCGACCTGCAGC" +print (traduction(sequence)) diff --git a/Python/Supports/05-listes.html b/Python/Supports/05-listes.html deleted file mode 100755 index 132548d0752e76131d509f021825080b3c2b86e1..0000000000000000000000000000000000000000 --- a/Python/Supports/05-listes.html +++ /dev/null @@ -1,45 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <title>Title</title> - <meta charset="utf-8"> - <style> - @import url(https://fonts.googleapis.com/css?family=Yanone+Kaffeesatz); - @import url(https://fonts.googleapis.com/css?family=Droid+Serif:400,700,400italic); - @import url(https://fonts.googleapis.com/css?family=Ubuntu+Mono:400,700,400italic); - - body { font-family: 'Droid Serif'; } - h1, h2, h3 { - font-family: 'Yanone Kaffeesatz'; - font-weight: normal; - } - .remark-code, .remark-inline-code { font-family: 'Ubuntu Mono'; } - </style> - </head> - <body> - <textarea id="source"> - -class: center, middle -# Listes ---- -# Listes - -Syntaxe - ---- -# Accès aux valeurs - ---- -# Fonctions range() & list() - ---- -# Liste de liste (?) - - </textarea> - <script src="https://remarkjs.com/downloads/remark-latest.min.js"> - </script> - <script> - var slideshow = remark.create(); - </script> - </body> -</html> diff --git a/Python/Supports/05-listes_tuples.html b/Python/Supports/05-listes_tuples.html new file mode 100755 index 0000000000000000000000000000000000000000..6279b074c5f3e11f1eb768eeae540b013c25a64e --- /dev/null +++ b/Python/Supports/05-listes_tuples.html @@ -0,0 +1,251 @@ +<!DOCTYPE html> +<html> + <head> + <title>Title</title> + <meta charset="utf-8"> + <style> + @import url(https://fonts.googleapis.com/css?family=Yanone+Kaffeesatz); + @import url(https://fonts.googleapis.com/css?family=Droid+Serif:400,700,400italic); + @import url(https://fonts.googleapis.com/css?family=Ubuntu+Mono:400,700,400italic); + + body { font-family: 'Droid Serif'; } + h1, h2, h3 { + font-family: 'Yanone Kaffeesatz'; + font-weight: normal; + } + .remark-code, .remark-inline-code { font-family: 'Ubuntu Mono'; } + </style> + </head> + <body> + <textarea id="source"> + +class: center, middle +# Listes +--- +# Listes +Selon vous, qu'est-ce qu'une liste ? + +--- +# Listes + +* Une liste est une structure pour stocker des chiffres, des nombres, des caractères, des chaînes de caractères, ... sous la forme de tableaux. + +```python +>>> alphabet=['A','B','C','D','E','F','G','H','I','J'] +>>> alphabet +['A','B','C','D','E','F','G','H','I','J'] +``` +* Les éléments de la liste sont accessibles par des indices. +* 'A' est à l'indice 0, 'B' est à l'indice 1, ..., 'J' est à l'indice 9. + +```python +>>> alphabet[5] +'F' # et non pas 'E' +>>> alphabet[-1] +'J' # dernier élément +``` + +--- +# Listes +* Accès à plusieurs éléments de la liste: + +```python +>>> alphabet[0:3] +['A', 'B', 'C'] # on obtient une sous liste, attention au dernier indice +``` + +* Retrait/Insertion à une position donnée: +```python +>>> seq = ['seq1','seq2','seq3'] +>>> seq.pop(0) # rertait à la position 0 +'seq1' +>>> seq # pop modifie la liste +['seq2', 'seq3'] +>>> seq.insert(0,'seq1') +>>> seq +['seq1', 'seq2', 'seq3'] +``` + +* Suppression d'un élément donné: +```python +>>> seq.remove('seq3') +>>> seq +['seq1', 'seq2'] +``` + +--- +# Listes +* Ajout d'un élément en fin de liste: +```python +>>> seq.append('seq4') +>>> seq +['seq1', 'seq2', 'seq4'] +``` + +* Concaténation de listes: +```python +>>> seq1 = ['seq1'] +>>> seq2 = ['seq2'] +>>> seq = seq1 + seq2 +>>> seq +['seq1', 'seq2'] +``` + +* Récupération de l'indice: +```python +>>> lettres = ['a','b','c'] +>>> lettres.index('b') +1 +``` +--- +# Listes +* Nombre d'occurences: +```python +>>> lettres=['a','b','c','b','b','a'] +>>> lettres.count('b') +3 +>>> lettres.count('a') +2 +``` + +* Inverser une liste: +```python +>>> seq = ['a','b','c'] +>>> seq.reverse() +['c','b','a'] +``` + +* Duplication d'une liste: +```python +>>> seq = ['seq1','seq2'] +>>> seq*2 +>>> seq +['seq1','seq2','seq1','seq2'] +``` + +--- +# Listes +* Trier dans l'ordre ASCII: +```python +>>> seq = ['c','b','a'] +>>> seq.sort() # sort() ne renvoie rien, trie la liste "sur place" +>>> seq +['a','b','c'] +>>> seq = ['c','b','a'] +>>> seq2 = sorted(seq) # pour ne pas modifier la liste il faut utiliser sorted() +>>> seq2 +['a','b','c'] +>>> seq +['c','b','a'] +``` + +* Transformer une chaîne de caractère en liste grâce à un séparateur: +```python +>>> sequence = 'a*b*c*d*e*f' +>>> sequence.split('*') +['a', 'b', 'c', 'd', 'e', 'f'] +``` + +--- +#Listes +* Nombre d'éléments dans une liste: +```python +>>> sequence=['a', 'b', 'c', 'd', 'e', 'f'] +>>> len(sequence) +6 +``` + +--- +# Listes +* La fonction range() renvoie une liste avec les indices: +```python +>>> liste=range(5) +range(0, 5)# équivaut à [0,1,2,3,4] +``` + +* Appliquée à la longueur d'une liste renvoie les indices de la liste: +```python +>>> liste=['a','b','c','d','e'] +>>> range(len(liste)) +range(0, 5)# équivaut à [0,1,2,3,4] +``` + +* Utile pour le parcours de liste: +```python +>>> for i in range(len(liste)):print("",liste[i]) +... + a + b + c + d + e +``` + +--- +# Listes +* Ecriture plus directe pour un parcours de liste: +```python +>>> for i in liste:print("",i) +... + a + b + c + d + e +``` + +* La méthode list() prend un itérable et en fait une liste: +```python +>>> chaine = "abcd" +>>> list(chaine) +['a','b','c','d'] +``` + +--- +# Tuples + +* Un tuple est une liste non modifiable. + +* Il n'existe dons pas de méthodes pour ajouter/enlever des éléments dans un tuple. +* L'accès aux valeurs par l'indice ainsi que l'interrogation du tuple est possible. + +* Exemple: + +```python +>>> t = (1,2,3) +>>> t +(1, 2, 3) +>>> t[1] # accès aux valeurs +2 +>>> 2 in t # interroger le tuple +True +``` + +--- +# Tuples ou Listes ? + +* Les tuples sont plus rapides que les listes. + +* Si vous souhaitez parcourrir un ensemble fixe de données utilisez, un tuple. +* Utile aussi pour protéger votre code en écriture. + +* Source: +https://python.developpez.com/cours/DiveIntoPython/php/frdiveintopython/native_data_types/tuples.php + +--- +# Travaux Pratiques + +<div align = "justify">Créer un programme Python nommé <b>liste.py</b> permettant de manipuler une liste générée à partir de la chaîne de caractères <b> atg ccc AAA AAC Cat GGa Taaa </b> et d'afficher les informations suivantes en <i>25 minutes d'autonomie</i> :</div> + +* la <b>séquence</b> en <b>lettres majuscules</b> uniquement, +* la <b>longueur</b> de la séquence, +* le <b>premier codon</b>, +* le <b>dernier codon</b>. + </textarea> + <script src="https://remarkjs.com/downloads/remark-latest.min.js"> + </script> + <script> + var slideshow = remark.create(); + </script> + </body> +</html> diff --git a/Python/Supports/06-dicos.html b/Python/Supports/06-dicos.html new file mode 100755 index 0000000000000000000000000000000000000000..92195da91967be4f1db6c7933a17f66964333320 --- /dev/null +++ b/Python/Supports/06-dicos.html @@ -0,0 +1,103 @@ +<!DOCTYPE html> +<html> + <head> + <title>Title</title> + <meta charset="utf-8"> + <style> + @import url(https://fonts.googleapis.com/css?family=Yanone+Kaffeesatz); + @import url(https://fonts.googleapis.com/css?family=Droid+Serif:400,700,400italic); + @import url(https://fonts.googleapis.com/css?family=Ubuntu+Mono:400,700,400italic); + + body { font-family: 'Droid Serif'; } + h1, h2, h3 { + font-family: 'Yanone Kaffeesatz'; + font-weight: normal; + } + .remark-code, .remark-inline-code { font-family: 'Ubuntu Mono'; } + </style> + </head> + <body> + <textarea id="source"> + +class: center, middle +# Dictionnaires + +--- +# Dictionnaires +Selon vous qu'est ce qu'un dictionnaire ? + +--- +# Dictionnaires + +* Un dictionnaire est une structure pour stocker des chiffres, des nombres, des caractères, des chaînes de caractères, ... +* Les éléments stockés seront retrouvés à partir d'une clé. +* La clé doit être unique. +* La recherche d'une valeur se fait à partir d'une clé et non l'inverse. + +--- +# Dictionnaires + +* Opérateur d'affectation: + +```python +>>> sequences = {'seq1':'ATGC', 'seq2':'TGCC'} +>>> sequences +{'seq1': 'ATGC', 'seq2': 'TGCC'} +``` + +* Liste des clés: +```python +>>> sequences.keys() +dict_keys(['seq1', 'seq2']) +``` + +* Liste des valeurs: +```python +>>> sequences.values() +dict_values(['ATGC', 'TGCC']) +``` + +* Accéder à une valeur donnée: +```python +>>> sequences['seq2'] +'TGCC' +``` + +--- +# Dictionnaires +* Ajout d'un couple clé/valeur: +```python +>>> sequences['seq3'] = 'GCTT'#si la clé existe déjà , la valeur est remplacée +``` + +* Suppression d'un couple clé valeur: +```python +>>> sequences = {'seq1':'ATGC', 'seq2':'TGCC'} +>>> del sequences['seq2'] +>>> sequences +{'seq1': 'ATGC'} +>>> sequences.pop('seq1') # pop() renvoie directement la valeur +'ATGC' +>>> sequences +{} +``` + +--- +# Travaux Pratiques +<div align = "justify">Créer un programme Python nommé <b>dictionnaire.py</b> permettant de manipuler un dictionnaire et d'afficher les informations suivantes en <i>25 minutes d'autonomie</i> :</div> + +* la <b>séquence</b> qui a pour nom <b>A.SE.SE6594</b>, +* la <b>liste de tous les noms des séquences</b> (sans les recopier), +* la <b>liste de toutes les séquences</b> (sans les recopier), +* le <b>liste de tous les noms de séquences rangés par ordre alphabétique</b>, +* la <b>longueur de la séquence "A.SE.SE7253"</b>, +* le <b>1er codon et le 2ème codon de cette séquence</b>. + + </textarea> + <script src="https://remarkjs.com/downloads/remark-latest.min.js"> + </script> + <script> + var slideshow = remark.create(); + </script> + </body> +</html> diff --git a/Python/Supports/06-dicos_tuples.html b/Python/Supports/06-dicos_tuples.html deleted file mode 100755 index 8c1a0effed2de33fdbc8d7bbbab1b183b6e7177b..0000000000000000000000000000000000000000 --- a/Python/Supports/06-dicos_tuples.html +++ /dev/null @@ -1,46 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <title>Title</title> - <meta charset="utf-8"> - <style> - @import url(https://fonts.googleapis.com/css?family=Yanone+Kaffeesatz); - @import url(https://fonts.googleapis.com/css?family=Droid+Serif:400,700,400italic); - @import url(https://fonts.googleapis.com/css?family=Ubuntu+Mono:400,700,400italic); - - body { font-family: 'Droid Serif'; } - h1, h2, h3 { - font-family: 'Yanone Kaffeesatz'; - font-weight: normal; - } - .remark-code, .remark-inline-code { font-family: 'Ubuntu Mono'; } - </style> - </head> - <body> - <textarea id="source"> - -class: center, middle -# Dictionnaires & Tuples ---- - -# Dictionnaires - -* clé unique -* keys() et values() -* liste de dictionnaire (?) ---- - -# Tuples - -* Listes non modifiables - -* Exemple(s) - - </textarea> - <script src="https://remarkjs.com/downloads/remark-latest.min.js"> - </script> - <script> - var slideshow = remark.create(); - </script> - </body> -</html> diff --git a/Python/Supports/07-controle.html b/Python/Supports/07-controle.html index 8badeb4b479f5434c7916024ee6f30c268c30f09..929654be2c93a5156787d63cc019522bfe71e0e2 100755 --- a/Python/Supports/07-controle.html +++ b/Python/Supports/07-controle.html @@ -20,15 +20,68 @@ <textarea id="source"> class: center, middle -# Structures de controles +# Structures de contrôle + +--- +# Structures de contrôle + +* Selon vous toutes les données sont elles à traiter ? + + --- -# Structure +# Structure de contrôle + +* La syntaxe: +```python +if condition1: # attention à l'indentation + action1 +elif condition2: + action2 +else: + action3 +``` + +* Exemple: +```python +>>> length = 10 +>>> seuil = 15 +>>> if length <= seuil: +... print ("la valeur est inférieure ou égale au seuil fixé") +... else: +... print ("la valeur est supérieure au seuil fixé") +... +la valeur est inférieure ou égale au seuil fixé +``` --- # Tests multiples +* Tester plusieurs conditions en même temps avec des booléens. + +* La syntaxe: +```python +>>> x = 2 +>>> y = 2 +>>> if x == 2 or y == 2: +... print ("le test est vrai") +... +le test est vrai +``` + --- -# Break & Continue +# Travaux Pratiques +<div align = "justify">Créer un programme Python nommé <b>controle.py</b> permettant de manipuler le contenu d'un dictionnaire avec des strcutures de contrôle et d'afficher les informations suivantes en <i>25 minutes d'autonomie</i> :</div> + + +* les <b>séquences</b> qui ont pour nom <b>A.KE.Q23-CXC-CG</b> et <b>A.SE.SE7535</b>, +* la <b>longueur</b> des 2 séquences précédentes, +* les <b>premiers codons</b> des 2 séquences précédentes, +* les <b>derniers codons</b> des 2 séquences précédentes, +* <b>si</b> les séquences sont identiques, +* <b>si</b> les séquences sont de même longeur, +* <b>si</b> les premiers codons des 2 séquences précédentes sont bien une <b>méthionine (ATG)</b>, +* <b>si</b> les <b>derniers codons</b> des 2 séquences précédentes sont bien <b>un codon stop (TAA,TGA ou TAG)</b>. + </textarea> <script src="https://remarkjs.com/downloads/remark-latest.min.js"> diff --git a/Python/Supports/10-use_modules.html b/Python/Supports/10-use_modules.html index e3fd54b78f4d03fb888e0abf6ba785ed0db5cfb9..3e8706eec69b10bd59abaf7a4979e45c8b23b965 100755 --- a/Python/Supports/10-use_modules.html +++ b/Python/Supports/10-use_modules.html @@ -21,14 +21,108 @@ class: center, middle # Utilisation de modules +--- +# Modules + +* Les modules sont des programmes Python qui contiennent des fonctions* que l'on est amené à utiliser souvent. +* Vous avez accès à une documentation exhaustive sur le site python: https://docs.python.org/3/py-modindex.html +* L'instruction import permet d'importer l'ensemble des fonctions (ou sous modules) du module: + +```python +>>> import os # toutes les fonctions/sous modules du modules os sont disponibles +>>> os.path # par exemple le sous module path +<module 'posixpath' from '/usr/lib/python3.4/posixpath.py'> +``` + +* Avec le mot clé from il est possible d'importer directement la fonction/sous module: +```python +>>> from os import path +>>> path # ici pas de prefix os +<module 'posixpath' from '/usr/lib/python3.4/posixpath.py'> +``` + +* Obtenir de l'aide sur un module: +```python +>>> help(os) +>>> help(os.path) +``` + --- # Module os +* Interaction avec le système d'exploitation. + +```python +>>> fullname='/home/maiage/sderozier/scripts/test.py' +>>> import os +>>> help(os.path.dirname) +Help on function dirname in module posixpath: + +dirname(p) + Returns the directory component of a pathname +(END) +>>> os.path.dirname(fullname) +'/home/maiage/sderozier/scripts' +``` + +```python +>>> help(os.path.basename) +Help on function basename in module posixpath: + +basename(p) + Returns the final component of a pathname +(END) +>>>os.path.basename(fullpath) +'test.py' +``` + +--- + +# Module os + +```python +>>>help(os.path.abspath) +Help on function abspath in module posixpath: + +abspath(path) + Return an absolute path. +(END) +>>> currentdir=os.path.abspath('.') +>>> currentdir +'/home/oinizan/FORMATION-PYTHON-2018/CORRIGES' +>>> os.listdir(currentdir) # listdir() du module os +['liste.py', 'traduction.py', 'revcomp.py', 'dictionnaire.py', 'controle.py'] +``` + --- # Module sys +* La fonction argv du module sys permet de récupérer les arguments passés <i>en ligne de commande</i> au sein d'une liste. + +```python +1 # script test.py +2 import sys +3 print (sys.argv) +``` + +```python +python3 test.py alpha beta gamma +['test.py', 'alpha', 'beta', 'gamma'] +``` + +--- +# Travaux Pratiques +<div align = "justify">Créer un programme Python faisant appel au module sys permettant d'afficher les informations demandées <i>20 minutes d'autonomie</i> :</div> + +* <i>je m'appelle Prénom Nom</i> + +<div>Le prénom et le nom doivent être passés en argument du programme et récupérés au sein de celui-ci afin d'effectuer l'affichage.</div> + + + + </textarea> <script src="https://remarkjs.com/downloads/remark-latest.min.js"> </script> diff --git a/Python/Supports/11-fonctions.html b/Python/Supports/11-fonctions.html index 6780cbfb300f0cf3c1f006020484d3d3b3a04213..ec46a740b7f9159534f13466be0a9135f4023898 100755 --- a/Python/Supports/11-fonctions.html +++ b/Python/Supports/11-fonctions.html @@ -22,18 +22,180 @@ class: center, middle # Fonctions --- +# Fonctions + +* Une fonction permet de répéter une instruction plusieurs fois sans avoir à réécrire la totalité du code. + +* Syntaxe: +```python +def fonction(param1,param2): # attention à l'indentation + instruction1 + instruction2 + return resultat1, resultat2 +``` + +--- + +# Fonctions -# Structure +* Exemple: +```python +>>> def pluriel(param): +... param = param + "s" +... return param +... +>>> mots=pluriel("sequence") +>>> mots +'sequences' +``` --- # Passage d'arguments +* Vous n'êtes pas tenu de préciser le type (entiers, réels, chaîne de caractère,...) d'arguments lors de l'appel de la fonction: +```python +>>> def fois(x,y): +... return x*y +... +>>> fois(2,3) +6 +>>> fois(3.1415,5.23) +16.430045000000003 +>>> fois(2,5.23) +10.46 +>>> fois('to',2) +'toto' +``` + +* L'opérateur '*' reconnait plusieurs types, la fonction 'fois' peut donc effectuer des tâches différentes. + --- -# Variables globales et locales +# Passage d'arguments + +* Les fonctions sont capables de renvoyer plusieurs valeurs à la fois. + +* On peut dès lors effectuer des affectations multiples. + +```python +>>> def carre_cube(x): +... return x**2,x**3 # renvoi d'un tuple +... +>>> carre_cube(2) +(4, 8) +>>> z1,z2=carre_cube(2) # affectation multiple +>>> z1 +4 +>>> z2 +8 +``` + +--- + +# Passage d'arguments + +* Renvoi de plusieurs valeurs à la fois avec une liste: + +```python +>>> def carre_cube2(x): +... return [x**2,x**3] +... +>>> carre_cube2(3) +[9, 27] +>>> z1,z2 = carre_cube2(3) +>>> z1 +9 +>>> z2 +27 +``` + +--- + +# Passage d'arguments + +* Les fonctions peuvent avoir un nombre d'argument variables. + +```python +>>> str="Python débutant: 1er mars, Python avancé: 1er avril" +>>> str.replace("Python","Perl") # replace 2 arguments +'Perl débutant: 1er mars, Perl avancé: 1er avril' +``` + +```python +>>> str="Python débutant: 1er mars, Python avancé: 1er avril" +>>> str.replace("Python","Perl",1) # replace 3 arguments +'Perl débutant: 1er mars, Python avancé: 1er avril' +``` + +* Pour avoir un nombre d'argument variables, il faut définir des arguments facultatifs: + +```python +>>> def fct(x,y,z=1): # un argument facultatif avec une valeur par défaut +... if z!=1: +... ... +... return ... +``` + +--- +# Travaux pratiques + +<div align = "justify">Créez un programme Python contenant deux fonctions permettant de "reverse complémenter" une séquence en 25 minutes d'autonomie:</div> + +* création d'une <b>fonction</b> avec <b>un paramètre</b> et <b>une instruction</b> pour <b>inverser</b> la <b>séquence</b>, +* création d'une <b>fonction</b> avec <b>un paramètre</b> et <b>une instruction</b> pour <b>complémenter</b> la <b>séquence</b>, +* <b>retour</b> du <b>résultat</b> et <b>affichage</b> de celui-ci. + +--- +# Travaux pratiques +<div align = "justify">Créez un programme Python contenant une fonction permettant de traduire une séquence en 25 minutes d'autonomie:</div> + +* création d'une <b>fonction</b> avec <b>un paramètre</b> et <b>une instruction</b> pour <b>traduire</b> la <b>séquence</b>, +* <b>retour</b> du <b>résultat</b> et <b>affichage</b> de celui-ci. + + +--- +# Code génétique + +```python +code_genetique = { +"GCT":"A","GCC":"A","GCA":"A","GCG":"A", +"TTA":"L","TTG":"L","CTT":"L","CTC":"L", +"CTA":"L","CTG":"L","CGT":"R","CGC":"R", +"CGA":"R","CGG":"R","AGA":"R","AGG":"R", +"AAA":"K","AAG":"K","AAT":"N","AAC":"N", +"ATG":"M","GAT":"D","GAC":"D","TTT":"F", +"TTC":"F","TGT":"C","TGC":"C","CCT":"P", +"CCC":"P","CCA":"P","CCG":"P","CAA":"Q", +"CAG":"Q","TCT":"S","TCC":"S","TCA":"S", +"TCG":"S","AGT":"S","AGC":"S","GAA":"E", +"GAG":"E","ACT":"T","ACC":"T","ACA":"T", +"ACG":"T","GGT":"G","GGC":"G","GGA":"G", +"GGG":"G","TGG":"W","CAT":"H","CAC":"H", +"TAT":"Y","TAC":"Y","ATT":"I","ATC":"I", +"ATA":"I","GTT":"V","GTC":"V","GTA":"V", +"GTG":"V","TAG":"*","TGA":"*","TAA":"*"} +``` + +--- +# Travaux pratiques + +* Variables globales et locales: + + +<div align = "justify">Allez sur <b>Python Tutor</b> http://pythontutor.com/visualize.html. Ecrivez d'abord une fonction carre(x) qui renvoie x au carré. Ecrivez en dessous un programme principal qui appelle carre() avec la valeur 5 en paramètre. Suivez l'éxécution pour distinguer les variables globales des variables locales.</div> + +```python +>>> def carre(x): +... return x**2 +... +>>> # programme principal +... +>>> z=5 +>>> resultat=carre(5) +>>> print(resultat) +``` -Python Tutor : http://pythontutor.com/visualize.html </textarea> <script src="https://remarkjs.com/downloads/remark-latest.min.js"> diff --git a/Python/Supports/13-erreurs.html b/Python/Supports/13-erreurs.html index a5937349660726bc09ebaf04567d43d50b106221..03f591acbd124c1e1ba4a3a4d5effe614967eb8c 100755 --- a/Python/Supports/13-erreurs.html +++ b/Python/Supports/13-erreurs.html @@ -23,11 +23,121 @@ class: center, middle # Gestion des erreurs --- -# ToDo +# Exceptions + +* En Python les exceptions sont un ensemble de directives et mots-clés dédié à la gestion des erreurs. +* Une exception est un comportement non attendu du programme: + +```python +1 # script erreur.py +2 x =int(input("Entrez un nombre: ")) +3 print 10/x +``` + +```python +python erreur.py +Entrez un nombre: 10 +1 +``` + +```python +python erreur.py +Entrez un nombre: 0 +Traceback (most recent call last): + File "erreur.py", line 2, in <module> + print (10/x) +ZeroDivisionError: integer division or modulo by zero +``` + +* Python nous a renvoyé un ZeroDivisionError --- -# ToDo +# Exceptions + +* Des directives/mots-clés qui nous permmettent d'<i>attraper</i> ces erreurs. +* Try ... except +```python +1 try: +2 x =int(input("Entrez un nombre: ")) +3 print (10/x) +4 +5 except ZeroDivisionError: +6 print ("ERREUR, division par zéro impossible") +``` + +```python +python erreur.py +Entrez un nombre: 0 +ERREUR, division par zéro impossible +``` + +--- + +# Exceptions + +* D'autres types d'erreurs sont possibles: +````python +python erreur.py +Entrez un nombre: a +Traceback (most recent call last): + File "erreur.py", line 3, in <module> + x =int(input("Entrez un nombre: ")) + File "<string>", line 1, in <module> +NameError: name 'a' is not defined +```` + +* Pour attraper des exceptions que l'on ne sait/veut pas qualifier: +```python +1 try: +2 x =int(input("Entrez un nombre: ")) +3 print (10/x) +4 +5 except ZeroDivisionError: +6 print ("ERREUR, division par zéro impossible") +7 +8 except Exception: +9 print ("Une erreur est survenue") +``` + +--- + +# Exceptions + +* try ... except ... else +* le bloc else pour la suite normale du programme + ```python +1 try: +2 x =int(input("Entrez un nombre: ")) +3 div = (10/x) +4 +5 except ZeroDivisionError: +6 print ("ERREUR, division par zéro impossible") +7 +8 except Exception: +9 print ("Une erreur est survenue") +10 +11 else: +12 div ... # ici la suite normale du programme +``` + +--- + +# Exceptions + +* TODO finally +* Les exceptions disponibles en Python: https://docs.python.org/3/library/exceptions.html +* TODO raise + +--- +# Travaux Pratiques +<div align = "justify">Créer un script Python nommé <b>capteur_temperature.py</b> qui calcule la moyenne d'une série de températures avec les caractéristiques suivantes (<i>25 minutes d'autonomie</i>) :</div> + +* Les températures sont enregistrées sous forme d'une <b>liste</b> d'entiers. +* Une <b>fonction</b> read_tmp() lit une valeur de t°, déclenche une <b>exception</b> si la valeur lue est supérieure à 20°C et <b>retourne</b> simplement la valeur sinon. +* Un programme principal qui moyenne les valeurs inférieures à 20°c et qui indique le nombre de valeurs supérieures à 20°C. + + </textarea> <script src="https://remarkjs.com/downloads/remark-latest.min.js">