• Slidy
  • Toolbending:Python

    De Ustensile
    Aller à : navigation, rechercher

    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]

    Guido van Rossum (By the way, the language is named after the BBC show "Monty Python's Flying Circus" and has nothing to do with nasty reptiles)

    http://vimeo.com/1093745

    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
    • print
    • 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

    1. input sentence

    words = ["i", "love", "you", "very", "much"]

    1. amount of repetitions

    repetitions = 300

    1. print one random word from the list

    print(random.choice(words))

    1. repeatedly select a random word

    for i in range(repetitions):

      	select = random.choice(words)
      	print select + " *",
    

    </syntaxhighlight>

    User input

    Dull.jpg

    >>> 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">

    1. 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 )



    1. -*- coding: UTF8 -*-
    2. ! /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">

    1. -*- coding: UTF8 -*-
    2. ! /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')
    
    1. OSP, ReLearn http://osp.constantvzw.org/blog/wp-content/uploads/osp-bat-10-10-1.pdf
    2. Stéfane Fermigier dans http://www.inforef.be/swi/download/python_notes.pdf