Les séquences (1) - string - La boucle for

Documents pareils
Initiation à la programmation en Python

Découverte de Python

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

TP 1. Prise en main du langage Python

STAGE IREM 0- Premiers pas en Python

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP


Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Une version javascript sera disponible directement dans le cours prochainement.

1 Introduction au codage

Utilisation d objets : String et ArrayList

Algorithme. Table des matières

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Recherche dans un tableau

Algorithmique et Programmation, IMA

Représentation d un entier en base b

Jeux de caracte res et encodage (par Michel Michaud 2014)

TP Codage numérique des caractères. Un ordinateur ne manipule que des 0 et des 1 : Comment alors code-t-il du texte?

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Codage d information. Codage d information : -Définition-

Logiciel de Base. I. Représentation des nombres

V- Manipulations de nombres en binaire

Bases de programmation. Cours 5. Structurer les données

Programmation C++ (débutant)/instructions for, while et do...while

Programmation en Java IUT GEII (MC-II1) 1

Introduction à MATLAB R

Algorithmique et programmation : les bases (VBA) Corrigé

Chapitre 2 Devine mon nombre!

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Le langage C. Séance n 4

Programme Compte bancaire (code)

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Le chiffre est le signe, le nombre est la valeur.

I. Introduction aux fonctions : les fonctions standards

Présentation du langage et premières fonctions

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

1 Recherche en table par balayage

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Cours d Informatique

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Cours Informatique Master STEP

Plan du cours. Historique du langage Nouveautés de Java 7

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

La mémoire. Un ordinateur. L'octet. Le bit

LES TYPES DE DONNÉES DU LANGAGE PASCAL

TD3: tableaux avancées, première classe et chaînes

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Informatique Générale

DM 1 : Montre Autoquartz ETA

MATLAB : COMMANDES DE BASE. Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */.

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Introduction à l algorithmique et à la programmation (Info 2)

INF 321 : mémento de la syntaxe de Java

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

TP3 : Manipulation et implantation de systèmes de fichiers 1

Déroulement. Evaluation. Préambule. Définition. Définition. Algorithmes et structures de données 28/09/2009

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Conventions d écriture et outils de mise au point

Initiation à l algorithmique

ASR1 TD7 : Un microprocesseur RISC 16 bits

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

Langage Java. Classe de première SI

Programmer en JAVA. par Tama

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

ALGORITHMIQUE ET PROGRAMMATION En C

Instructions et spécifications pour la transmission en format XML de déclarations par lots. 30 mai 2015 MODULE 1

TP, première séquence d exercices.

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

2 Comment fonctionne un ordinateur, dans les grandes lignes

Examen Médian - 1 heure 30

TP 2 : Chiffrement par blocs

Annexe : La Programmation Informatique

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

4. Groupement d objets

UE Programmation Impérative Licence 2ème Année

Les chaînes de caractères

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Base de l'informatique. Généralité et Architecture Le système d'exploitation Les logiciels Le réseau et l'extérieur (WEB)

Cours 1 : Qu est-ce que la programmation?

TP 1 : 1 Calculs en binaire, octal et hexadécimal

1. Création d'un état Création d'un état Instantané Colonnes Création d'un état Instantané Tableau... 4

Cours d algorithmique pour la classe de 2nde

TABLEAU CROISE DYNAMIQUE

DELIBERATION N CP

Tp 1 correction. Structures de données (IF2)

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

ACTIVITÉ DE PROGRAMMATION

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Introduction au langage C

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

Calcul Formel et Numérique, Partie I

Chap III : Les tableaux

Plateforme PAYZEN. Définition de Web-services

Cours Informatique 1. Monsieur SADOUNI Salheddine

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Transcription:

Programmation avec Python - Automne 016 Bruno Martin & Jean-Paul Roy L1-Sciences http://deptinfo.unice.fr/~roy Cours n 3 Epluchage d'un entier chiffre à chiffre RAPPEL : Tant qu'une certaine condition est vérifiée :... Les séquences (1) - string - La boucle for '#! &/?*%$!' Exemple : épluchons un entier arithmétiquement, chiffre à chiffre. Seul le chiffre des unités (le plus à droite) est accessible, ainsi que l'entier obtenu en supprimant le chiffre des unités : n = 3456 >>> n // 10 345 >>> n % 10 6 def eplucher(n) : while n > 0 : print(n,"\tj'enlève",n % 10) n = n // 10 3 4 5 6 // % >>> eplucher(3456) 3456 j'enlève 6 345 j'enlève 5 34 j'enlève 4 3 j'enlève 3 1 Les chaînes de caractères Un texte est une suite finie de caractères : lettres majuscules ou minuscules, chiffres, ponctuations, symboles mathématiques, etc. Dans les langages de programmation, un texte est une chaîne (de caractères). In the world of programming languages, a text is a string. = '1984 : Orwell!' '1984 : Orwell!' Ne confondez pas 1984 qui est un entier et '1984' qui est une chaîne. >>> type(1984) <class 'int'> >>> type('1984') <class 'str'> >> str(1984) '1984' >>> int('1984') 1984 'Notez les apostrophes!' int '1984' 1984 str Les apostrophes simples sont préférées, mais on peut aussi utiliser des guillemets : = "1984 : Orwell!" '1984 : Orwell!' Pour inclure une apostrophe dans une chaîne, attention! Deux méthodes : >>> 'Mais j'ai froid!' SyntaxError: invalid syntax - utiliser des guillemets pour délimiter la chaîne : >>> "Mais j'ai froid!" "Mais j'ai froid!" - utiliser le caractère d'échappement backslash \ >>> 'Mais j\'ai froid!' "Mais j'ai froid!" 3 4

Une chaîne est une suite de caractères Combien y a-t-il de caractères dans une chaîne? = '1984 : Orwell!' >>> len(texte) 15 Comment accéder au caractère numéro k (k = 0, 1,,...)? [0] '1' [3] '4' [len(texte)-1] '!' [-1] '!' [len(texte)] IndexError: string index out of range length... >>> s = 'Hello' >>> s[-1] 'o' >>> s[-5] 'H' Exemple : nombre d'apparitions du caractère c dans une chaîne s def nb_char(c,s) : ; i = 0 while i < len(s) : if s[i] == c : res = res + 1 i = i + 1 >>> nb_char('e','exceptionnellement') 5 5 Puis-je modifier le caractère numéro k d'une chaîne? NON : une chaîne est un objet constant, non mutable. On peut modifier la valeur de la variable texte avec une affectation, mais pas l'un de ses caractères individuellement. = 'Je dis ' + texte 'Je dis 1984 : Orwell!' [0] = 'K' # j'essaye de transformer J en K TypeError: 'str' object does not support item assignment L'opérateur + entre chaînes se nomme la concaténation. >>> 'Sa' + '-' + 'lut' 'Sa-lut' L'opérateur * permet de répéter une chaîne : >>> '17' + '89' '1789' >>> 3 * 'guili' # 'guili' + 'guili' + 'guili' 'guiliguiliguili' La boucle for sur un intervalle ou une chaîne Dans la fonction nb_char(...), la variable locale i parcourt l'intervalle 0..len(s)-1. Un intervalle se dit range en anglais. La boucle for est alors plus simple que la boucle while. def nb_char_for(c,s) : for i in range(len(s)) : if s[i] == c : res = res + 1 on ne se sert pas du rang i mieux! 6 Que remarque-t-on? Un caractère est identifié à une chaîne de longueur 1. Le caractère 'e' On teste l'égalité de deux caractères avec == >>> 'e' == 'E' False Si a,b,n sont entiers : range(a,b) signifie a..b-1 def nb_char(c,s) : for car in s : if car == c : res = res + 1 avec a < b range(n) dénote l'intervalle 0..n-1 avec n > 0 7 8

Lorsque l'instruction return est placée à l'intérieur de la boucle for, cela signifie : Je parcours a priori tout un intervalle, mais je me réserve la possibilité de m'échapper en cours de route! Exemple. Quelle est la position de la première apparition du caractère c dans la chaîne s? Ou bien -1 s'il n'est pas dans s... Extraction d'une tranche de sous-chaîne Python propose un moyen d'extraire une tranche (slice) d'une chaîne repérée par ses positions extrêmes : 'Salut le monde!' [:5] 'lut' [:8] 'Salut le' [:] 'lut le monde!' def position(c,s) : for i in range(len(s)) : if s[i] == c : return i return -1 def appartient(c,s) : return position(c,s) >= 0 >>> position('a','koala') >>> position('a','koala') -1 >>> appartient('a','koala') >>> appartient('a','koala') False Attention donc, s[i:j] signifie la tranche de la chaîne s située entre les indices i et j-1, donc dans [i,j[. Pour prendre seulement 1 caractère sur k, demander s[i:j:k]. 'abcdefghijklmnopqrstuvwxyz' [:6] + texte[6:] 'abcdefghijklmnopqrstuvwxyz' [3:15:3] 'dgjm' [::3] 'adgjmpsvy' [3::3] 'dgjmpsvy' 9 10 Beaucoup de primitives sur les chaînes... Un langage de programmation vaut aussi par l'étendue de ses fonctionnalités. Avant de programmer, cherchez dans la doc si la fonction convoitée n'est pas une primitive! EXEMPLE. La fonction appartient(c,s) précédente n'est autre que l'opérateur primitif in de Python : appartient(c,s) <==> c in s Le nombre de voyelles d'une chaîne s se programmerait (naïvement) :...mais certaines ont une drôle de tête! Nous commençons à pénétrer dans un continent qu'il faudra tôt ou tard aborder : celui des OBJETS. Nous garderons pour l'instant une idée naïve de ce qu'est un objet. Il suffit de savoir qu'on peut lui envoyer un message à l'aide d'une méthode. EXEMPLE. Je trouve dans la documentation la primitive find qui réalise ma fonction position(c,s). Mais ce n'est pas une fonction, c'est une méthode! Elle envoie un message à un objet de la classe str. def nb_voyelles(s) : for car in s : if car in 'aeiouy' : res = res + 1 fonction find(c,s) méthode s.find(c) = 'Salut le monde!'.find('l').find('mon') 9 >>> nb_voyelles('ajourné') naïf 11 s, donne-moi l'indice de c! 1

Autres exemples de méthodes dans la classe str des chaînes : >>> '13'.isdigit() # que des chiffres? >>> 'Monde'.isalpha() # que des lettres? >>> 'rayon+'.islower() # lettres minuscules? >>> 'RAYON+'.isupper() # lettres majuscules? >>> 'RAYON+'.lower() # mettre en minuscules 'rayon+' >>> 'rayon+'.upper() # mettre en majuscules 'RAYON+' >>> ' www.unice.fr '.strip() # enlever les blancs aux bouts 'www.unice.fr' >>> 'www.unice.fr'.strip('wrf.') # enlever aux bouts 'unice' >>> 'Zip chic'.replace('i','o') # remplacement 'Zop choc' 13 Le codage ASCII Les caractères américains (dits internationaux) sont numérotés de 0 à 17, c'est le code ASCII (American Standard Code for Information Interchange). Par exemple le code ASCII de 'A' est égal à 65 mais on n'a pas besoin de le mémoriser : >>> ord('a') 65 >>> ord('a') 97 >>> ord(' ') 3 >>> ord('?') 63 >>> chr(65) 'A' >>> chr(63) '?' Les caractères dont le code ASCII tombe entre 0 et 31, ainsi que le caractère numéro 17 ne sont pas affichables. Ce sont les caractères de contrôle nommés symboliquement NUL, LF, BEL, CR, ESC, DEL... >>> chr(10) '\n' symbolique LF >>> chr(7) '\x1b' hexadécimal ESC 14 3 33! 34 " 35 # 36 $ 37 % 38 & 39 ' 40 ( 41 ) 4 * 43 + 44, 45-46. 47 / 48 0 49 1 50 51 3 5 4 53 5 54 6 55 7 56 8 57 9 58 : 59 ; 60 < 61 = 6 > 63? 64 @ 65 A 66 B 67 C 68 D 69 E 70 F 71 G 7 H 73 I 74 J 75 K 76 L 77 M 78 N 79 O 80 P 81 Q 8 R 83 S 84 T 85 U 86 V 87 W 88 X 89 Y 90 Z 91 [ 9 \ 93 ] 94 ^ 95 _ 96 ` 97 a 98 b 99 c 100 d 101 e 10 f 103 g 104 h 105 i 106 j 107 k 108 l 109 m 110 n 111 o 11 p 113 q 114 r 115 s 116 t 117 u 118 v 119 w 10 x 11 y 1 z 13 { 14 15 } 16 ~ L'affichage de la table ci-dessus est programmée en Python : def ascii() : for k in range(3,17) :... cf TP! 15 Le codage ASCII étendu Le code du caractère accentué 'é' est 33, il tombe entre 18 et 55. Il s'agit du code ASCII étendu, qui contient des caractères propres à chaque pays. Nous utilisons le codage Iso-Latin-1, qui couvre les langues de l'europe de l'ouest, avec le é, à, ç, ñ, Ö, ß, etc. Les russes utilisent KOI8-R, les chinois sont bien ennuyés, etc. 160 161 16 163 164 165 166 167 168 169 170 ª 171 «17 173 174 175 176 177 ± 178 ² 179 ³ 180 181 µ 18 183 184 185 ¹ 186 º 187» 188 ¼ 189 ½ 190 ¾ 191 19 À 193 Á 194 Â 195 Ã 196 Ä 197 Å 198 Æ 199 Ç 00 È 01 É 0 Ê 03 Ë 04 Ì 05 Í 06 Î 07 Ï 08 Ð 09 Ñ 10 Ò 11 Ó 1 Ô 13 Õ 14 Ö 15 16 Ø 17 Ù 18 Ú 19 Û 0 Ü 1 Ý Þ 3 ß 4 à 5 á 6 â 7 ã 8 ä 9 å 30 æ 31 ç 3 è 33 é 34 ê 35 ë 36 ì 37 í 38 î 39 ï 40 ð 41 ñ 4 ò 43 ó 44 ô 45 õ 46 ö 47 48 ø 49 ù 50 ú 51 û 5 ü 53 ý 54 þ Une partie standard de Iso-Latin-1 16

Le codage UNICODE Et les chinois furent contents! En effet, le consortium Unicode ( 1990, initié par Xerox et Apple) proposait d'abandonner la limitation des 55 caractères en traitant d'un seul coup toutes les langues du monde (plus de 65000 caractères!)... - Pourquoi ce nombre magique 55? - Parce que l'unité d'information sur un ordinateur est l'octet : un bloc de 8 bits (un bit = 0 ou 1). Sur les 8 bits, un bit était utilisé pour la vérification de la bonne transmission (le bit de parité), d'où un codage sur 7 bits, c'est l'ascii. Avec la fiabilité des transmissions, le 8ème bit fut finalement utilisé pour l'ascii étendu... 1 1 1 0 1 0 0 1 é Les caractères Unicode sont numérotés en hexadécimal (base 16). Par exemple, le symbole euro a pour numéro 0AC en hexa : >>> 0x0ac 8364 >>> hex(8364) '0x0ac' >>> '\u0ac' ' ' >>> chr(8364) ' ' >>> chr(0x0ac) ' ' >>> ord(' ') 8364 Sur www.unicode.org, on trouve les page charts donnant les numéros de toutes les langues du monde. Par exemple le chinois : >>> phrase = '\u611\u66f\u6cd5\u56fd\u4eba' >>> phrase ' ' Je suis Français. ou l'arabe (mais attention à l'écriture gauche droite)... for i in range(0x0661,0x066a) : print(chr(i),end=' ') ١ ٢ ٣ ٤ ٥ ٦ ٧ ٨ ٩ 17 18 Jules César et les messages secrets La cryptographie est la science des codes secrets. Une des premières formes de codage d'un message provient de Jules César durant la Guerre des Gaules. On ne code que les MAJUSCULES... Pour coder un message MSG : Choisir une clé de codage k dans [1,5]. Initialiser la chaîne résultat à la chaîne vide Pour chaque caractère c du message à coder : Si le caractère c est une lettre majuscule : coder le caractère c en le décalant de k positions à droite insérer le nouveau caractère dans la chaîne résultat sinon : insérer c dans la chaîne résultat Rendre en résultat la chaîne résultat k = 3 MSG = 'TOUS au ZOO!' 'WRXV au CRR!' cf TP3 19 Documenter une fonction Il y a une troisième manière de délimiter une chaîne : les guillemets triples! Il s'agit d'une docstring permettant de documenter une fonction. Elle peut tenir sur plusieurs lignes. def somch(n) : """Retourne la somme des chiffres de n en base 10""" while n > 0 : res = res + (n % 10) ; n = n // 10 Cette docstring a été enregistrée et associée au nom de la fonction : > help(somch) Help on function somch in module main : somch(n) Retourne la somme des chiffres de n en base 10 0

Une chaîne peut contenir du code Python! Dans certaines applications avancées de Python ou pour les maths, on place une expression Python dans une chaîne str et on provoque son évaluation avec la fonction eval. >>> x = 3 >>> eval('x+1') 4 >>> eval('x+1',{'x':10}) + x 14 def val0() : f = eval(input('entrez une fonction > ')) print('sa valeur en 0 est',f(0)) >>> val0() Entrez une fonction > lambda x : (x+1)/ Sa valeur en 0 est 0.5 L usage de cette fonction est réservée à des cas très rares. En effet si la chaîne contient du code Python malicieux, la sécurité vacille 1