|
Page 8 sur 13
Synthèse sur les variables
Rappel : Pour connaitre le type d'une variable var, on utilise l'instruction type :
INT et LONG Le type INT représente les nombres entiers de -2147483648 à +2147483648 ( 32 bits ). Si cet intervalle est trop limité pour les calculs prévus, on peut plutôt utiliser le type LONG, pour les nombres entiers sans limitation, enfin disons la limitation de mémoire de l'ordinateur.
FLOAT Il s'agit des nombres réels, enregistrés sur 64 bits, donc pour les réels de -10^308 à 10^308, avec 12 chiffres significatifs. On fait la différence avec un entier par le point, qui correspond chez nous à la virgule :
3.14 10. .0000001 15e100 15e-100
Entre deux variables de type FLOAT ou INT, on peut effectuer les quatre opérations élémentaires.
STRING Le type STRING correspond aux chaines de caractères. Les caractères doivent être écrits entre des guillemets ( doubles ou simples ) :
phrase='test' phrase="test" phrase="c\'est un test\n"
Dans le dernier exemple, on utilise un caractère d'échappement pour afficher l'apostrophe, et \n pour passer à la ligne. Chaque caractère est indexé : par exemple dans la variable phrase=“test”, phrase[0] est un 't', phrase[2] est un 's' et phrase[0:2] est 'tes'. Attention, on commence par 0 ! Pour connaitre la longueur d'une chaine de caractère :
Les opérations possibles :
- concaténation : c'est-à-dire mettre deux chaines de caractères bout à bout, à l'aide du signe +
- répétition : répéter une chaine de caractères en la "multipliant" par un entier, à l'aide du signe *
Exercices :
Comme on cherche à travailler sur des variables de type STRING, des chaines de caractères, bien prendre garde à utiliser raw_input().
- Ecrire un programme qui, pour une chaine de caractères, insert un espace entre chaque caractère.
- Ecrire un programme qui supprime les voyelles d'un texte que donne l'utilisateur.
- Ecriture l337 : écrire un programme qui dans un texte remplace les lettres a par 4, e par 3, g par 6, b par 8, l par 1, o par 0, et t par 7.
LES LISTES Comme son nom l'indique, une liste est une liste d'objets ou de variables, séparés par une virgule. Par exemple :
liste=[2,5.,"1324","test"]
Dans la liste ci-dessus, nous avons alternativement un entier, un réel et deux chaines de caractères. Tout comme pour les chaines de caractères, chaque élément d'une liste est indexé, le premier terme étant indexé par 0 :
Par contre, lorsque l'on donne un intervalle d'indices, le résultat n'est plus une variable, mais une sous-liste :
Pour effacer l'élément à la place n d'une liste ( cela va effacer la première occurence trouvée ):
ou si on connait l'élément à effacer :
Pour ajouter l'élément “juin” à la fin d'une liste :
Pour ajouter l'élément “juin” à la 4e place ( astuce ) :
Pour remplacer les 2 derniers éléments de la liste par l'élément “hiver” :
( il faut bien attention ci-dessus qu'on parle d'une liste et pas seulement d'un seul élément ! ) Opérations sur les listes : Python accepte également les opérations sur les listes :
- Addition : liste1 + liste2, concaténation de deux listes, l'une à la suite de l'autre.
- Multiplication : liste * 5, création d'une nouvelle liste contenant 5 fois la répétition des éléments de la liste.
Exercices :
- Pour une liste de nombres ( entiers ou réels ), trouver le plus grand élément.
- Classer les éléments d'une liste de nombres ( puis de caractères ).
- Pour une liste de nombres ( ou une liste de caractères ), vérifier si il y a des doublons, et les supprimer.
- Ecrire un programme qui intercale deux listes en une seule liste.
- On se donne une liste de caractères. Créer une liste contenant le nombre de caractères de chaque élément de la première liste.
- L'utilisateur entre une phrase. Créer un programme qui trouve le plus grand mot de la phrase. Il faudra pour cela utiliser l'instruction :
qui convertit une chaine de caractères en une liste de mots. Par défaut, le séparateur est une espace, mais si on entre :
, dans ce cas le séparateur est une virgule.
- Créer une liste d'entiers de 1 à 1000 et supprimer dans cette liste tous les entiers qui sont les multiples d'un autre entier ( sauf 1… ). Cette méthode permet de ne garder que les nombres premiers, c'est le crible d'Eratosthène.
- Quitte à utiliser le programme de la question 6, écrire un programme permettant de décomposer un nombre entier en facteurs premiers.
LES BOOLEENS
Ces variables sont un peu particulières, et pourtant nous les avons déjà si souvent utilisées ! ( intrinsèquement ).
Ce sont des variables qui ne peuvent prendre que deux états, typiquement True ou False.
Pour les instructions conditionnelles de type if, ou les boucle while, le déclencheur était toujours un booléen de type True ( les commandes de ces structures sont amorcées si la condition est Vraie ).
Nous pouvons vérifier cela rapidement à l'aide de la console python et de code élémentaire :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
>>> a = 3<5 >>> print a True >>> if a: print "BRAVO !" BRAVO ! >>> b = 3>5 >>> print b False >>> if b: print "BRAVO AUSSI !" >>>
|
Dans l'exemple ci-dessus, je définis les variables a et b par des affirmations, qui sont vraies ou fausses. Ce sont donc des variables de type booléen, et on voit leur influence sur des structures conditionnelles.
On peut convertir des nombres, des chaines de caractères et des listes en booléens, via la fonction bool() :
1 2 3 4 5 6 7 8 9 10 11 12
|
>>> bool(0) False >>> bool(17.2) True >>> bool('') False >>> bool('a') True >>> bool([]) False >>> bool([1,2,3]) True
|
En gros, il faut retenir que tout ce qui n'est pas "vide" est "vrai".
Test d'appartenance
Une manière classique de générer des booléens se fait à l'aide du mot-clé in, pour tester l'appartenance d'une chaine de caractères dans une autre, ou d'une liste dans une autre. On a déjà rencontré ce mot clé dans les boucles de type for.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
>>> if 'e' in 'merci': ... print "OUI !" ... OUI ! >>> if 'erc' in 'merci': ... print "OUI !" ... OUI ! >>> if 'a' in 'merci': ... print "OUI !" ... >>> if 'abc' in [1, 5.2, 'efg', 'abc', -78.6 ]: ... print "OUI !" ... OUI ! >>> if 'cba' in [1, 5.2, 'efg', 'abc', -78.6 ]: ... print "OUI !" ... >>> if 5.2 in [1, 5.2, 'efg', 'abc', -78.6 ]: ... print "OUI !" ... OUI !
|
Quelques opérations entre booléens :
Il existe également des opérations entre les booléens, mais on commence à entrer dans des éléments de logique qui ne sont pas toujours simples à appréhender :
La négation :
La conjonction ( on obtient True si et seulement si les deux éléments sont True, traduit communément par le "ET" ) :
>>> True and False False >>> True and True True
La disjonction ( on obtient True si l'un au moins des deux éléments est True, traduit communément par le "OU" ) :
>>> True or False True >>> False or False False >>> True or True True
Pour plus d'informations, voir l'article Wikipédia sur l'algèbre de Boole.
- Que fait le script suivant ? ( évidemment, ne pas tester avant d'avoir répondu... )
1 2
|
while liste: liste.remove(liste[0])
|
- Ecrire à l'aide d'une unique condition un programme qui affiche "Merci" si l'utilisateur entre un nombre soit positif, soit plus petit que -10000.
- Ecrire à l'aide d'une unique condition un programme qui affiche "Merci" si l'utilisateur entre un nombre impair qui est un multiple de 7.
- Ecrire à l'aide d'une unique condition un programme qui affiche "Merci" si l'utilisateur entre une chaine ayant au moins 10 caractères, ne comportant aucun 'e', ni aucun 'a'.
- Est-ce qu'une syntaxe du type "if 5 < x < 10" ( avec x une variable de type float quelconque ) est acceptée dans le langage python ? Si oui, comment décrire cette condition à l'aide de booléens ?
|