Chapitre 6 - Wikimedia Commons
Transcription
Chapitre 6 - Wikimedia Commons
Les Chaînes Chapitre 6 Python for Informatics: Exploring Information www.pythonlearn.com Le type de données Chaînes • Une chaîne est une séquence de caractères • Une chaîne utilise les guillemets simples 'Hello' ou doubles “Hello” • Entre chaînes, + signifie “concaténer” • Une chaîne peut aussi contenir des nombres • Les nombres au format chaîne peuvent être convertis en nombre avec int() >>> str1 = "Hello” >>> str2 = 'there' >>> bob = str1 + str2 >>> print bob Hellothere >>> str3 = '123' >>> str3 = str3 + 1 Traceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: cannot concatenate 'str' and 'int' objects >>> x = int(str3) + 1 >>> print x 124 >>> Lecture et Conversion • Il est préférable de lire les données d’entrée avec strings pour ensuite convertir ces données avec le type voulu • Ceci nous donne plus de contôle dans les situations où il y a des erreurs et/ou sur les entrées erronnées de l’utilisateur • Pour obtenir un type numérique avec raw_input() il est nécessaire de convertir la chaîne >>> name = raw_input('Enter:') Enter:Chuck >>> print name Chuck >>> apple = raw_input('Enter:') Enter:100 >>> x = apple – 10 Traceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: unsupported operand type(s) for -: 'str' and 'int' >>> x = int(apple) – 10 >>> print x 90 Un coup d’oeil à l’intérieur des chaînes • On peut faire appel à un caractère contenu dans une chaîne en utilisant un index mis entre crochets • La valeur de l’index doit être un entier et le premier élément commence à zéro • La valeur de l’index peut être le résulat d’ une expression b a 0 1 >>> >>> >>> a >>> >>> >>> n n a n a 2 3 4 5 fruit = 'banana' letter = fruit[1] print letter n = 3 w = fruit[n - 1] print w Un caractère trop loin • Vous aurez une erreur python si vous essayez l’indexation audelà de la fin d’une chaîne. • Soyez donc prudents lors de la construction des valeurs d’index et des tranches >>> zot = 'abc' >>> print zot[5] Traceback (most recent call last): File "<stdin>", line 1, in <module>IndexError: string index out of range >>> Les chaînes ont une longueur • Il y a une fonction intégrée len qui nous renvoie la longueur de la chaîne b a 0 1 n a n a 2 3 4 5 >>> fruit = 'banana' >>> print len(fruit) 6 La fonction Len Une fonction est un type de code stocké pour notre usage. Une fonction prend une entrée et produit une sortie. >>> fruit = 'banana' >>> x = len(fruit) >>> print x 6 'banana' (une chaîne) fonction len() Guido a écrit ce code 6 (un nombre) La fonction Len Une fonction est un type de code stocké pour notre usage. Une fonction prend une entrée et produit une sortie. >>> fruit = 'banana' >>> x = len(fruit) >>> print x 6 'banana' (une chaîne) def len(inp): blah blah for x in y: blah blah 6 (un nombre) Boucler les chaînes • En utilisant la déclaration while et une variable d’ itération ,ainsi que la fonction len, on peut construire une boucle pour visualiser individuellement chaque lettre présente dans la chaîne fruit = 'banana' index = 0 while index < len(fruit): letter = fruit[index] print index, letter index = index + 1 0b 1a 2n 3a 4n 5a Boucler les chaînes • Une boucle définie avec la déclaration for est beaucoup plus élégante • la variable d’itération est complètement prise en charge par la boucle for fruit = 'banana' for letter in fruit: print letter b a n a n a Boucler les chaînes • Une boucle définie avec la déclaration for est beaucoup plus élégante • la variable d’itération est complètement prise en charge par la boucle for fruit = 'banana' for letter in fruit : print letter index = 0 while index < len(fruit) : letter = fruit[index] print letter index = index + 1 b a n a n a Boucles et comptages • Voici une boucle simple qui lit une lettre après l’autre de la chaîne et qui compte le nombre de fois où la boucle rencontre la lettre 'a' word = 'banana' count = 0 for letter in word : if letter == 'a' : count = count + 1 print count Regardons plus en détail in • La variable d’itération “parcourt” la séquence (ensemble ordonné) • Le bloc (corps) du code est exécuté une fois pour chaque valeur in de la séquence • la variable d’itération se déplace à travers toutes les valeurs in de la séquence Variable d’itération Chaîne de six caractères for letter in 'banana' : print letter Oui Fait? Non Lettre suivante b a n a n a print letter for letter in 'banana' : print letter La variable d’itération “parcourt” la chaîne. Le bloc du code est exécuté une fois pour chaque valeur in de la séquence M o n t y P y t h o n 0 1 2 3 4 5 6 7 8 9 10 11 • On peut aussi prendre en considération n’importe quelle section continue d’une chaîne à l’aide des deux points • La valeur du second nombre est au-delà de la fin de la tranche - “jusqu’à mais non inclu” • Si le second nombre est audelà de la fin de la chaîne, il s’ arrête à la fin >>> s = 'Monty Python' >>> print s[0:4] Mont >>> print s[6:7] P >>> print s[6:20] Python Tranchage de Chaînes M o n t y P y t h o n 0 1 2 3 4 5 6 7 8 9 10 11 • Si on omet le premier nombre ou le dernier de la tranche, ils deviennent respectivement le début ou la fin de la chaîne >>> s = 'Monty Python' >>> print s[:2] Mo >>> print s[8:] Thon >>> print s[:] Monty Python Tranchage de Chaînes Concaténation de chaîne • Quand l’opérateur + est utilisé avec les chaînes, il signifie "concaténation" >>> a = 'Hello' >>> b = a + 'There' >>> print b HelloThere >>> c = a + ' ' + 'There' >>> print c Hello There >>> Utiliser in comme opérateur • Le mot-clé in peut aussi être utilisé pour vérifier si une chaîne est contenue dans une autre chaîne • L’expression in est une expression logique qui retourne True ou False et peut être utilisée dans une condition if >>> fruit = 'banana’ >>> 'n' in fruit True >>> 'm' in fruit False >>> 'nan' in fruit True >>> if 'a' in fruit : ... print 'Found it!’ ... Found it! >>> Comparison de chaînes if word == 'camarade': print 'D’accord, camarades.' if word < print elif word print else: print 'camarade': 'Ton mot,' + word + ', vient avant camarade.’ > 'camarade': 'Ton mot,' + word + ', vient après camarade.’ 'D’accord, camarades.' Bibliothèque chaîne • Python dispose d’un nombre de fonctions chaînes, lesquelles sont dans la bibliothèque chaîne (string) • Ces fonctions sont déjà intégrées dans chaque chaîne - l’appel à celles-ci se fait en ajoutant la fonction à la variable chaîne • Ces fonctions ne modifient pas la chaîne d’origine, au lieu de cela elles renvoient une nouvelle chaîne qui a été transformée >>> greet = 'Hello Bob' >>> zap = greet.lower() >>> print zap hello bob >>> print greet Hello Bob> >> print 'Hi There'.lower() hi there >>> >>> stuff = 'Hello world’ >>> type(stuff)<type 'str'> >>> dir(stuff) ['capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill'] http://docs.python.org/lib/string-methods.html http://docs.python.org/lib/string-methods.html Bibliothèque chaîne str.capitalize() str.center(width[, fillchar]) str.endswith(suffix[, start[, end]]) str.find(sub[, start[, end]]) str.lstrip([chars]) str.replace(old, new[, count]) str.lower() str.rstrip([chars]) str.strip([chars]) str.upper() http://docs.python.org/lib/string-methods.html Recherche d’une chaîne • On utilise la fonction find() pour rechercher une sous-chaîne à l’ intérieur d’une chaîne • find() trouve la première occurrence de la sous-chaîne • Si la sous-chaîne n’est pas trouvée, find() retourne -1 • Rappelez-vous que la position de la chaîne débute à zéro b a 0 1 n a n a 2 3 4 5 >>> fruit = 'banana' >>> pos = fruit.find ('na') >>> print pos 2 >>> aa = fruit.find('z') >>> print aa -1 Changer tout en MAJUSCULE • On peut faire la copie d’une chaîne en minuscule ou majuscule • Souvent quand on recherche une chaîne avec find() - on converti d’ abord la chaîne en minuscule afin de rechercher une chaîne indépendamment de la casse >>> greet >>> nnn = >>> print HELLO BOB >>> www = >>> print hello bob >>> = 'Hello Bob' greet.upper() nnn greet.lower() www Recherche et Substitution • La fonction replace() agit comme l’opération “rechercher et remplacer” dans un traitement de texte • Elle remplace toutes les occurrences de l’ancienne chaîne par la nouvelle chaîne >>> greet = 'Hello Bob' >>> nstr = greet.replace ('Bob','Jane') >>> print nstr Hello Jane >>> nstr = greet.replace('o','X') >>> print nstrHellX BXb >>> Suppression des espaces • Parfois nous voulons supprimer les espaces au début et/ou à la fin d’une chaîne • lstrip() et rstrip() supprime respectivement les espaces à gauche ou à droite de la chaîne • strip() supprime à la fois les espaces au début et à la fin de la chaîne >>> greet = ' Hello Bob >>> greet.lstrip() 'Hello Bob ' >>> greet.rstrip() ' Hello Bob' >>> greet.strip() 'Hello Bob' >>> ' Préfixes >>> line = 'Nous vous souhaitons une bonne journée’ >>> line.startswith('Nous') True >>> line.startswith('n') False 21 31 From [email protected] Sat Jan 5 09:14:16 2008 >>> data = 'From [email protected] Sat Jan 14:16 2008’ >>> atpos = data.find('@') >>> print atpos 21 >>> sppos = data.find(' ',atpos) >>> print sppos 31 >>> host = data[atpos+1 : sppos] >>> print host uct.ac.za 5 09: analyse et extraction Résumé • Le type chaîne • Lecture/Conversion • Indexation de chaînes [] • Tranchage de chaînes [2:4] • Boucles for and while pour lire une chaîne • Concaténation de chaînes avec + • Opérations de chaîne Acknowledgements / Contributions These slides are Copyright 2010- Charles R. Severance (www. dr-chuck.com) of the University of Michigan School of Information and open.umich.edu and made available under a Creative Commons Attribution 4.0 License. Please maintain this last slide in all copies of the document to comply with the attribution requirements of the license. If you make a change, feel free to add your name and organization to the list of contributors on this page as you republish the materials. Initial Development: Charles Severance, University of Michigan School of Information Translation: Frederic Foiry ...