Terminal/Bash/Interpreteur/Programme Terminal Programmation Impérative Boucle 'for' en Python la fenêtre que l'on lance au départ exécute bash en mode interactif Bash interactif demande de taper une ligne de commande découpe en morceaux avec l'espace comme séparateur le premier morceau est le programme lancé les autres morceaux sont les paramètres passé au programme affiche la sortie du programme lancé, et recommence Script Bash à partir d'un fichier lancé avec bash nomdefichier.bash p1 p2 p3 ... exécute les lignes du fichier une par une chaque ligne est découpée et exécutée possibilité d'accéder aux paramètres avec ${1} , ${2} , ${3} , ... Un script est donc un programme on peut le lancer sans se soucier de son contenu on peut lui passer des paramètres 5 / 38 − Rémi Emonet − Programmation Impérative Boucle 'for' en Python Bash/Python/Interpreteurs Bash Entrée Utilisateur : la Fonction input But : rendre un programme interactif 2 modes : interactif et à partir d'un fichier lancement d'autres programmes Comment : demander à l'utilisateur de taper du texte Fonction input(invite) Python affiche l'invite à l'utilisateur attend que l'utilisateur tape du texte et valide avec « entrée » renvoie la chaîne tapée par l'utilisateur 2 modes : interactif et à partir d'un fichier exécution d'affectation, d'appel de fonction ( print , ...), ... Python interactif lancé avec python3 (sans paramètres) comme bash , exécute au fur et à mesure ce que l'on tape Python à partir d'un fichier lancé avec python3 monfichier.py p1 p2 p3 ... exécute chaque ligne, une par une Exemple 1 nom = input("Entrez votre nom : ") 2 msg = input("Entrez un message : ") 3 print("Yo", nom, "! Tu as dit «", msg, "»") Le programme est interactif ! Faut-il utiliser la fonction input ? plus « fun » mais moins automatisable 6 / 38 − Rémi Emonet − Programmation Impérative Boucle 'for' en Python 17 / 38 − Rémi Emonet − Programmation Impérative Boucle 'for' en Python Lecture de Nombres : Conversions Paramètres d'un Programme input() renvoie une chaîne de caractères But : l'utilisateur donne des paramètres au programme 1 nb = input("Entrez un nombre : ") # 5 2 msg = input("Entrez un message : ") # Poum Tchak 3 print( nb * msg ) # erreur chaine*chaine >_ bash bash creer-tp.bash tp1 tp2 accès aux paramètres avec ${1} , ${2} , ... et $@ python3 monprog.py poum tchak 5 But : conversion string⇆nombre (pas limité au cas de input ) importation du « module » sys (détails plus tard) sys.argv contient une liste avec fonction int(chaine) renvoie un entier fonction float(chaine) renvoie un flottant (réel) fonction str(truc) renvoie une string 1 print( int("123") == 123 ) # True 2 print( float("42.12") == 42.1200) # True 3 print( int(nb) * msg) # ok! 1 2 3 4 age_string = input("Quel est votre age ? ") suivant = int(age_string) + 1 suivant_str = str(suivant) print("Vous allez avoir " + suivant_str + " ans !") 18 / 38 − Rémi Emonet − Programmation Impérative Boucle 'for' en Python le nom du fichier .py puis les paramètres chaque paramètre est une chaîne de caractères 1 2 3 4 5 6 7 8 9 10 import sys print(sys.argv) # ["monprog.py", "poum", "tchak", "5"] print(len(sys.argv)) # 4 (le nom du fichier + 3 paramètres) texte = sys.argv[1] + "-" + sys.argv[2] + " " nb = int(sys.argv[3]) # conversion vers un entier print(nb * texte) 19 / 38 − Rémi Emonet − Programmation Impérative Boucle 'for' en Python Pseudo-Listes : la Fonction range Pseudo-Listes : les String Une chaîne de caractères (string) est accessible comme une liste 1 2 3 4 Fonction range −1 − A nombres, de A à B − 1 range(A,B,S) , nombres de A à B − 1 en comptant de S en S range(N) , suite de N nombres, de 0 à N ch = "salut, bonjour" print(ch[0]) # s print(ch[5]) # , print(ch[len(ch)-2]) # u Les chaînes peuvent aussi être concaténées avec ch1 + ch2 Une chaîne peut être convertie en (vraie) liste 1 ch = "Salut !" 2 l = list(ch) 3 print(l) # ['S', 'a', 'l', 'u', 't', ' ', '!'] range(A,B) , suite de B NB : range(N) équivaut à range(0, N) NB : range(A, B) équivaut à range(A, B, 1) Peut être accédé comme une liste 1 2 3 4 r = range(10, 100) print(r[0]) print(r[9]) print(r[len(r)-1]) # # # # les 90 entiers de 10 à 99 10 19 99 Peut être converti en (vraie) liste 1 r = range(5, 10) 2 l = list(r) 3 print(l) # [5, 6, 7, 8, 9] 21 / 38 − Rémi Emonet − Programmation Impérative Boucle 'for' en Python 22 / 38 − Rémi Emonet − Programmation Impérative Boucle 'for' en Python Itération sur les Listes : Boucle for Autre Exemple de Boucle for But des boucles exécuter plusieurs fois les mêmes instructions pour différentes valeurs ex : afficher les carrés d'un ensemble de nombres Fonction range (rappel) range(N) , liste de N éléments de 0 à N − 1 range(A,B) , liste de B − A éléments de A à B − 1 1 for n in range(5): 2 print(n, "a pour carré", n*n) Exemple 1 nombres = [1, 2, 3, 5, 7, 11] 2 3 for n in nombres: 4 print(n, "a pour carré", n*n) Suivant le modèle 1 2 3 4 5 0 1 2 3 4 a a a a a pour pour pour pour pour carre carre carre carre carre 0 1 4 9 16 1 for «var» in «liste»: 2 # ci-dessous : exécuté pour chaque élément de «liste» 3 «instr» # dans le for 4 «instr» # dans le for 5 … # dans le for 6 … # apres le for for , in , : et l'indentation sont obligatoires 27 / 38 − Rémi Emonet − Programmation Impérative Boucle 'for' en Python 28 / 38 − Rémi Emonet − Programmation Impérative Boucle 'for' en Python Itérer sur les Indices d'une Liste But : avoir à la fois l'indice et la valeur d'une liste 1 nbr = [1, 2, 3, 5, 7, 11] 2 3 for i in «????»: 4 print("nbr[", i, "] =", nbr[i]) Solution avec range : 1 for i in range(len(nbr)): 2 print("nbr[", i, "] =", nbr[i]) Autre solution avec enumerate (plus tard) Points Clés Rappels sur l'articulation terminal/bash/python Rappels sur les if Rappels sur les listes Fonction range −1 − A nombres, de A à B − 1 range(A,B,S) , nombres de A à B − 1 en comptant de S en S range(N) , suite de N nombres, de 0 à N range(A,B) , suite de B Boucle for répéter un block pour chaque élément d'une liste avec range et len , permet aussi de parcourir les indices d'une liste 35 / 38 − Rémi Emonet − Programmation Impérative Boucle 'for' en Python 38 / 38 − Rémi Emonet − Programmation Impérative Boucle 'for' en Python