Toolbending:Python
Sommaire
- 1 Think like a computer scientist?
- 2 Python!
- 3 Types d'erreurs et déboguage
- 4 Syntaxe de programmation
- 5 Liste, tableau
- 6 Concaténer
- 7 Itérations
- 8 Utiliser un fichier externe
- 9 Utiliser des commandes Bash dans Python
- 10 Sélection aléatoire
- 11 User input
- 12 Stocker son script dans un fichier
- 13 All work no play
- 14 Autres exercises
Think like a computer scientist?
Dans le discours traditionnel des acteurs du logiciel libre, la libération de la partie informationnelle que constitue le code permet d’en prendre le contrôle : son ouverture permet son appropriation par les utilisateurs qui peuvent alors redéfinir selon leurs propres critères les modalités et finalités de leurs outils. Mais si l’ouverture du code est une invitation à s’engager dans l’élaboration de nos outils, nous nous rendons compte dans la pratique que cette affirmation évacue le fait que le contrôle se fait toujours au détriment de quelqu’un d’autre. Les programmeurs contrôlent le code ; les designers, le design ; les typographes, la typographie, etc. Dans chaque cas de figure, il faut en premier lieu pouvoir pénétrer la culture qui l’entoure, rentrer dans le cercle. Pour nous, le libre suggère avant tout la volonté d’accepter de perdre un hypothétique contrôle, de lâcher du lest. Cela signifie questionner ses certitudes, au bénéfice de recevoir en retour quelque chose de nouveau. [1]
Python!
Python est un langage portable, dynamique, extensible, gratuit, qui permet (sans l'imposer) une approche modulaire et orientée objet de la programmation. Python est développé depuis 1989 par Guido van Rossum et de nombreux contributeurs bénévoles. [2]
http://fr.wikipedia.org/wiki/Python_(langage)
http://pzwart3.wdka.hro.nl/wiki/Twenty_things_to_do_with_a_python_script
Python partage beaucoup de principes de programmation avec d’autres langages populaires comme php, javascript ... Une fois qu’on apprend Python, on peut facilement passer à un langage ayant le même paradigme de programmation.
P.S. Cet introduction se base sur La Semaine Python (Stéphanie Villayphiou pour Les Samedies [1]) et How to think like a computer scientist (Aprendre à programmer avec Python en français [2]).
Console interactive
$ python >>>
Arreter la console Python:
>>> exit()
A partir d'un fichier
$ python nom_fichier.py
Types d'erreurs et déboguage
Erreur syntaxique
Le programme ne s’exécute pas complètement et donne une erreur.
Il s’agit d’une erreur de syntaxe: orthographe, ponctuation manquante, mauvaise indentation ...
Erreur sémantique ou de logique
Le programme s’exécute entièrement mais le résultat n’est pas celui escompté.
Il y a une erreur dans le raisonnement! Vérifier les résultats de variables et de fonctions aux endroits problématiques
Erreur d’exécution ou d’exception
Apparaît lorsque le programme fonctionne déjà, mais que des circonstances particulières apparaissent.
Ex. un fichier qui n’existe plus, se trouve ailleurs ou a été renommé.
Syntaxe de programmation
'Échapper' les caractères spéciaux:
>>> print "Hello \n World"
'Échapper' les caractères:
>>> print "Hello \\n World"
Chaîne de caractères:
>>> bonjour = "hello" >>> print "bonjour" >>> print bonjour
Par défaut, les nombres sont des nombres entiers par exemple:
>>> 20 / 3 = 6 >>> 20. / 3 = 6.333333335 >>> 20 / 3. = 6.3333333335
Commentaire:
>>> # This is a comment
Liste, tableau
Reconnaissable par ses crochets [ ]
La numérotation des listes commence à 0:
>>> travail = ["washing", "cleaning", "cooking"] >>> print travail[1] Cleaning
Ajouter un élément à la fin d’une liste:
>>> travail.append("preserving") >>> print travail ["washing", "cleaning", "cooking", "preserving"]
Effacer un élément d’une liste en spécifiant son index:
>>> travail = ["washing", "cleaning", "cooking"] >>> del travail[2] >>> print travail
["washing", "cleaning"]
Effacer un élément d’une liste en spécifiant sa valeur:
>>> travail = ["washing", "cleaning", "cooking"] >>> travail.remove("cleaning") >>> print travail ["washing", "cooking"]
Sélectionner une partie d’une liste (attention! le type du résulat obtenu est une liste, même s’il n’y a qu’un seul élément.)
>>> travail = ["washing", "cleaning", "cooking"] >>> print travail[1:2] ["cleaning"]
Variables
Une variable permet de stocker des données.
- Le nom ne peut comporter que des lettres, chiffres et l’underscore _
- Le nom commence forcément par une lettre
- Le nom est sensible à la casse
Liste de mots à ne pas utiliser dans des noms de variables, car ce sont des mots essentiels au fonctionnement de Python:
- and
- assert
- break
- class
- continue
- def
- del
- elif
- else
- except
- exec
- finally
- for
- from
- global
- if
- import
- in
- is
- lambda
- not
- or
- pass
- raise
- return
- try
- while
Concaténer
La concaténation est une liaison de 2 éléments. Concaténation de deux chaînes de caractères:
>>> "bon" "jour" bonjour >>> "bon" + "jour" bonjour
Concaténation de deux listes:
>>> travail = ["washing", "cleaning", "cooking"] >>> travail + travail >>> ["washing", "cleaning", "cooking", "washing", "cleaning", "cooking"]
>>> 3 * "bla" blablabla
Nous ne pouvons pas concatener deux types d’éléments. Pour temporairement transformer un chiffre (integer ou float) dans un texte (string):
>>> nombre = 9 >>> print str(nombre) + " is a number." 9 is a number
Pour temporairement transformer un texte (string) dans un chiffre (integer ou float):
>>> nombre = "9" >>> float(nombre) >>> float str(nombre) * 3 27
Conditions
if attention -- indentation!:
>>> nombre1 = 4 >>> nombre2 = 5 >>> if nombre1 < nombre2: >>> print str(nombre1) + " est plus petit que " + str(nombre2)
if/else
>>> if nombre1 < nombre2: >>> print nombre1 + " est plus petit que " + nombre2 >>> else: >>> print str(nombre1) + " est plus grand que " + str(nombre2)
Opérateurs
== égal
!= différent de
< plus petit que
<= plus petit ou égal
> plus grand que
>= plus grand ou égal
and & et
| or ou
not ne pas
Itérations
Boucles avec for
>>> for i in range(1, 5): ... print i 1 2 3 4
While (tant que) : boucle et test en même temps
>>> # on affiche i tant qu'il est plus petit que 10 >>> i = 0 >>> while (i<10): ... i = i + 1 ... print i
Utiliser un fichier externe
Lire un fichier:
>>> fichier = open("chemin_fichier/nom_fichier.txt", "r") >>> for ligne in fichier.readlines(): >>> print ligne >>> fichier.close()
Écrire dans un fichier:
>>> contenu = "Servicing procedures are repeated throughout the duration of the exhibition." >>> fichier = open("chemin_fichier/nom_fichier.txt", "w") >>> fichier.write("contenu") >>> fichier.close()
Utiliser des commandes Bash dans Python
>>> import os >>> commande = "echo 'Bonjour monde'" >>> os.system(commande) Bonjour monde
>>> import os >>> commande = "espeak 'Bonjour monde'" >>> os.system(commande)
>>> import os >>> travail = ["washing", "cleaning", "cooking"] >>> for todo dans travail: ... commande = "espeak "+todo ... os.system(commande)
Sélection aléatoire
<syntaxhighlight lang="python"> import random
- input sentence
words = ["i", "love", "you", "very", "much"]
- amount of repetitions
repetitions = 300
- print one random word from the list
print(random.choice(words))
- repeatedly select a random word
for i in range(repetitions):
select = random.choice(words) print select + " *",
</syntaxhighlight>
User input
>>> input_chore = raw_input("Please type your least favorite chore: ") Please type your least favorite chore: "washing dishes" >>> input_name = raw_input("What is your name? ") What is your name? "Femke" >>> input_gender = raw_input("Are you male or female? ") Are you male or female? "Female" >>> if input_gender == "male": ... gender = "boy" ... >>> if input_gender == "female": ... gender = "girl" ... >>> i = 0 >>> while (i < 100): ... i +=1 ... print ("All " + input_chore + " and no play makes " + input_name + " a dull " + gender) ... All washing dishes and no play makes Femke a dull girl All washing dishes and no play makes Femke a dull girl All washing dishes and no play makes Femke a dull girl All washing dishes and no play makes Femke a dull girl All washing dishes and no play makes Femke a dull girl All washing dishes and no play makes Femke a dull girl All washing dishes and no play makes Femke a dull girl All washing dishes and no play makes Femke a dull girl All washing dishes and no play makes Femke a dull girl
Stocker son script dans un fichier
Dans un editeur de texte. Sauver sous allworknoplay.py
<syntaxhighlight lang="python">
# -*- coding: UTF8 -*- #! /usr/bin/env python input_chore = raw_input("Please type your least favorite chore: ") input_name = raw_input("What is your name? ") input_gender = raw_input("Are you male or female? ") if input_gender == "male": gender = "boy" if input_gender == "female": gender = "girl" i = 0 while (i < 100): i +=1 print ("All " + input_chore + " and no play makes " + input_name + " a dull " + gender)
</syntaxhighlight>
Dans le terminal:
$ python allworknoplay.py
Rendre le fichier exécutable. Taper dans le terminal:
$ chmod +x allworknoplay.py
All work no play
P.S.: N'oubliez pas à ajouter la condition "else" en cas là réponse sera pas exactement comme prévu par ton programme !
<syntaxhighlight lang="python"> else:
# put some action here that will happen in case the answer is not caught by the if statement
</syntaxhighlight>
Max
<syntaxhighlight lang="python">
- Calculer le temps en jour de votre vie ;)
from datetime import date
input_year = raw_input("Year ? ") input_month = raw_input("Month ? ") input_day = raw_input("Day ? ")
def diff_dates(date1, date2):
return abs(date2-date1).days if (date1 < date2) else abs(date1-date2).days
def main():
d1 = date(int(input_year),int(input_month),int(input_day)) d2 = date.today() result1 = diff_dates(d2, d1) print("\n\nYou have lived "+str(result1)+" days.\n\nLong life to you.\n\n")
main() </syntaxhighlight>
Andy
<syntaxhighlight lang="python">
input_name = raw_input("Quel est ton nom ?: ") input_meurt = raw_input("Tu meurs si tu manges pas ? ") input_time = raw_input("Tu vas bientôt manger ? ") if input_meurt == "Oui": if input_time == "Oui": i = 0 while (i < 100): i +=1 print (input_name + " crève la dalle et décède si " + input_name + " ne mange pas rapidement " )
</syntaxhighlight>
Benoit
<syntaxhighlight lang="python"> </syntaxhighlight>
Maryl
<syntaxhighlight lang="python"> input_name = raw_input("What's your name? ") input_food = raw_input("What is your favorite food? ") input_nationality = raw_input("What is your nationality? ") input_gender = raw_input("What's your gender?")
if input_gender == "male": gender = "crocodile" if input_gender == "female": gender = "ladybird"
i = 0 while (i < 100): i +=1 print ( input_name + " is a " + gender + " that likes to eat " + input_nationality + " delicious " + input_food )
- -*- coding: UTF8 -*-
- ! /usr/bin/env python
gender = "hello" input_name = raw_input("What's your name? ") input_food = raw_input("What is your favorite food? ") input_nationality = raw_input("What is your nationality? ") input_gender = raw_input("What's your gender?")
if input_gender == "male": gender = "crocodile"
i = 0 while (i < 100): i +=1 print ( input_name + " is a " + gender + " that likes to eat " + input_nationality + " delicious " + input_food + ".")
if input_gender == "female": gender = "ladybird"
i = 0 while (i < 100): i +=1 print ( input_name + " is a " + gender + " that likes to eat " + input_nationality + " delicious " + input_food + "." )
if input_gender != "female" and input_gender != "male": print input_gender + " is not a gender " </syntaxhighlight>
Elliot
<syntaxhighlight lang="python">
input_name = raw_input("Comment tu t'appelles ? ") input_chiffre = raw_input("Choisis un chiffre entre 1 et 1000 : ")
print ("\n\n" + input_name + ", le chiffre auquel tu penses est " + input_chiffre + "\n\n")
</syntaxhighlight>
Vito
<syntaxhighlight lang="python">
- -*- coding: UTF8 -*-
- ! /usr/bin/env python
input_chore = raw_input("Quel est ton hobby ") input_name = raw_input("What is your name? ") input_gender = raw_input("Are you male or female? ")
if input_gender == "male": gender = "boy" if input_gender == "female": gender = "girl"
i = 0 while (i < 100): i +=1 print ("All " + input_chore + " and no play makes " + input_name + " a dull " + gender)
</syntaxhighlight>
Gaelle
<syntaxhighlight lang="python"> input_nom = raw_input("Quel est ton nom ?") input_genre = raw_input("Es-tu une femelle ou un male ?")
if input_genre == "femelle": genre = "fille" if input_genre == "male": genre = "garçon"
i = 0 while (i<20): i +=1 print("Tu," + input_nom + " , est apparemment de cette sorte-ci : " + input_genre + " et c’est chouette pour toi dis donc !") </syntaxhighlight>
Autres exercises
Scraping avec Beautiful Soup
Installation BeautifulSoup sur Linux
$ sudo apt-get install python-bs4
Sauvegarder un page immb dans un fichier
$ curl http://www.imdb.com/title/tt1740707/?ref_=fn_al_tt_1 > movie.html
Dans un éditeur de texte, le sauvegarder sous "movie.py"
from bs4 import BeautifulSoup doc = open ("movie.html") soup = BeautifulSoup(doc) actors = soup.find_all(itemprop="name") for actor in actors: print actor.text
Dans le terminal:
$ python movie.py
Create outlines of any font
import fontforge font = fontforge.open('douar.sfd') for glyph in font: font[glyph].stroke('circular', 30, 'square', 'bevel', ('cleanup',)) font.generate('douar-new.ttf')
- ↑ OSP, ReLearn http://osp.constantvzw.org/blog/wp-content/uploads/osp-bat-10-10-1.pdf
- ↑ Stéfane Fermigier dans http://www.inforef.be/swi/download/python_notes.pdf