• Aucun résultat trouvé

Programmer en python

N/A
N/A
Protected

Academic year: 2022

Partager "Programmer en python"

Copied!
26
0
0

Texte intégral

(1)

Programmer en python

Damien Nouvel

(2)

Langages informatiques

§ Langages compilés et/ou interprétés

§ Du programme à l’exécution : Code source

Programme binaire Compilation

Programme lié Liaison

Programme exécutable Assemblage

ñ La machine exécute le code écrit par le développeur

(3)

Ligne de commande

§ Rappel de commandes utiles sous Unix :

[damien] mkdir dossier # Créer un dossier [damien] cd dossier # Changer de dossier [damien] ls # Lister les fichiers

[damien] touch fic.txt # Créer un fichier

[damien] less fic.txt # Voir le contenu d'un fichier [damien] man less # Aide pour une commande (ici less) [damien] cp fic.txt fic2.txt # Copie de fichier [damien] mv fic.txt fic3.txt # Déplacer un fichier [damien] rm fic2.txt # Effacer un fichier

[damien] chmod u+x prog # Rendre un fichier éxécutable [damien] ./prog # Exécuter un programme

§ Exécution d’un programme python :

[damien] python monfichier.py

[damien] ./monfichier.py # Si le fichier est exécutable

(4)

Ligne de commande

§ Rappel de commandes utiles sous Unix :

[damien] mkdir dossier # Créer un dossier [damien] cd dossier # Changer de dossier [damien] ls # Lister les fichiers

[damien] touch fic.txt # Créer un fichier

[damien] less fic.txt # Voir le contenu d'un fichier [damien] man less # Aide pour une commande (ici less) [damien] cp fic.txt fic2.txt # Copie de fichier [damien] mv fic.txt fic3.txt # Déplacer un fichier [damien] rm fic2.txt # Effacer un fichier

[damien] chmod u+x prog # Rendre un fichier éxécutable [damien] ./prog # Exécuter un programme

§ Exécution d’un programme python :

[damien] python monfichier.py

[damien] ./monfichier.py # Si le fichier est exécutable

(5)

Méthode de développement

§ Possibilité d’utiliser des IDE :

‚ Surtout pour les entreprises

‚ Très utile pour les gros projets avec de nombreux fichiers ñ Pas nécessaire, mais pas interdit

§ Méthode proposée :

‚ Ouverture de fenêtres :

Editeur de textes léger (gedit, NotePad++, Sublime)

Ligne de commande (bash)

ñ Alt+Tab pour basculer de l’une à l’autre

§ Développement du programme :

‚ Ecriture de petites portions de code

‚ Mise en commentaires avec le caractère dièse #

‚ Limiter la sortie avec less :python prog.py | less ñ Ne pas perdre du temps !

(6)

Méthode de développement

§ Possibilité d’utiliser des IDE :

‚ Surtout pour les entreprises

‚ Très utile pour les gros projets avec de nombreux fichiers ñ Pas nécessaire, mais pas interdit

§ Méthode proposée :

‚ Ouverture de fenêtres :

Editeur de textes léger (gedit, NotePad++, Sublime)

Ligne de commande (bash)

ñ Alt+Tab pour basculer de l’une à l’autre

§ Développement du programme :

‚ Ecriture de petites portions de code

‚ Mise en commentaires avec le caractère dièse #

‚ Limiter la sortie avec less :python prog.py | less ñ Ne pas perdre du temps !

(7)

Méthode de développement

§ Possibilité d’utiliser des IDE :

‚ Surtout pour les entreprises

‚ Très utile pour les gros projets avec de nombreux fichiers ñ Pas nécessaire, mais pas interdit

§ Méthode proposée :

‚ Ouverture de fenêtres :

Editeur de textes léger (gedit, NotePad++, Sublime)

Ligne de commande (bash)

ñ Alt+Tab pour basculer de l’une à l’autre

§ Développement du programme :

‚ Ecriture de petites portions de code

‚ Mise en commentaires avec le caractère dièse #

‚ Limiter la sortie avec less :python prog.py | less

ñ Ne pas perdre du temps !

(8)

Méthode de développement

§ Possibilité d’utiliser des IDE :

‚ Surtout pour les entreprises

‚ Très utile pour les gros projets avec de nombreux fichiers ñ Pas nécessaire, mais pas interdit

§ Méthode proposée :

‚ Ouverture de fenêtres :

Editeur de textes léger (gedit, NotePad++, Sublime)

Ligne de commande (bash)

ñ Alt+Tab pour basculer de l’une à l’autre

§ Développement du programme :

‚ Ecriture de petites portions de code

‚ Mise en commentaires avec le caractère dièse #

‚ Limiter la sortie avec less :python prog.py | less ñ Ne pas perdre du temps !

(9)

Syntaxe

§ Principes généraux :

‚ Commandeprint pour lesaffichages

‚ Deux points après les tests/ boucles

Tabulationspour les blocks de code

§ Langage faiblement typé :

Chaînes de caractères ("Bonjour")

Entiers(5)

Nombre flottants(2.5)

ñ Pour concaténer un nombre, utiliserstr() print "Bonjour, le monde !"

x = 5*2.5 if x > 10:

print "x est plus grand que 10" for i in range(3):

print i

(10)

Syntaxe

§ Principes généraux :

‚ Commandeprint pour lesaffichages

‚ Deux points après les tests/ boucles

Tabulationspour les blocks de code

§ Langage faiblement typé :

Chaînes de caractères ("Bonjour")

Entiers(5)

Nombre flottants(2.5)

ñ Pour concaténer un nombre, utiliserstr()

print "Bonjour, le monde !" x = 5*2.5

if x > 10:

print "x est plus grand que 10" for i in range(3):

print i

(11)

Syntaxe

§ Principes généraux :

‚ Commandeprint pour lesaffichages

‚ Deux points après les tests/ boucles

Tabulationspour les blocks de code

§ Langage faiblement typé :

Chaînes de caractères ("Bonjour")

Entiers(5)

Nombre flottants(2.5)

ñ Pour concaténer un nombre, utiliserstr() print "Bonjour, le monde !"

x = 5*2.5 if x > 10:

print "x est plus grand que 10"

for i in range(3):

print i

(12)

Listes et dictionnaires

§ Listes d’éléments (ordonnés) :

‚ Initialisation :lst = [1, 2, 3]

‚ Accès aux éléments : lst[2]

‚ Ajout d’éléments : lst += [4, 5]

§ Dictionnaires (table de hachage, paires clés/valeurs) :

‚ Initialisation :dic = {'age': 25, 'taille':170}

‚ Accès aux éléments : dic['age']

‚ Ajout d’éléments : dic['nom'] = 'Damien' etudiants = [{'nom': 'Roger', 'note': 15}] etudiants += [{'nom': 'Julie', 'note': 13}] for e in etudiants:

print "L'étudiant", e['nom'], "a eu", e['note'] moyenne = 0.0

for e in etudiants: moyenne += e['note'] moyenne /= len(etudiants)

(13)

Listes et dictionnaires

§ Listes d’éléments (ordonnés) :

‚ Initialisation :lst = [1, 2, 3]

‚ Accès aux éléments : lst[2]

‚ Ajout d’éléments : lst += [4, 5]

§ Dictionnaires (table de hachage, paires clés/valeurs) :

‚ Initialisation :dic = {'age': 25, 'taille':170}

‚ Accès aux éléments : dic['age']

‚ Ajout d’éléments : dic['nom'] = 'Damien'

etudiants = [{'nom': 'Roger', 'note': 15}] etudiants += [{'nom': 'Julie', 'note': 13}] for e in etudiants:

print "L'étudiant", e['nom'], "a eu", e['note'] moyenne = 0.0

for e in etudiants: moyenne += e['note'] moyenne /= len(etudiants)

(14)

Listes et dictionnaires

§ Listes d’éléments (ordonnés) :

‚ Initialisation :lst = [1, 2, 3]

‚ Accès aux éléments : lst[2]

‚ Ajout d’éléments : lst += [4, 5]

§ Dictionnaires (table de hachage, paires clés/valeurs) :

‚ Initialisation :dic = {'age': 25, 'taille':170}

‚ Accès aux éléments : dic['age']

‚ Ajout d’éléments : dic['nom'] = 'Damien' etudiants = [{'nom': 'Roger', 'note': 15}]

etudiants += [{'nom': 'Julie', 'note': 13}]

for e in etudiants:

print "L'étudiant", e['nom'], "a eu", e['note']

moyenne = 0.0 for e in etudiants:

moyenne += e['note']

moyenne /= len(etudiants)

(15)

Fonctions

§ Rappels sur les fonctions :

Isoléesdu reste du code

Paramètresen entrée

‚ Sortieretournée par le mot-cléreturn

§ Définition et appel d’une fonction

‚ Définition simple :def fonc(param1, param2):

‚ Valeurs par défaut : def fonc(param1 = 1, param2 = 3):

‚ Appel :x = fonc(3, 2)

def compterLettre(chaine = "", lettre =" "): compte = 0

for c in chaine: if c == lettre:

compte += 1 return compte

print compterLettre("Botte de foin", "o")

(16)

Fonctions

§ Rappels sur les fonctions :

Isoléesdu reste du code

Paramètresen entrée

‚ Sortieretournée par le mot-cléreturn

§ Définition et appel d’une fonction

‚ Définition simple :def fonc(param1, param2):

‚ Valeurs par défaut : def fonc(param1 = 1, param2 = 3):

‚ Appel :x = fonc(3, 2)

def compterLettre(chaine = "", lettre =" "): compte = 0

for c in chaine: if c == lettre:

compte += 1 return compte

print compterLettre("Botte de foin", "o")

(17)

Fonctions

§ Rappels sur les fonctions :

Isoléesdu reste du code

Paramètresen entrée

‚ Sortieretournée par le mot-cléreturn

§ Définition et appel d’une fonction

‚ Définition simple :def fonc(param1, param2):

‚ Valeurs par défaut : def fonc(param1 = 1, param2 = 3):

‚ Appel :x = fonc(3, 2)

def compterLettre(chaine = "", lettre =" "):

compte = 0 for c in chaine:

if c == lettre:

compte += 1 return compte

print compterLettre("Botte de foin", "o")

(18)

Quelques fonctions utiles

§ Tests et boucles avec in

ñ Fonctionne avec les listes, chaînes, boucles

if 4 in var: ...

for x in var: ...

§ Pour les chaînes de caractères :

‚ Concaténation avec+

‚ Séparation avec split(chaine, car)

‚ Réunion avec car.join(lst)

‚ Conversion en entier avec int(chaine)

‚ Suppression du saut de lignestrip(chaine)

(19)

Quelques fonctions utiles

§ Tests et boucles avec in

ñ Fonctionne avec les listes, chaînes, boucles

if 4 in var:

...

for x in var:

...

§ Pour les chaînes de caractères :

‚ Concaténation avec+

‚ Séparation avec split(chaine, car)

‚ Réunion avec car.join(lst)

‚ Conversion en entier avec int(chaine)

‚ Suppression du saut de lignestrip(chaine)

(20)

Quelques fonctions utiles

§ Tests et boucles avec in

ñ Fonctionne avec les listes, chaînes, boucles

if 4 in var:

...

for x in var:

...

§ Pour les chaînes de caractères :

‚ Concaténation avec+

‚ Séparation avec split(chaine, car)

‚ Réunion avec car.join(lst)

‚ Conversion en entier avec int(chaine)

‚ Suppression du saut de lignestrip(chaine)

(21)

Lecture de fichier ligne par ligne

§ Lecture de fichier :

‚ Import du module codecs :import codecs

‚ Chemin : f = codecs.open("fic.txt", "r", "utf-8")

‚ Modes (r/w) :

f = codecs.open("fic.txt", "rw", "utf-8")

‚ Lecture ligne par ligne : for ligne in f:

import codecs

fichier = codecs.open("80jours.txt", "r", "utf-8") caracteres = 0

nbLignes = 1

for ligne in fichier:

caracteresLigne = len(ligne)

print "La ligne", nbLignes, "a", caracteresLigne, "caractères" caracteres += caracteresLigne

nbLignes += 1

print "Il y a en moyenne", caracteres/nbLignes, "caractères"

(22)

Lecture de fichier ligne par ligne

§ Lecture de fichier :

‚ Import du module codecs :import codecs

‚ Chemin : f = codecs.open("fic.txt", "r", "utf-8")

‚ Modes (r/w) :

f = codecs.open("fic.txt", "rw", "utf-8")

‚ Lecture ligne par ligne : for ligne in f:

import codecs

fichier = codecs.open("80jours.txt", "r", "utf-8") caracteres = 0

nbLignes = 1

for ligne in fichier:

caracteresLigne = len(ligne)

print "La ligne", nbLignes, "a", caracteresLigne, "caractères"

caracteres += caracteresLigne nbLignes += 1

print "Il y a en moyenne", caracteres/nbLignes, "caractères"

(23)

Exercice

§ Implémenter un segmenteur simple pour le français :

‚ Pour chaque phrase :

Lire un fichier ligne par ligne

Se servir d’une variable “mot” qui accumule les caractères

Dès qu’un caractère est un séparateur, enregistrer le mot ñ Créer un dictionnaire du nombre de mots dans le texte

(24)

Exercice

§ Implémenter un segmenteur simple pour le français :

‚ Pour chaque phrase :

Lire un fichier ligne par ligne

Se servir d’une variable “mot” qui accumule les caractères

Dès qu’un caractère est un séparateur, enregistrer le mot ñ Créer un dictionnaire du nombre de mots dans le texte

(25)

Exercice (solution)

caractere = '' mot = ''

dictMots = {} # Dictionnaire du nombre d'occurrences par mot for ligne in codecs.open("80jours.txt", "r", "utf-8"):

ligne += ' ' ligneMots = []

for caractere in ligne:

# Caractere non-separateur : ajout au mot courant if caractere not in [' ', ',', '.', '!', '?']:

mot += caractere

# Separateur : enregistrement et passage au suivant else:

if len(mot):

ligneMots += [mot]

dictMots[mot] = dictMots.get(mot, 0) + 1 mot = ''

print ligneMots

(26)

Compléments pour python

§ Entête pour faire travailler python en UTF8 :

#!/usr/bin/env python

# -*- coding: utf-8 -*- import codecs, sys

sys.stdin = codecs.getreader('utf8')(sys.stdin) sys.stdout = codecs.getwriter('utf8')(sys.stdout)

§ Diverses choses utiles :

‚ Utiliser range() pour les boucles for i in range(10):

‚ Récupérer les arguments du programme avec la listesys.argv

‚ Lire l’entrée standard avec sys.stdin

‚ Utiliser la fonctionsorted()pour les tris : listeTriee = sorted(liste)

listeTriee = sorted(liste, reverse = True)

cleTriees = sorted(dict.items(), key=lambda x:x[1])

Références

Documents relatifs

28 Eure & Loir Fichier au format TXT 28-Préfecture 29 Finistère Etiquettes Adresses. 30

As for the QC-DeMo intervention, the implementation evaluation of IDeI will be based on the FISpH with focus on the implementation process and outcomes, as well as the impact

The primary outcome is the difference in the proportion of galenic units considered as potentially inappropriate, relative to the total number of galenic units used

The defined daily dose (DDD) for each drug will be computed according to its active ingredient and route of administration.. OLD-NH-QC-DeMo-2017, Version 1

For participants allocated to the intervention group, the realisation of the medication review by the pharmacist, the discussion of its results with the treating physicians,

Ce mémoire a été réalisé au sain de SWISS TXT, entreprise en charge de la production des sous-titres destinés aux sourds et malentendants pour les chaînes de la Radio

– L'émetteur envoie son message avec un code de contrôle (de petite taille) calculé grâce à un algorithme connu du récepteur. – Le récepteur reçoit le message avec le code,

2.3 – Création d’un bassin de 2 ha pour piéger les radioéléments des eaux de ruissellement du site minier de Fanay :.  Ouvrage de répartition :