Formation I.S.N.

Séquences d'instructions et tests

Description d'un second programme


		
		

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 :

EtatDescriptionIllustration
InitialLes boîtes sont videsEtat initial
n°1Etat n°1
n°2Etat n°2
n°3l'utilisateur saisit par exemple la valeur 5 pour la variable x.Etat n°3
n°4l'utilisateur saisit par exemple la valeur 7 pour la variable y.Etat n°4


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 courantLangage 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'indentation

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 indentationInstructions 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.

Exercices

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 script2ème script

						a,b = 3,7
						a = b
						b = a
						print(a,b)
						

---------------------------------------------------------


						a,b = 3,7
						b = a
						a = b
						print(a,b)
						

---------------------------------------------------------

  • Piste ?
  • Solution ?
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".

  • Solution ?

							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.

  • Solution ?

							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")