Formation I.S.N.

Pour s'entraîner

Exercice 1

Combien de points sont affichés à l’exécution des ces deux programmes ? Expliquer.

Script n°1Script n°2

					for i in range(0,100):
						print(".", end="")
					for j in range(0,100):
						print(".", end="")
					print()
					

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


					for i in range(0,100):
						for j in range(0,100):
							print(".", end="")
					print()
					

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

  • Solution ?
Script n°1Script n°2

					for i in range(0,100):
						print(".", end="")
					for j in range(0,100):
						print(".", end="")
					print()
					

Ce script permet d'afficher 200 points : 100 pour la première boucle for puis 100 pour la deuxième boucle for


					for i in range(0,100):
						for j in range(0,100):
							print(".", end="")
					print()
					

Ce script permet d'afficher 10^4 (ou 100 x 100) points. Pour chaque valeur de i prise entre 0 et 99 (soit 100 valeurs), la variable j permet d'afficher 100 points.

Exercice 2

Reprendre le programme de bataille navale de la partie Les notions élémentaires et le modifier afin de permettre à l’utilisateur de rejouer s’il le souhaite.

  • Piste ?
  • Solution ?

Intégrer le script initial dans une boucle while dont la condition devra être vérifiée tant que l'on veut jouer

1ère possibilité :

					continuer = 1
					while continuer == 1:
						a = 4
						b = 7
						print("A vous 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")
						reponse = input("Voulez-vous continuer o/n ?")
						if reponse == "n":
							continuer = 0
					

Cette solution a l'avantage de donner le choix à l'utilisateur de poursuivre ou bien de stopper le jeu selon la valeur de la variable continuer choisie.



...ou bien

					while True:
						a = 4
						b = 7
						print("A vous 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")
					

L'instruction while True permet en fait de rentrer dans une boucle infinie. Cette solution permet donc à l'utilisateur de rejouer autant de fois qu'il le veut mais ne permet pas d'arreter le jeu.

Exercice 3

Écrire un programme affichant le première valeur entière k à partir de laquelle 3k > 10 000.

Pourquoi est-on certain de l’existence de cet entier k ?

  • Piste ?
  • Solution ?
Utiliser une boucle while. On a le choix dans la construction de la suite.

1ère possibilité :


					k = 0
					u = 1 # 3 puissance zéro = 1
					while u <= 10000:
						u *= 3 # ou bien u = u * 3
						k += 1 # ou bien k = k + 1
					print(k)
					

ou bien


					k = 0
					while 3**k <= 10000:
						k += 1 # ou bien k = k + 1
					print(k)
					

Exercice 4

Écrire un programme permettant d’afficher toutes les tables de multiplication de 0 à 10.

  • Piste ?
  • Solution ?
Utiliser une boucle for.

					for k in range(0,11,1):
						for j in range(0,11,1):
							print(k," *",j," =",k*j)
					

Exercice 5

Écrire un programme permettant d’afficher les carrés et les cubes des 20 premiers entiers naturels non nuls.

  • Piste ?
  • Solution ?
Utiliser indifféremment une boucle while ou une boucle for.

1ère possibilité :


					for k in range(1,21,1):		#Le 1 en troisième argument est facultatif : il s'agit du pas
						print(k,k**2,k**3)
					

ou bien


					k=0
					while k<21:
						print(k,k*k,k**3)
						k+=1
					

Exercice 6

Écrire un programme qui affiche une table de conversion des sommes d’argent exprimées en euros et en dollars. La progression des valeurs sera géométrique comme dans l’exemple ci-dessous :

1 euros(s) = 1,1183 dollar(s)

2 euros(s) = 2,2366 dollar(s)

4 euros(s) = 4,4732 dollar(s)

8 euros(s) = 8,9464 dollar(s)

On s’arrêtera à 16 384 euros.

  • Piste ?
  • Solution ?
Utiliser indifféremment une boucle while ou une boucle for.

1ère possibilité :


					k = 0
					while 2 ** k <= 16384:
						print(2**k,"euro(s) =",2**k*1.1183,"dollar(s)")
						k += 1
					

ou bien


					for k in range(0,15,1): # on va jusqu'à 2**14
						print(2**k,"euro(s) =",2**k*1.1183,"dollar(s)")
					

Exercice 7

Écrire un programme qui affiche une suite de 12 nombres dont chaque terme est égal au triple du précédent.

  • Piste ?
  • Solution ?
Utiliser une boucle for.

					nombre = int(input("saisir votre nombre de départ : "))
					for k in range(12):
						print(nombre)
						nombre *= 3
					

Exercice 8

Écrire un programme qui calcule les 50 premiers termes de la table de multiplication par 13 et qui n’affiche que ceux qui sont multiples de 7.

  • Piste ?
  • Solution ?
Utiliser une boucle for et y insérer un test.

					for k in range(50):
						A = 13 * k
						if A % 7 == 0:
							print(A,"est multiple de 13 et de 7")
					

Exercice 9

Écrire un programme qui affiche la suite de symboles suivante :

*

**

***

****

*****

******

*******

  • Piste ?
  • Solution ?

Si on utilise une boucle while il faudra y intégrer une boucle for.

Mais tout peut se réaliser avec une seule boucle for...

1ère possibilité :


					k=1
					while k<8:
						for j in range(1,k+1):
							print("*",end="")
						print()
						k+=1
					

ou bien, plus efficace...


					for k in range(1,8):
						print(k * "*")		#On utilise l'opérateur * (multiplication) entre deux objets de types
											#différents : un entier et une chaîne de caractères.
					

Exercice 10

Écrire un programme qui recueille au clavier les températures de 7 journées successives et calcule la température moyenne de la semaine.

  • Piste ?
  • Solution ?

Utiliser une boucle for.


					moyenne = 0
					for jour in range(1,8,1):
						print("Saisir la température du jour",jour)
						T = float(input())
						moyenne += T / 7
					print("La température moyenne de la semaine est",moyenne)
					

Exercice 11

  1. Écrire un programme permettant d’afficher les valeurs approchées de exp(−4), exp(−3), exp(−2), exp(−1), exp(0), exp(1), exp(2), exp(3), exp(4).
  2. Écrire un programme permettant de tabuler la fonction exponentielle sur l’intervalle [−20 ; 20] avec un pas égal à 2.
  3. Écrire un programme permettant de tabuler la fonction exponentielle sur l’intervalle [0 ; 3] avec un pas de un dixième. On pourra imbriquer deux boucles for.
  4. Écrire un programme répondant à la question précédente, avec une boucle while. Quelle curiosité remarque-t-on ?
  • Solution ?

Question 1


					from math import exp
					for k in range(-4,5,1):
						print("exp(",k,") =",exp(k))
					


Question 2


					from math import exp
					for k in range(-20,21,2):
						print("exp(",k,") =",exp(k))
					


Question 3


					from math import exp
					for k in range(0,3):
						for j in range(0,10):
							print("exp(",k+0.1*j,") =",exp(k+0.1*j))
					print("exp(3.0) =",exp(3))
					

ou encore


					from math import exp
					for k in range(0,31):
						print("exponentielle de",k/10,"=",exp(k/10))
					


Question 4


					from math import exp
					k=0
					# Ci-dessous,en théorie, <=3, mais ici 3.001
					# pour contourner les erreurs d'arrondis successifs.
					while k<=3.001:
						print("exp(",k,") =",exp(k))
						k+=0.1
					

Exercice 12

Dans un conte américain, huit petits canetons s’appellent respectivement : Jack, Kack, Lack, Mack, Nack, Oack, Pack et Qack.

Écrire un script en trois lignes qui génère tous ces noms à partir des deux chaînes de caractères suivantes :

debuts = ‘JKLMNOP’ et fin = ‘ack’

  • Piste ?
  • Solution ?

Utiliser une boucle for.


debuts,fin='JKLMNOP','ack'
for lettre in debuts:
	nom = lettre + fin # concaténation de chaînes
	print(nom)