Introduction et premières instructions (informatique) PDF
Document Details
Uploaded by AgileIndianArt
Université Paris-Dauphine
2024
PSL
Tags
Related
Summary
Ce document présente une introduction aux concepts fondamentaux de l'informatique, en se concentrant spécifiquement sur le langage de programmation Python. Il explique les types de données (numériques et textuelles) et les opérations de base.
Full Transcript
# Introduction et premières instructions ## L'informatique: Objectif, Langages et Données L'informatique vise à réaliser des traitements automatiques sur les données. Ce processus implique la conception de programmes écrits dans un langage de programmation spécifique. Écrire un programme revie...
# Introduction et premières instructions ## L'informatique: Objectif, Langages et Données L'informatique vise à réaliser des traitements automatiques sur les données. Ce processus implique la conception de programmes écrits dans un langage de programmation spécifique. Écrire un programme revient à expliquer à une machine ce qu'elle doit faire, et ce, dans un langage très précis. Il existe des centaines de langages de programmation, et dans ce cours, on se concentrera sur Python. Un programme informatique est une suite d'instructions pour manipuler des données. Ces données peuvent être variées: * Nombres * Textes * Son * Images En informatique, les données sont stockées en mémoire sous la forme **de valeurs**. Le type d'une valeur correspond à sa nature et aux opérations que l'on peut effectuer dessus. Par exemple, on peut soustraire un nombre à un autre, mais pas un texte à un texte. ## Les données numériques On distingue plusieurs types numériques : * `int`: Ensemble des nombres entiers * `float`: Ensemble des nombres décimaux Le type `float` désigne les nombres à virgule flottante, qui incluent une partie décimale après la virgule. Python accepte la notation scientifique : 6.7e-4 pour 0.00067 (6.7 * 10−4) ou 6.7e5 pour 670000.0 (6.7 * 105). Sur les valeurs de type `int` et `float`, on peut appliquer les opérateurs arithmétiques usuels (listés par priorité croissante) : * Négation (changement de signe) * + et - addition et soustraction * * et / multiplication et division * // et % division entière et reste de la division entière * ** puissance ### Division entière et reste Étant donné deux nombres entiers a et b, et en notant q le quotient de la division entière de a par b et r son reste, on peut écrire : `a = q *b+r` ### Remarques sur la division entière * Si on souhaite effectuer une division entière d'un nombre a par un nombre b, on écrira en python a//b pour obtenir le quotient et a%b pour obtenir le reste. * Sur un ordinateur, tout calcul effectué sur des nombres entiers est garanti exact. * En revanche, les calculs effectués sur des flottants peuvent être entachés d'erreurs. ### Exemple d'erreurs de calcul avec `float` 1.1 + 2.2 ne donne pas 3.3, mais un nombre très proche de 0.0 à savoir 4.440892098500626e-16. La différence peut sembler insignifiante, mais combinée à d'autres calculs, elle peut devenir très significative. ## Les données textuelles En informatique, une donnée textuelle s'appelle une chaîne de caractères (ou chaîne) : `str` (pour string) en Python. Une chaîne de caractères est une suite de caractères mis les uns après les autres, un caractère pouvant être une lettre (majuscule ou minuscule), un chiffre, un symbole de ponctuation, une espace, et bien d'autres choses encore. En Python, les chaînes de caractères sont écrites en les entourant soit d'apostrophes ' (appelées quotes) ou de guillemets " (appelés doubles quotes). Ce sont des délimiteurs de chaîne. **Important:** Vous noterez que la présence des délimiteurs permet de distinguer la valeur numérique 2 du caractère '2' (ou de manière équivalente "2"). Aucune limitation n'existe sur le nombre de caractères que contient une chaîne. Ce nombre est appelé la longueur de la chaîne. Une chaîne de caractères peut ne contenir aucun caractère. On parle alors de la chaîne vide. Littéralement, la chaîne vide s'écrit avec deux quotes ou deux doubles quotes : ". **Important:** Le choix des délimiteurs ('ou") est en général indifférent. Mais si une chaîne de caractères doit contenir l'un de ces deux symboles, il faut choisir l'autre comme délimiteur. ### Opération de concaténation Introduisons une première opération sur les chaînes de caractères : la concaténation. Cette opération consiste à construire une chaîne de caractères à partir de deux chaînes données en les mettant bout à bout. L'opération de concaténation est réalisée par l'opérateur +. Par exemple, la chaîne 'bonjour' peut s'obtenir avec l'opération de concaténation suivante : `'bon' + 'jour'` En Python, la fonction `type` donne le type de la valeur qu'on lui donne entre parenthèses. En voici un exemple : ```python >>> type(100) <class 'int'> >>> type(100.) <class 'float'> >>> type('100') <class 'str'> ``` **Remarque:** quand il y a une partie décimale, même nulle, alors le type est `float`. ## Instruction d'affectation Les valeurs sont enregistrées dans des zones de la mémoire de l'ordinateur. Chaque zone a une adresse, mais dans un programme informatique, on n'accède pas aux valeurs en donnant une adresse mais en référençant une adresse par une **variable**. Une variable possède un nom, appelé **identificateur**. ### Forme simple de l'affectation L'affectation est l'instruction qui permet de référencer une valeur par une variable. Sa syntaxe en Python est : `identificateur = valeur` **Par exemple :** `var = 4` À l'issue de cette instruction, une zone mémoire contenant la valeur 4 est créée (dans l'espace des valeurs), son type nombre entier, `int` en Python, est automatiquement reconnu. Puis, dans la liste des variables, la variable `var` est créée et un lien (une référence) entre `var` et 4 est établi. C'est alors par la variable `var` qu'on peut atteindre la zone mémoire contenant la valeur 4. L'évaluation d'une variable consiste à accéder à la valeur qu'elle référence : on dit qu'elle renvoie la valeur contenue dans la zone mémoire. ### Forme générale de l'affectation Une expression est une formule combinant des variables, des valeurs, des opérateurs... Quand une expression est évaluée, elle renvoie une valeur. **Par exemple :** `var * 2` est une expression. Son évaluation va renvoyer la valeur 8. L'évaluation d'une expression complexe (combinant différents opérateurs) se fait avec les priorités usuelles de l'arithmétique, **mais l'emploi des parenthèses est vivement conseillé.** **Type des expressions:** si dans une même expression, les opérandes sont de type `int` et `float`, la valeur renvoyée sera de type `float` car ce type est plus général. De façon générale, l'affectation en Python s'écrit comme suit : `identificateur = expression` L'affectation se déroule comme suit : l'expression est évaluée et la valeur renvoyée est référencée par la variable spécifiée à gauche du signe =. ### Exemple d'exécution d'instructions Par exemple, analysons en détail l'exécution des instructions Python ci-dessous : ```python X = 6 y = 2*x X = 7 ``` * À l'issue de la première instruction, une zone mémoire contenant la valeur 6 est créée (dans l'espace des valeurs), son type nombre entier, `int` en Python, est automatiquement déduit par l'interpréteur. Puis, dans la liste des variables, la variable `x` est créée et un lien (une référence) entre `x` et 6 est établi. C'est alors par la variable `x` qu'on peut atteindre la zone mémoire contenant la valeur 6. * Concernant la deuxième instruction, l'expression `2*x` est en premier lieu évaluée : on accède à la valeur de type `int` référencée par `x` (on dit aussi contenue dans `x`) et on multiplie cette valeur par 2, la valeur obtenue, à savoir 12, est alors créée dans l'espace des valeurs, elle est aussi de type `int` (en multipliant un `int` par un `int` on obtient un `int` !). Dans un deuxième temps, l'espace mémoire contenant 12 va être référencé par la variable `y` qui va donc être créée dans la liste des variables. ## Conversion explicite de type En Python, on peut aussi faire des conversions explicites de type: ```python X = 2.6 Y = int(x) Z = float (y) # z vaut 2.0 - 2.0 W = int('2') - 2 ``` * Après la première affectation, `x` référence la valeur 2.6 de type `float`. Le type `float` est inferé par Python car la valeur est composée de chiffres et contient un point. * Après la deuxième affectation, `y` référence la valeur 2 de type `int` : une troncature est réalisée et la partie fractionnaire est supprimée. * Après la troisième affectation, `z` référence la valeur de type `float` 2.0. * Après la quatrième affectation, `w` référence la valeur de type `int` 2. * L'expression `int(’2.0′)` n'est pas valide : il n'est pas possible de demander deux conversions successives (dont l'une est implicite): `str -> float -> int`. Il faut écrire : ```python t = float('2.0') t = int(t) ``` ## Instruction d'écriture L'opération d'écriture permet d'afficher une valeur à l'écran. Elle se fait avec la fonction Python `print()`. ```python print (expression) ``` Lorsqu'on exécute cette instruction d'écriture, `expression` est d'abord évaluée, la valeur renvoyée est ensuite affichée à l'écran. Si c'est une chaîne de caractères, c'est la chaîne qui est affichée (sans que ne soient affichés les délimiteurs de chaînes). Par exemple, ```python print('Hello') ``` La fonction `print()` peut afficher les valeurs de plusieurs expressions passées en argument. Dans ce cas, on sépare les différentes expressions à afficher par une virgule. Par exemple : ```python >>> var = 2 >>> print("2*var=", 2*var) 2*var = 4 ``` **Arguments optionnels de `print()`: `sep` et `end`** Par défaut, les affichages des différentes expressions passées en argument sont sur une même ligne séparés par une espace. L'affichage termine par un passage à la ligne (le caractère `\n`). Deux arguments optionnels du `print()` permettent de modifier ce comportement par défaut. * Le premier, `sep`, indique ce qui doit séparer les différentes valeurs affichées. On l'utilise en ajoutant `sep = valeur` à la liste des arguments (après les valeurs à afficher), où `valeur` est de type chaîne de caractères. * Par exemple : ```python >>> var = 2 >>> print(var, 2*var, 4*var, sep = ',') 2,4,8 >>> print(var, 2*var, 4*var, sep = "\n") 2 4 8 ``` * Le second argument optionnel est `end` qui indique la chaîne à ajouter à la fin de l'affichage (par défaut, il s'agit d'un \n, le retour à la ligne). On l'utilise en ajoutant `end = valeur` à la liste des arguments (après les valeurs à afficher), où `valeur` est de type chaîne de caractères. * Par exemple : ```python >>> print(var, 2*var, 4*var, end = "Fin") 2 4 8Fin ``` On peut bien évidemment affecter des valeurs aux deux arguments `sep` et `end` dans une même instruction d'écriture : ```python >>> print(var, 2*var, 4*var, sep = ',', end = "Fin") 2,4,8Fin ``` ## Instruction de lecture L'opération de lecture permet de lire une donnée provenant de l'extérieur. Pour le moment, cette donnée est saisie au clavier par un utilisateur. C'est la fonction Python `input()` qui permet de créer en mémoire une valeur constituée des caractères saisis au clavier par l'utilisateur. Il suffit alors de référencer cette valeur par une variable pour pouvoir l'utiliser dans un programme : ```python X = input() ``` À l'exécution, l'instruction `input()` provoque l'interruption de l'exécution du programme et attend que l'utilisatrice saisisse une valeur au clavier, en terminant par la touche 'entrée' du clavier. Cette valeur est alors enregistrée sous la forme d'une chaîne de caractères et, grâce à l'affectation, cette valeur de type `str` est référencée par la variable `x`. *Exemple :* si on exécute l'instruction `x = input()` et que l'utilisatrice saisit au clavier `2022`, la valeur référencée par `x` est la chaîne de caractères `'2022'`. Pour changer le type de la valeur lue par la fonction `input()`, on doit faire une conversion explicite de type. Dans l'exemple ci-dessous, on transforme la valeur lue de type `str` en une valeur de type `int`: ```python X = input() X = int(x) ``` ### Gestion des erreurs lors des saisies clavier Dans cet exemple, pour que l'exécution des instructions ne donne pas lieu à une erreur, il faut bien évidemment que l'utilisateur saisisse uniquement des chiffres au clavier. Aucune vérification n'est faite par l'instruction `input()`. Si l'utilisateur saisit autre chose que des chiffres (par exemple deux), on aura une erreur à l'exécution (un bug) de la deuxième instruction. ### Ajout de messages d'invite pour `input()` L'exécution de l'instruction `input()` permet d'interrompre l'exécution d'un programme pour permettre à une utilisatrice de faire une saisie clavier mais aucune indication n'est donnée à l'utilisatrice pour l'informer de ce qu'on attend d'elle. Pour l'informer, il faut ajouter une instruction d'écriture préalable (on parle de message d'invite ou prompt). Par exemple : ```python print("Entrez une valeur entiere : ") X = input() X = int(x) ``` A l'exécution, c'est alors clair pour l'utilisateur : le message `Entrez une valeur entiere : ` s'affiche. Puis le programme passe à la deuxième instruction et la fonction `input()` est exécutée. Elle interrompt l'exécution du programme pour laisser la main à l'utilisateur qui peut saisir une valeur. Cette valeur est créée par `input()` puis référencée par la variable `x`. La troisième instruction permet alors de convertir le type de cette valeur en `int`. ### Intégration du message d'invite dans `input()`: Il est possible de spécifier un message d'invite dans le `input()` directement (sans passer explicitement par la fonction `print()`). Une autre version du programme précédent est : ```python X = input("Entrez une valeur entiere : ") X = int(x) ``` La seule différence est ici que le message `"Entrez une valeur entiere : " ` ne sera pas suivi d'un passage à la ligne. L'autre différence est que vous ne pouvez donner qu'une valeur au `input()` alors que vous pouvez en spécifier plusieurs pour le `print()`. On peut écrire : ```python inf = 10 sup = 20 print("Valeur entiere comprise entre", inf, 'et', sup, ':') X = input() X = int(x) ``` ### Combinaison du message d'invite et de la conversion de type dans `input()`: Si on combine le message d'invite dans le `input()` et la conversion de type directement sur la valeur renvoyée par le `input()`, on peut passer de la version ci-dessous ```python print("Entrez une valeur entiere : ") X = input() X = int(x) ``` à cette unique instruction équivalente (on a ajouté un passage à la ligne après le message d'invite): ```python X = int(input("Entrez une valeur entiere : \n")) ```