May 20, 2024

Wiki

Python

Aide

edit SideBar

Search

Introduction A Python


Le if

Remarque préliminaire

Dans les structures qui suivent, comme souvent en python, les espaces en début de ligne sont obligatoires.

  • Elles vont par 4.
  • Une tabulation n'est pas des espaces.

Cette indentation est l'unique information permettant de savoir quand commencent et finissent les blocs des différentes structures (if, while, etc.)

Le if par l'exemple

Premier exemple

Exemple d'utilisation d'une structure « Si ... alors ... sinon ... » :

  >>> if 'a' < 'c' :
  ...     print "a est plus petit que c"
  ... else :
  ...     print "a est plus grand que c"
  ...

Dit autrement, si 'a' est plus petit que 'c' (dans l'ordre naturel des lettres), alors afficher « a est plus petit que c », sinon afficher « a est plus grand que c».

Deuxième exemple

Exemple d'utilisation d'une structure « Si ... alors ... sinon si ... alors ... sinon ...» :

  >>> if 1 > 2 :
  ...     print "1 est plus grand que 2"
  ... elif 1 == 2 :
  ...     print "1 est egal a 2"
  ... else :
  ...     print "tout va bien"
  ...

(le elif signifie "sinon si...")

Troisième exemple

Exemple d'utilisation d'une structure « Si ... est dans ... alors» :

  >>> c = raw_input("Saisir une lettre")
  >>> if c in "aeiouy" :
  ...     print "Voyelle !"
  ... else :
  ...     print "Consonne !"
  ...

Bref, si le caractère saisi par l'utilisateur est dans le mot "aeiouy", alors afficher voyelle, sinon afficher consonne. Avec un in, le conteneur (ici, la chaîne de caractères "aeiouy") peut aussi être une liste, comme par exemple [0, 2, 4, 6, 8] :

  >>> c = input("Saisir un chiffre")
  >>> if c in [0, 2, 4, 6, 8] :
  ...     print "Pair !"
  ... else :
  ...     print "Impair !"
  ...

Travaux pratiques

  1. Faire un programme qui demande à l'utilisateur son âge, et qui renvoie vous êtes jeune ou vous êtes vieux, suivant que l'âge est inférieur, ou supérieur, à 50 ans.
  2. Justifier pourquoi seule la troisième ligne ci-dessous peut figurer dans le programme demandé juste au-dessus.
    • if 'n' < 50 :
    • if n < '50' :
    • if n < 50 :
  3. Faire un second programme qui demande, une fois encore, l'âge de l'utilisateur, et qui affiche :
    • Vous êtes étudiant, si l'âge est inférieur à 25,
    • Vous êtes salarié, si l'âge est entre 25 et 55 ans,
    • Vous êtes retraité, sinon.

L'instruction for

Présentation de la méthode range

La méthode range permet de créer rapidement des listes d'entiers :

  • L'instruction range(n) renvoie la liste des entiers de 0 à n-1,
  >>> range(5)
[0, 1, 2, 3, 4]
  • range(a,b) renvoie la liste des entiers de a à b-1.
  >>> range(3,8)
[3, 4, 5, 6, 7]
  • range(a,b,c) renvoie la liste des entiers de a à b-1, avec un pas de c.
  >>> range(3,12,2)
[3, 5, 7, 9, 11]
  • Ce pas peut être négatif :
  >>> range(11,7,-1)
[11, 10, 9, 8]

Notons pour finir que la méthode range ne permet de manipuler que des entiers.

Le range dans le for

La boucle for (pour) peut parcourir tout "itérable", l'itérable de base étant une liste d'entiers.

Ainsi, lorsque l'on écrit :

  >>> for i in range(5) :
  ...     print i,
  ...

...on obtient 0 1 2 3 4.

Il faut comprendre ce qui précède ainsi : "Pour i parcourant la liste d'entier range(5)=[0,1,2,3,4], afficher i."

Ainsi, pour calculer la somme des 100 premiers entiers, on peut procéder ainsi :

  >>> S = 0
  >>> for k in range(101):
  ...     S = S + k
  ...
  >>> print S
  5050

Le for et les autres itérables

Une chaîne de caractères, comme mot, peut aussi être itérée : il y a un premier caractère, puis un second, etc.

On peut donc utiliser un for ici, quand on souhaite demander : pour un caractère dans la chaîne de caractères suivante...

  >>> for lettre in "mot" :
  ...     print lettre,
  ...
  mot

Ainsi, une boucle for peut parcourir une liste, ou une chaîne de caractères.

A noter que l'on peut utiliser les mots réservés pass, continue et break...

Travaux pratiques

  • Faire afficher la liste des carrés de tous les entiers compris entre 5 et 15. On notera que la puissance s'obtient, en python, par deux étoiles (**) :
  >>> 2**5
32
  • Demander à l'utilisateur de saisir un mot, et afficher uniquement ses voyelles. Le programme pourrait être ainsi (à traduire en Python) :
  Pour chaque lettre du mot :
       si la lettre est une voyelle :
           je l'affiche
  • Afficher les 30 premières puissances de 2, et calculer leur somme.

L'instruction while

while par l'exemple

Un petit exemple d'utilisation du while (du tant que ..., faire ...) :

  >>> i=0
  >>> while i<4 :
  ...     print i
  ...     i+=1
  ...

Par exemple, si l'on souhaite obtenir le $n$ tel que $1+2+3+..+n$ dépasse pour la première fois 1000, on peut procéder ainsi :

  >>> S = 0
  >>> n = 1
  >>> while S < 1000 :
  ...     S = S + n
  ...     n = n + 1
  ...
  >>> print n
  46

A noter, une fois encore, que l'on peut utiliser une instruction break pour quitter une boucle while :

  >>> i=0
  >>> while 1 :
  ...     i+=1
  ...     if i>5 :
  ...         break
  ...

Travaux pratiques

  1. Déterminer le nombre entier positif $n$ tel que $2+4+6+8+...+2*n$ dépasse 1000 pour la première fois.
  2. Faire de même avec les entiers impairs, et les puissances de 2.
  3. La suite harmonique $(H_n)$ est définie par :

$\forall\,n\geq 1,\quad H_n=1+\frac{1}{2}+\frac{1}{3}+\cdots+\frac{1}{n} $ On admet que cette suite est divergente. Trouver le plus petit entier naturel $k$ tel que $H_k>10$.

Manipulation de nombres

Les méthodes

Division, modulo (d'entiers)

Soient $x$ et $y$ deux entiers.

$x/y$
Division entière de $x$ par $y$, c'est-à-dire quotient de cette division.
  >>> 7/3
  2
En effet, le quotient de la division de 7 par 3 est 2. Pour obtenir une division réelle, il faut que l'un des termes le soit ; pour se faire, on peut rajouter un point à l'un des entiers, ou utiliser la méthode float :
  >>> 7./3
  2.3333333333333335
  >>> float(7)/3
  2.3333333333333335
$x%y$
"$x$ modulo $y$", qui est le reste de la division entière de $x$ par $y$ :
  >>> 7%3
  1
puisque le reste de la division de 7 par 3 est égal à 1 ($7 = 3 \times 2 + 1$). En mathématiques, on aurait plus tendance à noter cela : $7 \equiv 1 [3]$.
divmod(nombre1,nombre2)
Renvoie le couple division entière suivie de modulo.
  >>> divmod(7,3)
(2, 1)
  >>> x=divmod(7,3)
  >>> x[0]
  2
  >>> x[1] 
  1

Puissances

x**y
Renvoie $x^y$.
pow(x,y)
Calcule efficacement $x^y$ .
pow(x,y,z)
Calcule efficacement $x^y%z$.

L'intérêt de cette dernière méthode se retrouve dans le cryptage RSA, par exemple.

Comparaisons

cmp(nombre1,nombre2)
Renvoie -1, 0 ou 1, selon que le premier nombre est strictement inférieur, égal ou strictement supérieur au second.
max(sequence)
Renvoie le maximum de la séquence passée en argument.
  >>> max([1,3,5,2])
5
min(sequence)
Renvoie le minimum de la séquence passée en argument.

Changement de base

int(nombre,base)
Par exemple
  >>> int('110',2)
6
puisque 110 en base 2 donne 6 en base 10.
hex(nombre)
Renvoie la forme hexadécimale (sous la forme d'une chaîne de caractères) du nombre passé en argument.
oct(nombre)
Renvoie la forme octale (sous la forme d'une chaîne de caractères) du nombre passé en argument.

Conversion de type

int(nombre)
Tronque la partie décimale de nombre (ça n'est pas exactement notre partie entière).
  >>> int(3.14)
3
long(objet)
Transforme un entier en "entier long". Noter que la conversion est automatique en cas de besoin :
  >>> for k in range(15):
... print 13**k,type(13**k)
  ... 
  1 <type 'int'>
  13 <type 'int'>
  169 <type 'int'>
  2197 <type 'int'>
  28561 <type 'int'>
  371293 <type 'int'>
  4826809 <type 'int'>
  62748517 <type 'int'>
  815730721 <type 'int'>
  10604499373 <type 'long'>
  137858491849 <type 'long'>
  1792160394037 <type 'long'>
  23298085122481 <type 'long'>
  302875106592253 <type 'long'>
  3937376385699289 <type 'long'>
Les entiers peuvent être aussi grand que l'on veut, et ne seront pas approchés : on est cependant limité par la taille de la mémoire. Dans la plupart des autres langages, il existe un entier maximal au-delà duquel le calcul se fait de manière approché (il faudrait installer une bibliothèque de grand nombres, si besoin est) : on appréciera cet avantage dans nos travaux pratiques d'arithmétique, de cryptographie, etc.
Dans la future version de python, ces deux types d'entiers n'en feront plus qu'un.
float(objet)
Transforme l'ojet (un caractère ou un entier) en float.
complex($nb_a$,$nb_b$)
Renvoie un objet de type complexe, égal à $nb_a+nb_b*1j$$1j$ est l'imaginaire pur.
  >>> complex(2,3)
(2+3j)
  >>> complex(2,3)+complex(4,-1)
  (6+2j)
  >>> complex(0,1)**2
  (-1+0j)
abs(nombre)
Renvoie la valeur absolue (ou le module, si on a affaire à un complexe) de nombre.

Evaluation d'une chaîne de caractères

eval(chaine)
Evalue l'expression mathématique (chaîne de caractères). Par exemple,
  >>> eval('2+3*(4-1)')
11

Travaux pratiques

  • Soit q le quotient de la division de 1234 par 56, et r son reste. Vérifier que 1234 = 56*q+r (en utilisant la division entière, et le modulo).
  • Calculer la somme des multiples de 7 jusqu'à 7777, et ce en utilisant le modulo, le if, ainsi qu'une boucle. (On peut procéder différemment, mais le but est de s'entraîner à utiliser le modulo.)
  • Demander à l'utilisateur de saisir une expression algébrique, comme 7*3+4, ou 2**3+4**2+1, et renvoyez le résultat.

Autres primitives Python

On termine cette courte présentation de Python en dressant la liste de quelques primitives bien utiles.

Constantes

Quelques constantes en python :

pi
La constante π.
True
Le booléen vrai.
False
Le booléen faux.
e
12e2 est égal à 1200.0, par exemple.

Opérateurs

Des opérateurs en python :

x == y
Teste l'égalité (booléenne) entre x et y.
x != y
Teste si x est différent de y.
x >= y
Teste si x est supérieur ou égal à y.
x or y
Le ou booléen.
x and y
Le et booléen.

Manipulation de caractères

chr(nombre)
Renvoie le caractère qui admet nombre pour code ascii.
cmp(caractère1,caractère2)
Renvoie -1, 0 ou 1, selon que le premier caractère est strictement avant, égal ou strictement après le second (dans la table ascii).
len(objet)
Renvoie la longueur de la chaîne de caractères, ou plus généralement de l'objet passé en argument.
ord(objet)
Renvoie le rang d'un caractère (dans la table ascii).
str(objet)
Convertit l'objet en chaîne de caractères.

Listes, séquences

map(fonction,sequence)
Applique la fonction à tous les éléments de la séquence.
  >>> map(abs,[-2,1.5,7,-3.7])
[2, 1.5, 7, 3.7000000000000002]
range(n)
Renvoie la liste des entiers de $0$ à $n-1$.
range(a,b)
Renvoie la liste des entiers de $a$ à $b-1$.
range(a,b,c)
Renvoie la liste des entiers de $a$ à $b-1$, avec un pas de $c$.
sum(liste)
Renvoie la somme des nombres présents dans la liste.

Divers

help(nom)
Comme son nom l'indique. Par exemple, pour avoir de l'aide sur la méthode abs :
  >>> help(abs)
abs(...)
    abs(number) -> number

    Return the absolute value of the argument.
isinstance(objet,type)
Par exemple,
  >>> isinstance('test', int)
renvoie False, puisque la chaîne de caractères 'test' n'est pas une instance de la classe int (c'est pas un entier).
type(objet)
Renvoie le type de l'objet.

Travaux pratiques

  • Réalisez un chiffrement par décalage : si l'utilisateur rentre azerty, chiffrez cela en bafsuz (on décale d'une lettre dans l'alphabet).
On fera attention qu'après z, c'est a.
  • On pourra déjà supposer que seuls les minuscules peuvent être saisies, pour ensuite admettre minuscule et majuscule, et enfin admettre tous les caractères.
  • Demandez, en plus, à l'utilisateur de préciser de combien de lettres il souhaite son décalage.

Quelques particularités de Python

Les affectations multiples

On peut, en Python, faire des affectations à plusieurs variables :

  • en « série »
  >>> x = y = 7
  • en « parallèle »
  >>> x, y = 7, 8

Page Actions

Recent Changes

Group & Page

Back Links