Quand on exécute ce programme, il affiche A vous de jouer
puis attend que l'utilisateur saisisse deux nombres entiers au clavier.
Si ces deux nombres sont 4 et 7, alors il affiche Coulé
; si le premier est 4 ou le second est 7, mais pas les deux, alors il affiche
En vue
; sinon il affiche A l'eau
.
Ce petit programme laisse apparaître deux nouvelles notions que nous allons détailler : la séquence d'instruction et
le test.
Une séquence d'instructions correspond à une succession de plusieurs instructions qui modifient l'état d'exécution du programme.
Dans un programme, les instructions s'exécutent dans l'ordre dans lequel elles sont écrites. Ce mode de fonctionnement est à garder en mémoire :
en effet, de nombreuses erreurs proviennent d'un ordre erroné des instructions. Il convient donc d'y être très attentif au moment de la programmation.
Les cinq premières lignes du programme constituent une séquence d'instructions qui viennent affecter des valeurs à chacune des quatre variables
nécessaires au programme. L'évolution de l'état d'exécution de ce programme est la suivante :
Etat | Description | Illustration |
Initial | Les boîtes sont vides |  |
n°1 | |  |
n°2 | |  |
n°3 | l'utilisateur saisit par exemple la valeur 5 pour la variable x . |  |
n°4 | l'utilisateur saisit par exemple la valeur 7 pour la variable y . |  |
L'instruction print(''A vous de jouer'')
ne modifie pas l'état d'exécution du programme. Elle affiche simplement la chaîne de caractères
écrite entre les guillemets.
Les sept dernières lignes du programme correspondent à ce que l'on appelle un test ou une structure conditionnelle
qui prend la forme (partielle) suivante :
Langage courant | Langage Python |
Si expression Alors séquence d'instructions 1 Sinon séquence d'instructions 2 |
if expression:
sequence d'instructions 1
else:
sequence d'instructions 2
|
Dans notre cas, l'expression testée contient le mot clé and
. Il y a donc en réalité deux expressions (comparaisons) à vérifier
simultanément pour exécuter l'instruction 1 correspondant à l'affichage de la chaîne de caractères ''Coulé''
.
Si ces deux expressions (comparaisons) ne sont pas simultanément vérifiées (dans l'état True), c'est l'instruction 2 qui se trouve sous le
else
qui s'exécute. Cette instruction 2 n'est pas une simple instruction : elle contient une deuxième structure conditionnelle
identique (forme partielle).
L'un des grands avantages du langage Python est sa simplicité dans sa structure comme dans sa sémantique. Cette simplicité se traduit par le fait
qu'il faut généralement peu de caractères et peu de lignes pour programmer les instructions les plus élémentaires.
L'un des principaux éléments qui engendrent cette simplicité de programmation est l'indentation, c'est à dire le décalage vers
la droite de certaines lignes pour leur prise en compte sous certaines conditions.
Cette indentation est automatique après l'inscription de deux points (:) en bout de ligne précédente.
Pour l'obtenir à la main, il suffit d'actionner une fois la touche tabulation
du clavier ou bien quatre fois la
touche espace
.
a = 4
b = 7
print("A vous de jouer")
x = int(input())
y = int(input())
if x == a and y == b: #deux points
print("Coulé") #indentation
else: #deux points
if x == a or y == b: #indentation et deux points
print("En vue") #indentation
else: #deux points
print("A l'eau") #indentation
Ainsi il convient de bien distinguer les deux structures suivantes qui ne donneront pas du tout le même résultat :
Instructions 3 avec indentation | Instructions 3 sans indentation |
if expression:
sequence d'instructions 1
else:
sequence d'instructions 2
sequence d'instructions 3
|
if expression:
sequence d'instructions 1
else:
sequence d'instructions 2
sequence d'instructions 3
|
Dans la structure 1, instruction 3
ne sera exécutée que si expression
n'est pas vérifiée.
Dans la structure 2, instruction 3
sera exécutée dans tous les cas, en fin de programme.
Exercice 1
Ordre des des instructions
Saisir les deux scripts ci-dessous dans deux fichiers différents et observer les résultats obtenus. Comment expliquer la différence ?
1er script | 2ème script |
a,b = 3,7
a = b
b = a
print(a,b)
---------------------------------------------------------
|
a,b = 3,7
b = a
a = b
print(a,b)
---------------------------------------------------------
|
Analyser l'état d'exécution de chacun des scripts.
1er script
L'état d'exécution est le suivant :
Etat n°1 : a = 3 et b = 7
Etat n°2 : a = 7 et b = 7
Il n'y a pas de changement d'état lors de l'instruction de la 3ème ligne.
Le programme affiche donc 7 7
2ème script
L'état d'exécution est le suivant :
Etat n°1 : a = 3 et b = 7
Etat n°2 : a = 3 et b = 3
Il n'y a pas de changement d'état lors de l'instruction de la 3ème ligne.
Le programme affiche donc 3 3
Exercice 2
Reprise de la bataille navale
Modifier le programme de bataille navale afin que le bateau se trouve en coordonnées (6 ; 9) et que l'affichage initial soit "A toi de jouer
"
au lieu de "A vous de jouer
".
a = 6
b = 9
print("A toi de jouer")
x = int(input())
y = int(input())
if x == a and y == b:
print("Coulé")
else:
if x == a or y == b:
print("En vue")
else:
print("A l'eau")
Exercice 3
Reprise de la bataille navale
En général, à la bataille navale, un bateau est « en vue » que si la case touchée est immédiatement adjacente à celle du bateau.
Modifier le programme de bataille navale pour tenir compte de cette règle. On pourra distinguer le cas où les cases diagonalement adjacentes au
bateau sont « en vue » de celui où elles ne le sont pas.
a = 6
b = 9
print("A toi de jouer")
x = int(input())
y = int(input())
if x == a and y == b:
print("Coulé")
else:
if (x == a-1 and y == b) or (x == a+1 and y == b) or (x == a and y == b-1) or (x == a and y == b+1):
print("En vue")
else:
print("A l'eau")