Programmation Impérative Boucle `for` en Python

publicité
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
Téléchargement