Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf ·...

64
Chapitre 13 : Sujets divers Alexandre Blondin Mass´ e epartement d’informatique Universit´ e du Qu´ ebec `a Montr´ eal 5 d´ ecembre 2017 Construction et maintenance de logiciels INF3135 A. Blondin Mass´ e (UQAM) 5 d´ ecembre 2017 1 / 64

Transcript of Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf ·...

Page 1: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Chapitre 13 : Sujets divers

Alexandre Blondin Masse

Departement d’informatiqueUniversite du Quebec a Montreal

5 decembre 2017Construction et maintenance de logiciels

INF3135

A. Blondin Masse (UQAM) 5 decembre 2017 1 / 64

Page 2: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Table des matieres

1. Moteurs de productionAutotoolsCMake

2. Python

3. Cython

A. Blondin Masse (UQAM) 5 decembre 2017 2 / 64

Page 3: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Table des matieres

1. Moteurs de productionAutotoolsCMake

2. Python

3. Cython

A. Blondin Masse (UQAM) 5 decembre 2017 3 / 64

Page 4: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Production

I Supposons que nous avons un programme complet et quenous souhaitons le distribuer;

I Il existe plusieurs outils pour faciliter cette procedure;

I Nous allons nous concentrer sur deux d’entre eux :

I Autotools, developpe par GNU, qui sont en realiteplusieurs projets : Autoconf, Automake, Libtool.

I CMake, qui permet dans certains une portabilite surWindows.

A. Blondin Masse (UQAM) 5 decembre 2017 4 / 64

Page 5: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Cas d’etude

A. Blondin Masse (UQAM) 5 decembre 2017 5 / 64

Page 6: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Recuperation du projet

I Le projet est disponible sur Bitbucket;

I Pour le faire fonctionner, il suffit d’entrer (en supposantque toutes les dependances sont installees) :

git clone https://[email protected]/ablondin-projects/maze-sdl.gitcd maze-sdl/srcmake./maze

I Nous aimerions par contre pouvoir l’installer sur lesysteme de sorte qu’il soit disponible de n’importe ou.

I Note : La version du projet avec Autotools et CMakeest disponible sur la branche with-dev-tools.

A. Blondin Masse (UQAM) 5 decembre 2017 6 / 64

Page 7: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Introduction

I Solution la plus populaire pour les systemes UNIX;

I Tres simple a manipuler d’un point de vue utilisateur :

./configure # Configuration adaptee a la machinemake # Compilationsudo make install # Installation systeme

I Plus difficile d’un point de vue developpeur :

I Plusieurs outils a maıtriser : Autoscan, Automake,Autoconf, Libtool, etc.

I Bonne connaissance des systemes d’exploitationrequise;

I Doit etre mis a jour regulierement.

A. Blondin Masse (UQAM) 5 decembre 2017 7 / 64

Page 8: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Retour au cas d’etude

I Dans le cas d’etude, aller sur la branche autotools, puisentrer :

aclocalautoheaderautoconfautomake --add-missingautomake

I Ensuite, pour produire le projet, entrer

./configuremakesudo make install

A. Blondin Masse (UQAM) 5 decembre 2017 8 / 64

Page 9: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Simplifier pour l’utilisateur

I L’utilisateur moyen n’a generalement pas envie d’entrerles commandes ci-bas :

aclocalautoheaderautoconfautomake --add-missingautomake

I Une strategie simple consiste a placer ces commandes dansun script (appele boostrap, par exemple) et alors on n’aqu’a faire

./boostrap

./configuremakesudo make install

A. Blondin Masse (UQAM) 5 decembre 2017 9 / 64

Page 10: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Fichiers supplementaires

I Evidemment, pour que Autotools fonctionne, il faut luicommuniquer certaines informations a l’aide de fichierstextes :

I Un fichier configure.ac, qui gere la configuration;

I Dans chaque repertoire/sous-repertoire, un fichierMakefile.am;

I Optionnellement, un script boostrap pour simplifierl’installation.

I L’extension du fichier indique le programme qui l’utilise(ac = autoconf, am = automake, etc.).

A. Blondin Masse (UQAM) 5 decembre 2017 10 / 64

Page 11: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Fichiers configure.ac

# -*- Autoconf -*-# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.69])AC_INIT([maze], [0.1], [[email protected]])AM_INIT_AUTOMAKE(maze, 0.1)AC_CONFIG_SRCDIR([src/animated_spritesheet.c])AC_CONFIG_HEADERS([config.h])

# Checks for programs.AC_PROG_CC

# Checks for libraries.# FIXME: Replace ‘main’ with a function in ‘-lSDL2_image’:AC_CHECK_LIB([SDL2_image], [main])# FIXME: Replace ‘main’ with a function in ‘-ltmx’:AC_CHECK_LIB([tmx], [main])

# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.AC_CHECK_HEADER_STDBOOL

# Checks for library functions.AC_FUNC_MALLOC

AC_CONFIG_FILES([Makefilesrc/Makefileassets/Makefile])

AC_OUTPUT

A. Blondin Masse (UQAM) 5 decembre 2017 11 / 64

Page 12: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Fichiers Makefile.am (1/2)

Fichier /Makefile.am

AUTOMAKE_OPTIONS = foreignSUBDIRS = src assets

Fichier /src/Makefile.am

assetsdir = $(datadir)/@PACKAGE@/assets/AM_CFLAGS = ‘sdl2-config --cflags‘ ‘xml2-config --cflags‘ -

DASSETS_PATH=’"${assetsdir}"’AM_LDFLAGS = ‘sdl2-config --libs‘ ‘xml2-config --libs‘LDADD = -ltmx -lxml2 -lz -lSDL2 -lSDL2_image

bin_PROGRAMS = mazemaze_SOURCES = animated_spritesheet.c animated_spritesheet.h

application.c application.h character.c character.hconstants.h game.c game.h main.c maze.c maze.h menu.c menu.h sdl2.h spritesheet.c spritesheet.h utils.h

A. Blondin Masse (UQAM) 5 decembre 2017 12 / 64

Page 13: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Fichiers Makefile.am (2/2)

Fichier /assets/Makefile.am

assetsdir = $(datadir)/@PACKAGE@/assetsassets_DATA = level1.tmx maze-tile0000.png maze-tile0001.png

maze-tile0010.png maze-tile0011.png maze-tile0100.png maze-tile0101.png maze-tile0110.png maze-tile0111.png maze-tile1000.png maze-tile1001.png maze-tile1010.png maze-tile1011.png maze-tile1100.png maze-tile1101.png maze-tile1110.png maze-tile1111.png maze.png play.png quit.pngwalking.png

A. Blondin Masse (UQAM) 5 decembre 2017 13 / 64

Page 14: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

CMake

I CMake est un logiciel semblable a Autotools, mais quivise a etre multiplateforme;

I En particulier, il fonctionne dans plusieurs cas surWindows (en autant qu’un compilateur soit disponible);

I Il permet de simplifier la compilation et l’installation;

I Mais il est aussi possible de generer un “template” deprojet pour developper (Visual Studio, Eclipse, Netbeans,etc.).

I Comme Autotools, il est relativement facile a manipulerd’un point de vue utilisateur, mais est plus complexe d’unpoint de vue developpeur.

A. Blondin Masse (UQAM) 5 decembre 2017 14 / 64

Page 15: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Retour sur le cas d’etude

I Au niveau utilisateur, il suffit d’entrer les commandessuivantes :

git clone https://[email protected]/ablondin-projects/maze-sdl.git

cd maze-sdlmkdir buildcd buildcmake ..

I Ensuite, sur les systemes UNIX, on obtient un Makefile,qu’on peut utiliser :

makesudo make install

A. Blondin Masse (UQAM) 5 decembre 2017 15 / 64

Page 16: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Un fichier unique : CMakeLists.txt

# Global settingscmake_minimum_required(VERSION 3.5.1)project(maze)

# Sources and executablefile(GLOB SOURCES "src/*.c")add_executable(${PROJECT_NAME} ${SOURCES})

# Includesexecute_process(COMMAND "sdl2-config" "--cflags" OUTPUT_VARIABLE SDL2_CFLAGS

OUTPUT_STRIP_TRAILING_WHITESPACE)execute_process(COMMAND "xml2-config" "--cflags" OUTPUT_VARIABLE XML2_CFLAGS

OUTPUT_STRIP_TRAILING_WHITESPACE)set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${SDL2_CFLAGS} ${XML2_CFLAGS}")

# Linkingexecute_process(COMMAND "sdl2-config" "--libs" OUTPUT_VARIABLE SDL2_LDFLAGS

OUTPUT_STRIP_TRAILING_WHITESPACE)execute_process(COMMAND "xml2-config" "--libs" OUTPUT_VARIABLE XML2_LDFLAGS

OUTPUT_STRIP_TRAILING_WHITESPACE)set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lSDL2_image ${SDL2_LDFLAGS} -

ltmx -lz ${XML2_LDFLAGS}")

# Installinginclude(GNUInstallDirs)install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION bin)install(DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/assets/ DESTINATION ${

CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/assets FILES_MATCHING PATTERN *.pngPATTERN *.tmx)

A. Blondin Masse (UQAM) 5 decembre 2017 16 / 64

Page 17: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Table des matieres

1. Moteurs de production

2. Python

3. Cython

A. Blondin Masse (UQAM) 5 decembre 2017 17 / 64

Page 18: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Presentation generale

I Concu vers la fin des annees 80;

I Cree par Guido Van Rossum, surnomme dictateurbienveillant pour la vie;

I Les deux versions les plus utilisees sont 2.7, 3.4 et 3.5 :

I La version 2.7 ne sera plus supportee apres 2020;

I Il est donc preferable, lorsque possible, d’utiliserdirectement les versions 3.4+;

I En 2014, Python aurait surpasse Java comme langaged’introduction a la programmation;

A. Blondin Masse (UQAM) 5 decembre 2017 18 / 64

Page 19: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Particularites

I Traditionnellement decrit comme un langage de script;

I Typage dynamique;

I Fortement oriente-objet;

I Supporte partiellement le paradigme fonctionnel;

I Tres pres du pseudocode (c’est-a-dire de l’anglais);

I Langage interprete (par opposition a compile);

I Peut etre compile vers C pour gagner en efficacite, via lelangage hybride Cython.

A. Blondin Masse (UQAM) 5 decembre 2017 19 / 64

Page 20: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Philosophie

I Le style de programmation est fondamental (on utilisel’adjectif pythonic).

I L’idiomatique est importante :

“There should be one — and preferably only one— obvious way to do it.”

I Une liste de 20 principes, appeles Zen of Python, decritla philosophie derriere ce langage;

I Le developpement du langage est regi par un processusappele Python Enhancement Proposal (PEP) (aucunlien avec PEP8).

A. Blondin Masse (UQAM) 5 decembre 2017 20 / 64

Page 21: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Particularites

I Toute variable est un objet, meme les types de base;

I L’indentation est cruciale pour la compilation;

I La syntaxe minimise l’emploi de caracteres superflus :

I Pas de points-virgules;

I Pas d’accolades pour les blocs;

I Pas de parentheses superflues, etc.

I On ne declare jamais le type d’une variable, celui-ci estinfere (typage dynamique);

I En revanche, le typage est fort (operations interditesentre types non compatibles).

I On utilise l’extension .py pour les fichiers Python.

A. Blondin Masse (UQAM) 5 decembre 2017 21 / 64

Page 22: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Bibliotheque standard

Une grande force de Python et l’ampleur de sa bibliothequestandard (batteries included) :

I Base de donnees relationnelles;

I Arithmetique des grands nombres;

I Nombres aleatoires;

I Expressions regulieres;

I Interfaces graphiques;

I Applications web, etc.

A. Blondin Masse (UQAM) 5 decembre 2017 22 / 64

Page 23: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Fonctionnement

Il y a essentiellement deux facons d’utiliser Python :

1. Directement dans l’interpreteur (taper quit() pourquitter l’interpreteur) :

2. En executant un programme, via la commande

python3 <nom du programme>

A. Blondin Masse (UQAM) 5 decembre 2017 23 / 64

Page 24: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Types numeriques (1/2)

I Quatre types numeriques :

I Les entiers (int);

I Les flottants (float);

I Les fractionnaires (Fraction), pour representer lesnombres rationnels;

I Les decimaux (Decimal).

I Les operations standards sont disponibles :

+, -, *, /, % # arithmetique de base** # exponentiation// # division entiere

I x / y retourne toujours un flottant, alors que x // yretourne toujours un entier.

A. Blondin Masse (UQAM) 5 decembre 2017 24 / 64

Page 25: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Types numeriques (2/2)

>>> 3 + 58>>> 3 / 5 # La division est fractionnaire0.6>>> 3 // 5 # Division entiere0>>> 2 ** 5 # Exponentiation32

A. Blondin Masse (UQAM) 5 decembre 2017 25 / 64

Page 26: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Le type None

I Le type None est utilise pour representer les valeurs nulles;

I Semblable a null en Java et NULL en C.

>>> None>>> x = None>>> if x is None: print ’x is None’x is None

A. Blondin Masse (UQAM) 5 decembre 2017 26 / 64

Page 27: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Booleens

I Les valeurs reservees sont True ou False (premiere lettremajuscule).

I Les operateurs sont des mots et non des symboles, comme||, &&, etc.

>>> True and FalseFalse>>> x = 2>>> y = 3>>> x + y == 5True>>> x + y == 5 and x - y == -1True>>> not x == 3True

A. Blondin Masse (UQAM) 5 decembre 2017 27 / 64

Page 28: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Chaınes de caracteres

I Pas de type char ! Seulement le type String;

I On peut utiliser les apostrophes ou les guillemets pourrepresenter des chaınes :>>> ’une chaine’’une chaine’>>> ’attention a l\’apostrophe’"attention a l’apostrophe">>> "attention a l’apostrophe""attention a l’apostrophe">>> ’Il repondit: "Je ne sais pas".’’Il repondit: "Je ne sais pas".’

I Pour laisser tels quels les caracteres proteges (escaped),on prefixe avec r :>>> r’Les caractere \n et \b sont speciaux’ # Noter le r au

debut’Les caractere \\n et \\b sont speciaux’>>> print(r’Les caractere \n et \b sont speciaux’)Les caractere \n et \b sont speciaux

A. Blondin Masse (UQAM) 5 decembre 2017 28 / 64

Page 29: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Chaınes multilignes

I Pour les chaınes sur plusieurs lignes :

>>> print("""\Usage: ./tp1 [OPTIONS]

-h --help Affiche l’aide-v --verbose Affiche une trace de l’execution-o <fichier> Ecrit le resultat dans <fichier>

""") # Pratique pour les menus d’aide, long textes, etc.

I Le resultat est alors

Usage: ./tp1 [OPTIONS]-h --help Affiche l’aide-v --verbose Affiche une trace de l’execution-o <fichier> Ecrit le resultat dans <fichier>

I Peut etre combine avec le prefixe r s’il y a des caracteres \qui doivent etre conserves.

A. Blondin Masse (UQAM) 5 decembre 2017 29 / 64

Page 30: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Operations sur les chaınes (1/5)

I Les chaınes de caracteres sont immuables;

I On accede au i-eme caractere de s avec la notation s[i];

I On peut acceder au i-eme caractere a partir de la droiteen utilisant des indices negatifs :>>> s = ’python’>>> s[0] # Les indices commencent a zero’p’>>> s[1]’y’>>> s[-1] # Le dernier caractere’n’>>> s[-2] # L’avant-dernier caractere’o’>>> s[-0] # Attention -0 = 0 !’p’>>> s[10] # Erreur d’indiceTraceback (most recent call last):File "<stdin>", line 1, in <module>

IndexError: string index out of range

A. Blondin Masse (UQAM) 5 decembre 2017 30 / 64

Page 31: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Operations sur les chaınes (2/5)

I On peut recuperer une sous-chaıne avec la notations[i:j] (i est inclus, j est exclu) :>>> s = ’python’>>> s[2:4] # le 2-ieme caractere est inclus, le 4e exclu’th’>>> s[:3] # Si on omet i, on commence a 0’pyt’>>> s[1:] # Si on omet j, on va jusqu’a la fin’ython’>>> s[:-1] # On peut utiliser les indices negatifs’pytho’

I Pour repeter plusieurs fois une chaıne>>> 2 * ’tou’’toutou’

I Pour obtenir la longueur d’une chaıne :>>> len(’python’)6

A. Blondin Masse (UQAM) 5 decembre 2017 31 / 64

Page 32: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Operations sur les chaınes (3/5)

I La concatenation (+) et la substitution (%) sont tresutiles :

>>> ’le langage’ + ’ python’’le langage python’>>> x = 3>>> y = 4>>> ’x = %s et y = %s’ % (3, 4)’x = 3 et y = 4’>>> x = 4>>> obj = ’objet’ if x < 2 else ’objets’>>> ’il y a %s %s’ % (x, obj)’il y a 4 objets’

A. Blondin Masse (UQAM) 5 decembre 2017 32 / 64

Page 33: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Operations sur les chaınes (4/5)

I Equivalent de StringTokenizer en Java :

>>> s = ’montreal:quebec:canada’>>> s.split(’:’)>>> [’montreal’, ’quebec’, ’canada’]

I L’operation join est aussi tres utile :

>>> mots = [’montreal’, ’quebec’, ’canada’]>>> ’:’.join(mots)’montreal:quebec:canada’

A. Blondin Masse (UQAM) 5 decembre 2017 33 / 64

Page 34: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Operations sur les chaınes (5/5)

Plusieurs autres fonctions :

I s.lower() : transforme s en minuscules;

I s.isnumeric() : est-ce que s est un nombre?

I s.index(t) : retourne le premier indice ou t apparaıtdans s;

I s.count(t) : combien de fois est-ce que t apparaıt danss;

I s.endswith(t) : est-ce que s termine par t?

Voir ici pour plus de details.

A. Blondin Masse (UQAM) 5 decembre 2017 34 / 64

Page 35: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Structures conditionnelles

I On utilise les mots reserves if, elif et else;

I L’indentation est primordiale (on suggere quatreespaces, pas de tabulation);

I On ne met pas de parentheses ni d’accolades.

I On doit terminer la condition avec le caractere :;

I On utilise les operateurs booleens and, or et not.

if prix >= 100:print("Rabais de 20%")

elif prix >= 50 and prix < 100:print("Rabais de 10%")

elif prix >= 0:print("Aucun rabais.")

else:print("Le prix n’est pas valide.")

A. Blondin Masse (UQAM) 5 decembre 2017 35 / 64

Page 36: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Boucles while

I Comme dans la plupart des langages de programmation, onpeut ecrire des boucles tant que :

i = 10while i > 0:

print ii -= 1

I Les boucles do-while n’existent pas, mais on peut lessimuler en utilisant le mot reserve break :

while True:choix = saisir_choix()if est_valide(choix): break

I Le mot continue est aussi disponible, si on souhaitepasser immediatement au prochain tour de boucle.

A. Blondin Masse (UQAM) 5 decembre 2017 36 / 64

Page 37: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Boucles for

I Ce sont les boucles les plus courantes;

I Nous verrons un peu plus loin qu’elles sont utilisees pourparcourir les structures de donnees classiques;

I Par exemple, pour parcourir les elements d’une liste :

for fruit in [’pomme’, ’banane’, ’fraise’]:print(fruit)

I On peut parcourir les lettres d’une chaıne :

for lettre in ’python’:print(lettre)

# Affiche p y t h o n

I Aussi utilise en conjonction avec range :

for i in range(5):print(i)

# Affiche 0 1 2 3 4

A. Blondin Masse (UQAM) 5 decembre 2017 37 / 64

Page 38: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

La fonction range

I En fait, range(start, end, step) designe une suitede nombres qui commence a start, qui ne depasse pasend et qui fait des bonds de step.

I Exemples :

>>> list(range(5))[0, 1, 2, 3, 4] # On note que 5 est exclu>>> list(range(1,4))[1, 2, 3]>>> list(range(10,30,5)) # Par bond de 5, 30 exclu[10, 15, 20, 25]>>> list(range(30,0,-5)) # Par bond de -5[30, 25, 20, 15, 10, 5]>>> list(range(0,30,-5)) # Peut retourner une liste vide[]

A. Blondin Masse (UQAM) 5 decembre 2017 38 / 64

Page 39: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Fonctions

I On declare une fonction a l’aide du mot reserve def;

I L’indentation determine le debut et la fin de la fonction;

I On utilise return pour retourner une valeur :

def fibonacci(n):if n == 0 or n == 1:

return 1else:

return fibonacci(n - 1) + fibonacci(n - 2)

I On appelle la fonction comme a l’habitude :

print(’fibonacci(8) = %s’ % fibonacci(8))

I Il n’est pas obligatoire de retourner une valeur.

A. Blondin Masse (UQAM) 5 decembre 2017 39 / 64

Page 40: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Fonctions anonymes

I On peut construire une fonction anonyme a l’aide du motreserve lambda :

carre = lambda x: x * xest_pair = lambda n: n % 2 == 0

I Ensuite, on appelle la fonction comme d’habitude;

I Souvent utilise en conjonction avec les fonctions max, minet sort.

>>> maj = lambda s: s.upper()>>> maj(’roi’)>>> ’ROI’>>> mots = [’Banane’, ’fraise’, ’Fruit’, ’celeri’, ’Tomate’

]>>> mots.sort(key=maj)>>> mots>>> [’Banane’, ’celeri’, ’fraise’, ’Fruit’, ’Tomate’]

A. Blondin Masse (UQAM) 5 decembre 2017 40 / 64

Page 41: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Structures de donnees disponibles

Python offre directement les structures de donneesclassiques :

I Les tuples (immuables);

I Les listes (mutables);

I Les ensembles :

I set (mutables);

I frozenset (immuables);

I Les dictionnaires (mutables).

A. Blondin Masse (UQAM) 5 decembre 2017 41 / 64

Page 42: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Les tuples

I Permettent de regrouper plusieurs objets;

I On utilise des parentheses pour les delimiter :

(1, 2, 3)(’INF3135’, ’Construction et maintenance...’, ’Lundi’, 3)

I On accede au i-eme element de t avec la notation t[i];

I On peut concatener des tuples avec l’operateur +;

I Pratique pour des fonctions qui retournent plusieursvaleurs :

def bornes(intervalle):return (min(intervalle), max(intervalle))

I Essentiellement comme des listes, sauf que les tuples sontimmuables.

A. Blondin Masse (UQAM) 5 decembre 2017 42 / 64

Page 43: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Les listes

I Comme les tuples, mais mutables;

I Sans doute la structure de donnees la plus utilisee;

I On utilise des crochets pour les delimiter :

[1, 2, 3][’INF3135’, ’Construction et maintenance...’, ’Lundi’, 3]

I On accede au i-eme element de t avec la notation t[i];

I On peut concatener des listes avec l’operateur +;

I On peut extraire une sous-liste a l’aide de la notation[i:j].

A. Blondin Masse (UQAM) 5 decembre 2017 43 / 64

Page 44: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Fonctions sur les listes

Plusieurs fonctions naturelles :

I L.append, pour ajouter un element a la fin de la liste L;

I L.extend(M), pour ajouter les elements de la liste M a lafin de la liste L;

I L.pop(i), pour supprimer et retourner le i-eme elementde L;

I L.sort(), pour trier la liste;

I L.reverse(), pour renverser la liste;

I L.count(x), pour compter le nombre de fois que xapparaıt dans L, etc.

A. Blondin Masse (UQAM) 5 decembre 2017 44 / 64

Page 45: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

La comprehension de liste

I Extremement utile et puissante;

I Permet de definir des listes sans avoir a inserer leselements un par un :

>>> print([i**2 for i in range(8)])[0, 1, 4, 9, 16, 25, 36, 49]>>> print([i**2 for i in range(8) if i % 2 == 0])[0, 4, 16, 36]>>> print([fibonacci(i) for i in range(10)])[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]>>> print([[i*j for i in range(4)] for j in range(3)])[[0, 0, 0, 0], [0, 1, 2, 3], [0, 2, 4, 6]]

I Permet d’eviter d’ecrire du code tel que

resultat = []for i in range(8):

if i % 2 == 0:resultat.append(i**2)

A. Blondin Masse (UQAM) 5 decembre 2017 45 / 64

Page 46: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Parcours d’une liste

I On utilise le mot reserve for :categories = [’verbe’, ’nom’, ’adjectif’, ’adverbe’]for categorie in categories:

print(categorie)

I Eviter l’expression range(len(...)) :categories = [’verbe’, ’nom’, ’adjectif’, ’adverbe’]for i in range(len(categories)):

print(categories[i])

I Si l’indice est important, faire plutotcategories = [’verbe’, ’nom’, ’adjectif’, ’adverbe’]for (i,categorie) in enumerate(categories):

print("La categorie #%s est %s" % (i, categorie))

# Resultat# La categorie #0 est verbe# La categorie #1 est nom# La categorie #2 est adjectif# La categorie #3 est adverbe

A. Blondin Masse (UQAM) 5 decembre 2017 46 / 64

Page 47: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Les ensembles

I Lorsqu’on souhaite eliminer les doublons, on utilise lesensembles;

I S’ils sont modifiables, on utilise set();

I Parfois, il faut utiliser des ensembles non modifiables, eton utilise plutot frozenset().

I Ils offrent plusieurs fonctions similaires aux listes;

I Exemple :

>>> mots = [’banane’, ’fraise’, ’pomme’, ’orange’]>>> lettres = set([lettre for mot in mots for lettre in mot])>>> lettres{’b’, ’r’, ’g’, ’p’, ’o’, ’m’, ’n’, ’f’, ’e’, ’a’, ’i’, ’s’}>>> len(lettres)12>>> sorted(lettres)[’a’, ’b’, ’e’, ’f’, ’g’, ’i’, ’m’, ’n’, ’o’, ’p’, ’r’, ’s’]

A. Blondin Masse (UQAM) 5 decembre 2017 47 / 64

Page 48: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Operations sur les ensembles

I Les operations ensemblistes sont disponibles :

>>> a = set(’fromage’)>>> b = set(’bleu’)>>> a | b>>> {’b’, ’g’, ’r’, ’u’, ’o’, ’m’, ’l’, ’a’, ’f’, ’e’}>>> a & b>>> {’e’}>>> a ˆ b>>> {’b’, ’r’, ’g’, ’u’, ’o’, ’m’, ’l’, ’a’, ’f’}>>> a - b>>> {’g’, ’r’, ’o’, ’m’, ’a’, ’f’}

I On peut aussi definir un ensemble par comprehension :

>>> {x for x in ’abracadabra’ if x not in ’abc’}{’r’, ’d’}

A. Blondin Masse (UQAM) 5 decembre 2017 48 / 64

Page 49: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Les dictionnaires

I Ce sont des tableaux associatifs;

I Ils permettent de mettre en relation des cles avec desvaleurs;

I Les cles doivent etre immuables :

I Listes → Tuples;

I set → frozenset.

I Extremement pratiques;

I Ils sont declares en utilisant des accolades.

A. Blondin Masse (UQAM) 5 decembre 2017 49 / 64

Page 50: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Operations sur les dictionnaires

>>> infos = {’cours’: ’construction et maintenance’, ’sigle’: ’inf3135’}

>>> infos[’cours’]’construction et maintenance’>>> infos[’sigle’]’inf3135’>>> ’sigle’ in infosTrue>>> list(infos.keys())[’cours’, ’sigle’]>>> list(infos.values())[’construction et maintenance’, ’inf3135’]

>>> text = ’un tres long texte avec des informations...’>>> freq = {lettre: text.count(lettre) for lettre in set(text)

if lettre >= ’a’ and lettre <= ’z’}>>> freq>>> {’v’: 1, ’i’: 2, ’c’: 1, ’g’: 1, ’r’: 2, ’f’: 1, ’u’: 1, ’o

’: 3, ’d’: 1, ’m’: 1, ’s’: 3, ’n’: 4, ’l’: 1, ’a’: 2, ’e’:5, ’x’: 1, ’t’: 4}

A. Blondin Masse (UQAM) 5 decembre 2017 50 / 64

Page 51: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Parcourir un dictionnaire

I On parcourt les paires cle/valeur a l’aide d’une bouclefor :

text = ’un tres long texte avec des informations...’frequences = {lettre: text.count(lettre)\

for lettre in set(text)\if lettre >= ’a’ and lettre <= ’z’}

for (lettre, freq) in frequences.items():print(’La lettre %s apparait %s fois’ % (lettre, freq))

I Resultat :

La lettre v apparait 1 foisLa lettre i apparait 2 foisLa lettre c apparait 1 fois...La lettre e apparait 5 foisLa lettre x apparait 1 foisLa lettre t apparait 4 fois

A. Blondin Masse (UQAM) 5 decembre 2017 51 / 64

Page 52: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Lecture ligne par ligne

I Extremement court a ecrire :

with open(’countryInfo.txt’, ’r’) as input_file:for line in input_file:

print(line)

ou

I ’countryInfo.txt’ est le nom fichier qu’on lit;

I ’r’ precise que le mode est lecture;

I input file est la variable du fichier;

I line prend la valeur de chaque ligne du fichier, unepar une, incluant le \n final.

I Le fichier est ferme automatiquement.

A. Blondin Masse (UQAM) 5 decembre 2017 52 / 64

Page 53: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Ecriture dans un fichier

I Pour ecrire ligne par ligne, on utilise la fonction write :

with open(’resultat.txt’, ’w’) as output_file:output_file.write(’Une ligne\n’)output_file.write(’Une autre ligne\n’)

ou

I ’resultat.txt’ est le fichier dans lequel on ecrit;

I ’w’ precise que le mode est ecriture;

I output file est la variable du fichier;

I Il ne faut pas oublier le caractere \n pour changer deligne.

I Ici aussi, la fermeture du fichier est geree par le motreserve with.

A. Blondin Masse (UQAM) 5 decembre 2017 53 / 64

Page 54: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Classes et objets

I Comme plusieurs langages, Python est oriente-objet;

I Heritage;

I Heritage multiple comme en C++, par opposition aJava;

I Polymorphisme;

I Surcharge des operateurs;

I Pas de notions prive/public.

I La memoire est geree par un ramasse-miettes (garbagecollector), donc pas besoin de destructeur;

A. Blondin Masse (UQAM) 5 decembre 2017 54 / 64

Page 55: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Exemple

class Vecteur(object):

def __init__(self, x, y, z):r"""Constructeur"""self.x = xself.y = yself.z = z

def __repr__(self):r"""Representation d’un vecteur par une chaine de caracteres"""return ’(%s, %s, %s)’ % (self.x, self.y, self.z)

def __add__(self, other):r"""Addition de deux vecteurs"""return Vecteur(self.x + other.x,\

self.y + other.y,\self.z + other.z)

u = Vecteur(1, -1, 3)v = Vecteur(2, 4, -1)print(u)print(v)print(u + v)

A. Blondin Masse (UQAM) 5 decembre 2017 55 / 64

Page 56: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Modules (1/2)

I Un module est simplement un fichier Python;

I Il peut regrouper plusieurs classes, fonctions, etc.

I Premiere facon d’importer le module vecteur :

I import vecteur : ensuite, toute valeur est accedeavec la notation vecteur.<valeur>;

I Autrement dit, un espace de nom (namespace) estassocie au prefixe vecteur;

A. Blondin Masse (UQAM) 5 decembre 2017 56 / 64

Page 57: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Modules (2/2)

I Deuxieme facon d’importer le module vecteur :

I On peut egalement importer seulement une classe ouune fonction d’un module;

I Par exemple, from vecteur import Vecteurimporte la classe Vecteur, qui sera accessible sansutiliser le prefixe vecteur.

I La formulation from vecteur import * importe tousles objets et toutes les classes;

I Elle est cependant a proscrire pour des raisons delisibilite.

A. Blondin Masse (UQAM) 5 decembre 2017 57 / 64

Page 58: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Le module random

# Choix d’un element aleatoire dans une liste>>> import random>>> echantillon = [’verbe’, ’adjectif’, ’nom’]>>> random.choice(echantillon)’nom’>>> random.choice(echantillon)’adjectif’>>> random.choice(echantillon)’adjectif’>>> random.choice(echantillon)’verbe’

# Generation d’une liste d’entiers aleatoires>>> [random.randint(100, 200) for _ in range(20)][163, 152, 179, 138, 199, 170, 122, 164, 110, 104, 108, 193,

114, 110, 194, 182, 159, 153, 185, 188]

# Alternativement, on pourrait importer avec## from random import choice, randint## et utiliser les fonctions directement

A. Blondin Masse (UQAM) 5 decembre 2017 58 / 64

Page 59: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Table des matieres

1. Moteurs de production

2. Python

3. Cython

A. Blondin Masse (UQAM) 5 decembre 2017 59 / 64

Page 60: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Cython

I Compilateur statique permettant de compiler du codePython et du code Cython;

I Site officiel : http://cython.org/;

I Compatible avec Pyhon 2 et 3;

I En fait, le langage Cython est un super ensemble dulangage Python;

I Utilise dans plusieurs projets pour optimiser certainesparties.

A. Blondin Masse (UQAM) 5 decembre 2017 60 / 64

Page 61: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Exemple (Python)

import sysfrom time import time

def afficherSousEnsembles(n):s = "{ "i = 0j = 0while n != 0:

if n % 2 == 1:if (j == 300): print ’j = 300’j += 1s += ’%d ’ % i

n /= 2i += 1

s += "}"print s

def main(argv=None):if argv is None: argv = sys.argvavant = time();for i in range(2 ** int(argv[1])):

afficherSousEnsembles(i)apres = time();print "Temps ecoule : %lf seconde(s)\n" % (apres - avant)

if __name__ == "__main__":sys.exit(main())

A. Blondin Masse (UQAM) 5 decembre 2017 61 / 64

Page 62: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Exemple (C)#include <stdio.h>#include <stdlib.h>#include <math.h>#include <time.h>

void afficherSousEnsembles(unsigned long int n) {unsigned int i, j;printf("{ ");i = j = 0;while (n != 0) {

if (n % 2 == 1) {printf("%d ", i);if (j == 300) printf("j = 300");

}n /= 2;++i;

}printf("}\n");

}

int main(int argc, char *argv[]) {unsigned long int i;clock_t avant, apres;unsigned long int n;n = pow(2, strtol(argv[1], NULL, 0));avant = clock();for (i = 0; i < n; ++i)

afficherSousEnsembles(i);apres = clock();printf("Temps ecoule : %lf seconde(s)\n",

((double)(apres - avant) / CLOCKS_PER_SEC));return 0;

}

A. Blondin Masse (UQAM) 5 decembre 2017 62 / 64

Page 63: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Exemple (Python avec appel au programme C)

from os import systemfrom time import timeimport sys

def main(argv=None):if argv is None: argv = sys.argvavant = time();system("./ensemble %s" % argv[1])apres = time();print "Temps ecoule : %lf seconde(s)\n" % (apres - avant)

if __name__ == "__main__":sys.exit(main())

A. Blondin Masse (UQAM) 5 decembre 2017 63 / 64

Page 64: Chapitre 13 : Sujets diversmoz-code.org/uqam/cours/INF3135/cours/13-sujets-divers.pdf · 2018-12-06 · Introduction I Solution la plus populaire pour les syst emes UNIX; I Tr es

Exemple (Cython)

import sysfrom time import timecimport libc.stdio as stdio

cdef void afficherSousEnsembles(unsigned long int n):cdef unsigned int i = 0cdef unsigned int j = 0stdio.printf("{ ")while n != 0:

if n % 2 == 1:stdio.printf("%d ", i)j += 1

n /= 2i += 1

stdio.printf("}\n")

def main(n):cdef int icdef unsigned long int m = 2 ** navant = time();for i from 0 <= i < m:

afficherSousEnsembles(i)apres = time();print("Temps ecoule : %lf seconde(s)\n" % (apres - avant))

A. Blondin Masse (UQAM) 5 decembre 2017 64 / 64