Introduction à Python

Selon les problèmatiques rencontrée, en programmation on est amené à représenter des données de différents types. Par exemple, certaines sont numériques (âge, dates, épargne,...) et d'autres textuelles (nom, prénom, roman, ...). On peut parfois aussi représenter des valeurs de vérité pour tester certains cas : un nom est-il déjà présent dans une liste ? Une valeur saisie dépasse-t'elle la valeur autorisée ?

Nous allons découvrir les types proposés par Python (comme dans la plupart des langages de programmation), et leurs fonctionnements.

Les valeurs d'un programme en Python sont toutes "typées". C'est à dire qu'elles appartiennent à une classe particulière. Les cinq types de base sont :
  • le type int qui désigne les entiers comme $-2,0,5,$etc.
  • le type float qui désigne les nombres flottantsEn mathématiques on parle de nombres décimaux comme $3.14 , -2.5 ,$ etc.
  • le type bool qui désigne les booléens, c'est à dire les valeurs de vérité True (vrai) et False (faux).
  • le type string qui désigne les chaînes de caractère comme "Bonjour", "Python est super !!!" ou "ドラゴンボール超".
  • le type list désigne les listes qui sont des objets pouvant en contenir d'autres comme [1,2,3], [-1, True, 'du texte'] ou [[1,0],[0,1]].
Attention, en informatique, un nombre à virgule s'écrit avec un point (comme chez les anglo-saxons). Pour connaître le type d'une certaine valeur, vous pouvez utiliser l'instruction : type(valeur) Dans la console, utiliser type() pour vérifier les types de quelques valeurs :
  • 2
  • -3.1
  • 2-3.1
  • "Je s'appelle Groot"
  • print("hello")
  • input("Quel est votre âge ?")
  • print() n'a aucune valeur, elle ne fait qu'afficher un texte. Pas de valeur, pas de type (ou plus exactement un type NoneType et une valeur None)
  • input() considère la réponse de l'utilisateur comme une chaîne de caractère.
Les types peuvent sembler peu utile, mais parfois, oublier que chaque valeur a un type précis peut être source d'erreur et de confusion. Les profs de math disent souvent qu'on n'additionne pas tomates et des courgettes. Un informaticien dira plutôt qu'on additionne pas des int et des string. Que se passe-t-il si on on additionne un int et un string ? Reprenez et modifiez le fichier premier_programme.py pour qu'il réalise les étapes suivantes :
  • saluer l'utilisateur et lui demander son nom.
  • lui demander son âge.
  • afficher un message textuel d'adressant à l'utilisateur par son nom et lui annonçant dans combien d'années il sera centenaire.

Indice 1

Affecter l'age à renvoyé par l'utilisateur à une variable age.

Indice 2

En cas de message d'erreur, demandez vous quel est le type de la variable age.

Indice 3

Pensez à convertir la variable age en entier pour pouvoir faire une soustraction (avec la fonction int()).
Les principales opérations et fonctions concernant valeurs de type int et float sont compatibles :
  • Les opérations arithmétique : addition +, soustraction -, multiplication *, division / et puissance **.
  • La division entière // et le reste par la division %
  • La fonction int() peut transformer un nombre flottant en entier.
  • La fonction float() peut transformer un nombre entier en flottant.
Que se passe-t'il si j'ajoute un entier et un flottant ? Une division entière entre deux flottant ? Les types qu'accèptent ces opérations sont similaires aux notions d'ensembles de définition en mathématique. Dans l'analogie avec les ensembles, le type int peut être vu comme un "sous-ensemble" du type "float"... Il est possible de comparer des entiers et des flottants à l'aide des opérations de comparaison :
  • inférieur strict < , supérieur strict >, inférieur ou égal <=, supérieur ou égal >=
  • égal ==, différent !=
  • Comparer quelques valeurs. Comment Python répond-il à ces comparaisons ?
  • Un nombre flottant et un nombre entier peuvent-ils être considérés comme égaux ?
  • Les opérateurs de comparaison peuvent-être vues commes fonctions à deux argument numériques à valeurs dans l'ensemble Bool = {True, False}
  • Même si d'un point de vue formel 1 et 1.0 ne sont pas égaux (s'ils l'étaient la fonction type() donnerait le même résultat pour les deux), d'un point de vue pratique, cette largesse permet d'éviter certains écueils. Un programmeur qui souhaite créer un programme s'arrêtant lorsqu'une certaine valeur est nulle ne devrait pas à avoir à se demander si il s'agit d'un entier ou d'un flottant.
Il est possible en Python de calculer des racines carré : Dans la console, taper sqrt(2). Normalement, une erreur est lancée car la fonction sqrt() n'existe pas par défaut. Cette fonction est disponible dans la bibliothèque math. Pour l'importer, taper dans la console :
from math import sqrt

Essayez à nouveau de taper sqrt(2).
Vérifier si $\sqrt{2}^2$ vaut bien 2. Que remarque-t'on ?
Pour calculer $\sqrt{2}^2$, taper sqrt(2)**2. On remarque que le résultat n'est aps exactement égal à 2. Le calcul avec des nombres flottants en Python comporte des erreurs d'arrondi.
Les valeurs de vérité True et False peuvent être combinées via les opérateurs logiques :
  • Et : and.
  • Ou : or.
  • Ou exclusif : ^ .
  • Vérifiez les opérations booléennes classiques dans la console (vrai ET vrai = vrai, faux OU vrai = vrai,...)
  • Les opérations arithmétiques propres aux nombres fonctionnent-elles ? L'opération or et l'opération + sont-elles équivalentes ? Même question pour and et *
En fait, les booléens peuvent être vus comme une restriction des entiers 0 et 1. Cette largesse est encore une fois très pratique. Les opérations booléennes sont également compatibles avec les entiers et les flottants. Les opérations de comparaisons sont également compatibles avec les booléens : Tapez les commandes suivantes :
  • 1==True
  • (2 < 1)==False
  • (True==False)==False
Les chaînes de caractères sont assez différentes des types numériques précédents. Les manipulations utiles en pratique sur les chaînes sont les suivantes :
  • Une valeur d'un des types précédent peut être transformé en chaîne de caractères : str(valeur).
  • mesurer la longueur : len(chaine).
  • concaténer deux chaînes : chaine1 + chaine2.
  • accéder au i-ème élément : chaine[i].
  • extraire la sous-chaîne du i-ème au j-ème caractère (exclu) : chaine[i:j].
La chaîne de caractères vide est "" ou ''. Taper dans la console : c="Bonjour" puis a=30
  • Que taper pour obtenir le premier caractère de c ?
  • Que taper pour obtenir le dernier caractère de c (même si on change la valeur de c) ?
  • Que taper pour extraire la sous-chaîne commençant au 3ème caractère jusqu'à la fin ?
  • Essayer de concaténer c et a. Quelle solution proposer ?

Indice 1

L'indice du premier caractère est 0, et pas 1.

Indice 2

L'indice du dernier caractère de c n'est pas len(c)

Indice 3

Il est possible d'utiliser len(c), mais on peut aussi taper c[3:]

Indice 4

L'opération + ne fait pas la même chose pour les int et les string.

Indice 4'

Il faut convertir l'entier a en chaîne de caractères avec la fonction str(a).
Il est possible de comparer des chaînes de caractères entre elles avec les opérations de comparaison < , >, <=, >=, ==, !=.
  • Comparez les chaînes de caractères Barry et Alvin avec <
  • Comparez les chaînes de caractères Dupont et Dupond.
  • Quel semble-être le critère de comparaison ?
Il s'agit simplement de l'ordre alphabétique. Les majuscules sont inférieures aux minuscules car les codes ascii sont comparés. Si la valeur de c est la chaîne "Bonjour", taper une seule commande permettant d'affecter à a le début de la chaîne jusqu'au 3ème caractère et dans b la fin de la chaîne. Python peut-être très concis : a,b=c[:3],c[3:] On rapelle que la distance entre deux points $A(x_A;y_A)$ et $B(x_B,y_B)$ se calcule avec la formule suivante : $$ AB=\sqrt{(x_B - x_A)^2 + (y_B - y_A)^2} $$ Créer un nouveau fichier appelé geometrie.py. Nous souhaitons ajouter à ce fichier programme qui : demandera à l'utilisateur d'entrer quatre valeurs $xA$, $yA$, $xB$ et $yB$, les coordonnées de deux points $A$ et $B$. calculera la distance $AB$ informera l'utilisateur de la valeur de cette distance avec une phrase.

Indice 1

Utiliser input() trois fois et stocker chaque résultat dans des variables a, b et c.

Indice 2

Attention, les trois variables sont des chaînes de caractères. Il faut les convertir en nombres pour les utiliser dans un calcul.

Indice 3

Stocker la valeur de $\alpha$ et $\beta$ dans des variables alpha et beta
Les listes sont des objets très similaires aux chaînes de caractères car elles sont suite d'objets indicés par des entiers commençant à 0. Elles peuvent contenir n'importe quel type d'objets (pas que des caractères contrairement aux chaînes), y compris des listes. Les manipulations utiles en pratique sur les listes sont les suivantes :
  • compter le nombre d'éléments : len(chaine).
  • concaténer deux listes : L1 + L2.
  • accéder au i-ème élément : L[i].
  • extraire la sous-liste du i-ème au j-ème élément (exclu) : L[i:j].
La liste vide est [].
C'est tout pour l'instant, n'oubliez pas de bien sauvegarder votre travail... La suite de cette introduction à Python se trouve ci-dessous. Vous y découvrirai les fonctions qui seront désormais incontournables. Plus un seul script Python ne sera fait en dehors d'une fonction maintenant !
 - jeu

Les fonctions en Python, outil incontournable pour réutiliser et bien séparer son code.