Constructions élémentaires I

Objectifs

À la fin de cette séquence vous serez capable de :

  • Manipuler les objets de base Python
  • Enregistrer des données dans la mémoire d'un ordinateur
  • Utiliser une variable pour accéder et manipuler l'objet référencé
  • Obtenir des données d'un utilisateur

Un mini-projet

1. Quelques généralités sur le langage Python

Dans un programme informatique en langage Python, tout est un objet.

Un objet est un morceau de code contenant des données (une chaîne binaire) et un ensemble de comportements propres permettant de manipuler ces données. Ces comportements sont appelés méthodes.

Tout objet a un type (une nature). Le type d’un objet est le comportement par défaut défini pour cet objet. Autrement dit, le type permet de déterminer les méthodes associées à un objet.

Un objet a besoin d’être identifié pour être manipulé.

Une variable peut être considérée comme un nom attaché à un objet particulier. Elle permet d’identifier un objet donné. Il s'agit d'une référence désignant une adresse mémoire, c'est-à-dire une zone précise dans la mémoire de l’ordinateur. Cette opération d’identification est appelée affectation ou assignation ou référencement (identification).

Exemple :
moyenne = 13.5
On dit que l'on affecte (ou assigne) à la variable dont le nom est moyenne l'objet (la valeur) 13,5. On dit aussi que la variable moyenne référence l'objet 13,5 comme un nom permet d'identifier une personne.

  • Un nom de variable peut contenir lettres, chiffres, et tiret-bas ( _ underscore) ;
    Exemples : variable2, ma_variable, _
  • Un nom de variable ne peut commencer par un nombre.
    La variable 2variable n'est pas autorisé.

Il est conseillé par ailleurs de choisir des noms de variable assez courts, mais aussi explicites que possible, de manière à exprimer clairement ce que la variable est censée identifiée.
Par exemple, les noms de variable tels que moyenne, moy conviennent mieux que m ou x pour exprimer une moyenne.

Autre chose importante : Les noms de variables sont sensibles à la casse (les caractères majuscules et minuscules sont distingués).
Exemple :
Moyenne, moyenne, MOYENNE sont trois variables différentes !
De plus, éviter d’utiliser un nom réservé par Python tel print, return, max, assert…
Enfin, rester cohérent dans la façon de nommer ses variables.

Remarque :
Bien qu'il soit légal d'utiliser des lettres majuscules, par convention, on n'utilise que des minuscules pour les noms de variables et des majuscules pour les constantes.
Même si cela est autorisé, éviter l'utilisation de lettres accentuées dans les noms de variables.

Pour finir, Python est un langage dit à typage dynamique.
En d'autres termes, le type n’est pas lié à la variable mais à l’objet qui est référencé par cette variable. Dans ce sens, en Python, les variables n'ont pas besoin d'être déclarées ou définies à l'avance, comme c'est le cas dans de nombreux autres langages de programmation. Le type d'une variable peut changer au cours de sa durée de vie.

In [ ]:
x = 3

la variable x est de type int car x identifie l’entier 3 ;

In [ ]:
x = 7.2

x est du type float car x identifie plutôt un réel ;

In [ ]:
x = 'élève'

x est du type str car on lui affecte un objet chaîne de caractère.

2. Les Types Numériques

2.1. Présentation

En Python, il existe quatre types numériques :

  • les « int » (integer) qui représentent les nombres entiers relatifs ;
  • les « float » qui représentent les nombres à virgule ;
  • les « complex » qui représentent les nombres complexes ;
  • les « bool » qui représentent les booléens.

2.2. Manipuler les objets numériques

2.2.1. Python utilisé comme une calculatrice

In [ ]:
x = 2
y = 3
#L'addition et la soustraction
print(x + y)
print(10 - 3)
In [ ]:
#La multiplication
print(x * y)
In [ ]:
#La division
print(7 / 3)
In [ ]:
#La division entière
print(7 // 3)
In [ ]:
#Le reste de la division entière
print(7 % 3)
In [ ]:
#La puissance (exponentiation)
print(3 ** 2)
In [ ]:
#valeur absolue
abs(-5.7)
In [ ]:
543.15e20

Certaines fonctions (la racine carrée, sinus...) ne sont pas initialement intégrées dans le langage Python. Il est nécessaire de les rendre disponibles au préalable avant de pouvoir les utiliser.

In [ ]:
#Importer le module mathématique
import math
print(math.pi)
In [ ]:
#Arrondir avec deux chiffres après la virgule (arrondir au centième)
round(math.pi, 3)
In [ ]:
print(math.sqrt(2))
In [ ]:
#Autre façon d'importer la bibliothèque mathématique
from math import*
print(pi)

Notation abrégée :

In [ ]:
a = 2 
a += 1 # a = a + 1
print(a)
In [ ]:
b = 5
b -= 2 # b = b - 2
print(b)
In [ ]:
a *= 4 # a = a * 4
print(a)
In [ ]:
a /= 3 # a = a / 2
In [ ]:
a //= 5 # a = a // 5
print(a)
In [ ]:
a %= 2 # a = a % 2
In [ ]:
a **= 2 # a = a**2

2.2.2.La fonction type()

Elle permet de connaître la nature d'un objet

In [ ]:
type(5)
In [ ]:
type(5.)
In [ ]:
type(True)
In [ ]:
type("a")

3. Les Chaînes de caractères (string en anglais)

3.1. Définition et syntaxe

Une chaîne de caractères est un objet encadré par des guillemets ou des apostrophes.

In [ ]:
"d"
In [ ]:
'pizza'
In [ ]:
"connais-toi toi-même."
In [ ]:
"123"

Les chaînes de caractères, une fois créées, sont immuables c’est-à-dire non modifiables. Autrement dit, en lecture seule. Toute transformation donnera un nouvel objet chaîne de caractères.
Exemple :
La chaîne "papa" est différente de la chaîne "Papa" car le caractère p a été transformé en majuscule. Donc "papa" et "Papa" sont duex objets distincts.

In [ ]:
a = 'papa'
b = 'Papa'
In [ ]:
# vérification
a == b # a est-il équivalent à b ?
In [ ]:
#Vérification
a is b # a est-il identique à b ?
In [ ]:
id(a)
In [ ]:
id(b)

3.2. La fonction print() : afficher la valeur d’une variable

In [ ]:
print()
In [ ]:
#print() ajoute une ligne à la fin
print("Que nul n’entre ici s’il n’est géomètre.")
In [ ]:
print('orange', 'banane', 'pomme')
In [ ]:
print('orange', 'banane', 'pomme', sep=', ')
In [ ]:
print('orange', 'banane', 'pomme', sep=' | ')
In [ ]:
print('orange', 'banane', 'pomme', sep='\n') # avec saut à la ligne
In [ ]:
print('orange')
print('banane')
print('pomme')
In [ ]:
print('orange', 'banane', 'pomme', sep=' ')

Le séparateur par défaut est un espace.

In [ ]:
print('orange', end=' ') # On ajoute un espace à la fin
print('banane')
In [ ]:
print('orange', 'banane', 'pomme', end='.') # On ajoute un point à la fin
In [ ]:
print('*', 'orange', end='\n')
print('*', 'banane', end='\n')
print('*', 'pomme')
In [ ]:
print('*', 'orange', end='\n') 
print('\t*', 'banane', end='\n') # avec une tabulation
print('\t\t*', 'pomme')
In [ ]:
print("Nom", "Âge", "Ville", sep=" | ", end="\n" + "-"*20 + "\n")
print("Alice", 30, "Paris", sep=" | ")
print("Bob", 25, "Los Angeles", sep=" | ")

3.3. Accéder aux éléments d'une chaîne

In [ ]:
ma_chaine = 'abracadabra'

Une chaîne de caractères est un objet séquence.
Un objet séquence est un ensemble fini et ordonné d’éléments numérotés de 0 à n-1 si la chaîne comporte n caractères.
Ainsi, une chaîne de caractères peut être parcourue de manière séquentielle c'est-à-dire caractère par caractère. On dit qu’une chaîne de caractères est un objet itérable.
Exemple :
ma_chaine = 'abracadabra'

Compléter le tableau ci-dessous :

Instruction à saisir Résultat affiché
print(ma_chaine[0])
print(ma_chaine[5])
\(c\)
\(d\)
print(ma_chaine[-1])
print(ma_chaine[-3])

3.4. Manipuler les chaînes de caractères

Déterminer la longueur d’une chaine : la fonction len()

In [ ]:
len(ma_chaine)

Application :
Combien de caractères contient l'objet référencé par la variable ci-après ?

In [ ]:
une_chaine = "Je pense donc je suis"

Que renvoie l'instruction suivante : une_chaine[len(une_chaine) - 1] ?
Remarque :
Si la chaîne contient n caractères, l'indice du dernier caractère est n-1 et non n.
Avec l'indexage négatif, le dernier caractère est d'indice -1.

Opérations de slicing ou découpage en tranches (création de sous-chaînes) Pour aller plu loin !

In [ ]:
une_chaine = "Je pense donc je suis"
print(une_chaine[0:8])
In [ ]:
print(une_chaine[6:])
In [ ]:
print(une_chaine[:5])
In [ ]:
print(une_chaine[0:11:2])
In [ ]:
print(une_chaine[::3])
In [ ]:
print(une_chaine[-10:-7])
In [ ]:
print(une_chaine[::-1])

Concaténation de chaînes

In [ ]:
ma_chaine = 'abracadabra'
ma_deuxieme_chaine = 'ntesque'
resultat = ma_chaine + ma_deuxieme_chaine
print(resultat)

Répétition d'une chaîne

In [ ]:
mon_str = 'hi !'
print(5 * mon_str)
In [ ]:
print('-------+++-------'*4)

Tests d'appartenance ou de non appartenance à une chaîne

In [ ]:
une_chaine = "Le méchant est un ignorant"
"méchant" in une_chaine
In [ ]:
"rant" in une_chaine
In [ ]:
"ma" in une_chaine

Méthodes associées aux chaînes de caractères

lower() et upper() : renvoient respectivement une chaîne en minuscule et une chaîne en majuscule.

In [ ]:
une_chaine.upper()

count() : renvoie le nombre d'occurrence d'un caractère dans une chaîne.

In [ ]:
une_chaine.count('e')

La variable une_chaine contient 2 fois la lettre e.

startswith() : teste si une chaîne commence par une sous-chaîne donnée :

In [ ]:
une_chaine.startswith('L')
In [ ]:
une_chaine.startswith('l')
In [ ]:
une_chaine.startswith('méchant')

isalpha() : renvoie True si tous les caractères de la chaînes sont alphabétiques ; False sinon.
isalnum() : renvoie True si tous les caractères de la chaînes sont alphanumériques ; False sinon.

La fonction dir() permet d'afficher toutes les méthodes qui agissent sur un objet.

In [ ]:
dir(une_chaine)

Et la fonction help() permet d'afficher de l'aide sur une méthode donnée.
Syntaxe : help(type.méthode)

In [ ]:
help(str.startswith)

Application :
Que renvoie la méthode index() sur une chaîne de caractère ?
Appliquez-la avec le caractère i.

Technique de formatage : Les Instructions format et f-strings
Ces instructions qui sont équivalentes permettent d’insérer dans une chaîne des contenus variables.

In [ ]:
nom = 'Eyoum'
prenom = 'Francine'
ecole = 'Lycée Saint Pierre'
In [ ]:
print("Je m'appelle {} {} et fréquente le {}".format(prenom, nom, ecole))
In [ ]:
#f-string
print(f"Je m'appelle {prenom} {nom} et fréquente le {ecole}")
In [ ]:
print(f"{name}", f"{age}", sep=" : ", end=".\n")
In [ ]:
x = 30
y = 15
print(f"x = {x}, y = {y}")
In [ ]:
print(f"{x = }, {y = }")
In [ ]:
print(f"{x + y = }")
In [ ]:
import math
math.pi
In [ ]:
print(f"pi arrondi au centième s'écrit {math.pi:.2f}")
In [ ]:
#5 chiffres significatifs
print(f"{math.pi:.5g}")
In [ ]:
nombre = 3454353453
In [ ]:
#Ecriture scientifique
print(f"L'écriture scientifique de nombre est : {nombre:e}")
In [ ]:
#5 chiffres significatifs
print(f"{nombre:.3g}")
In [ ]:
#Ecriture comptable
print(f"nombre en format comptabilité : {nombre :_d}")
In [ ]:
taux = 0.31587
print(f"Le taux en pourcentage est {taux = :.2%}")

Conversion de type (transtypage) ou construction d'un objet à partir d'un autre type :
L'objet obtenu est différent de l'objet qui a permis de le créer.

In [ ]:
x = 3.1
type(x)
In [ ]:
y = int(x)
In [ ]:
type(y)
In [ ]:
print(y)
In [ ]:
y == x
In [ ]:
a = '123'
type(a)
In [ ]:
b = int(a)
In [ ]:
type(b)
In [ ]:
print(b)
In [ ]:
c = float(a)
In [ ]:
type(c)
In [ ]:
print(c)

4. Le type booléen

Il est utilisé pour représenter la valeur de vérité d'une expression. Il n'a que deux valeurs possibles : True et False.

In [ ]:
3 > 5
In [ ]:
#Egalité
"papa" == "Papa"
In [ ]:
3 <= 5

Les booléens sont considérés comme un sous-type de int en Python.

In [ ]:
True == 1
In [ ]:
False == 0
In [ ]:
True + False/ True
In [ ]:
#Différent (N'est pas égal)
1 + 2 != 3
In [ ]:
False == 0.0
In [ ]:
0.1 + 0.2 == 0.3

Opérateurs booléens : NOT, AND, OR

Ils permettent de construire des expressions logiques plus complexes.
x > 5 AND x < 21

In [ ]:
x = 10
5 < x < 21
In [ ]:
5 <= 1 or 7 > 3.2

5. Interaction avec l'utilisteur : La fonction input()

Elle permet de demander à l'utilisateur d'un programme d'entrer (de saisir) une valeur.

In [ ]:
nom = input()
In [ ]:
a = input()

Très souvent, cette instruction est accompagnée d'un message spécifiant à l'usager ce que l'on attend de lui.

In [ ]:
nom = input("Entrer votre prénom : ")
In [ ]:
a = input("Taper un nombre entier : ")

Remarque :
La fonction input() renvoie toujours une chaîne de caractères !
Si l'on souhaite que l'utilisateur entre une valeur numérique, on devra convertir la valeur entrée (qui sera donc de type string) en une valeur numérique du type qui est désiré, par l'intermédiaire des fonctions intégrées int() (si on attend un entier) ou float() (si on attend un nombre réel).

In [ ]:
type(a)
In [ ]:
a = int(input("Entrer un entier"))
In [ ]:
a

6. Les commentaires Python

Les commentaires sont créés en Python à l'aide du signe dièse ( # ) et doivent être de brèves déclarations ne dépassant pas quelques phrases.
Voici un exemple simple :

In [ ]:
# Addition de deux nombres
3 + 7
In [ ]:
 

Faites-vous plaisir

  1. Parmi ces variables, lesquelles sont incorrectes ?
    ma_variable, _, _nom, 51_moyenne, personne3, 82eleve, eleve_10, MOT.
  2. fruit = "pamplemousse"
    Que renvoie les expressions suivantes ?
    1. fruit[2]
    2. fruit[7]
    3. fruit[0]
    4. fruit[-1]
    5. fruit[-3]
    6. fruit[2:7]
    7. fruit[:7]
    8. fruit[2:]
    9. fruit[::-1]
    10. len(fruit)
  3. fruit = "pamplemousse"
    Écrire une expression qui renvoie
    1. l'index de l
    2. le nombre de m
  4. Écrire un programme qui permet à un élève (un utilisateur) d'entrer ses trois spécialités de première. Le programme affiche alors, en majuscules, le nom d'une nouvelle « matière » en joignant les noms des spécialités ensemble.
  5. Écrire un programme dans lequel l'utilisateur saisit le total d'une note de restaurant. Le programme affiche alors deux montants : un pourboire de 15 % et un pourboire de 20 %.
  6. Écrire un programme de vendeur de voitures où l'utilisateur entre le prix de base d'une voiture et affiche le prix réel de la voiture une fois tous les frais supplémentaires ajoutés :
    • la TVA : 20 % du prix de base
    • la licence du concessionnaire : 5 % du prix de base
    • la préparation du concessionnaire : 500 €.