CoursPyhton Id5580
CoursPyhton Id5580
CoursPyhton Id5580
1 Utilisation de Python
Créez un répertoire Python dans votre espace de travail. Lancez Python (sous Windows,
menu Programmes/IDLE (Python GUI)
La fenêtre Python Shell permet d’entrer des calculs ligne par ligne.
Une invite (prompt en anglais) formée de trois chevrons >>> autorise à entrer des
expressions Python. Entrez par exemple, après l’invite, la ligne suivante :
>>> (2011*2012)//2 #la somme des entiers de 1 a 2011
2023066
La fin de ligne à partir du # est un commentaire, ignoré par Python. L’opérateur //
est celui de la division euclidienne.
Dans cette fenêtre, seule la dernière ligne est éditable. On peut toutefois récupérer et
modifier les lignes déjà entrées par les raccourcis <Alt>P (précédent) et <Alt>N (suivant)
permettant de naviguer dans l’historique des commandes.
De plus, un nom spécial, _ (tiret de souignement, underscore), permet de récupérer
le résultat de la dernière commande.
Une aide très complète est fournie avec Python en passant par le menu Help/Python Docs,
raccourci F1. En particulier, The Python Tutorial est une lecture indispensable.
–1/12–
ISBS B1-ST01 Programmation TP1 (corrigé) 2012-2013
à rendre Quels sont les résultats (valeur et type) des expressions suivantes ?
23+8 23-8 23*8
23/8 23//8 23%8
23.3+8.5 23.3-8.5 23.3*8.5
23.3/8.5 23.3//8.5 23.3%8.5
(3+2j)/(2-1j) (2+4j)/(1+2j) (1j)**2
(2.1+3j).real (2.1+3j).imag (-1)**(1/2)
Note : L’appel à la fonction type(_) retourne le type du dernier résultat.
Corrigé
***************************************************************************
23+8 31 (int) 23-8 15 (int)
23*8 184 (int) 23/8 2.875 (float)
23//8 2 (int) 23%8 7 (int)
23.3+8.5 31.8 (float) 23.3-8.5 14.8 (float)
23.3*8.5 198.05 (float) 23.3/8.5 2.74117647059 (float)
23.3//8.5 2.0 (float) 23.3%8.5 6.3 (float)
(3+2j)/(2-1j) (0.8+1.4j) (complex)
(2+4j)/(1+2j) (2+0j) (complex)
(1j)**2 (-1+0j) (complex)
(2.1+3j).real 2.1 (float)
(2.1+3j).imag 3.0 (float)
(-1)**(1/2) (6.123233995736766e-17+1j) (complex)
–2/12–
ISBS B1-ST01 Programmation TP1 (corrigé) 2012-2013
Exercice 3.
Les calculs sur les nombres décimaux sont arrondis et l’ordre des calculs a un effet :
à rendre Que valent les expression suivantes ?
0, 3 + 0, 2 + 0, 1 0, 1 + 0, 2 + 0, 3 0, 3 × 0, 2 × 0, 1
2
0, 1 × 0, 2 × 0, 3 (1, 2 + 1, 3) 1, 2 + 2 × 1, 2 × 1, 3 + 1, 32
2
3
16 + 19
1 1
−
1 1
1+ 1+
1 1
1+ 1+
2 3
Corrigé
***************************************************************************
>>> 0.3+0.2+0.1
0.6
>>> 0.1+0.2+0.3
0.6000000000000001
>>> 0.3*0.2*0.1
0.006
>>> 0.1*0.2*0.3
0.006000000000000001
>>> (1.2+1.3)**2
6.25
>>> 1.2**2 + 2*1.2*1.3 + 1.3**2
6.250000000000001
>>> 16 + 19 * 3 / (1/(1+1/(1+1/2)) - 1/(1+1/(1+1/3)))
2010.9999999999916 # ça devrait être 2011
***************************************************************************
Exercice 4. Le Talkhys
Le Talkhys est un traité d’arithmétique pratique d’Ibn Albanna, mathématicien et
astronome marocain de la première moitié du xiiie siècle.
–3/12–
ISBS B1-ST01 Programmation TP1 (corrigé) 2012-2013
9 × 1 + 2 = 11
1 × 1 = 1 9 × 12 + 3 = 111
11 × 11 = 121 9 × 123 + 4 = 1111
111 × 111 = 12321 9 × 1234 + 5 = 11111
1111 × 1111 = 1234321 9 × 12345 + 6 = 111111
11111 × 11111 = 123454321 9 × 123456 + 7 = 1111111
111111 × 111111 = 12345654321 9 × 1234567 + 8 = 11111111
1111111 × 1111111 = 1234567654321 9 × 12345678 + 9 = 111111111
9 × 123456789 + 10 = 1111111111
8 × 1 + 1 = 9
9 × 9 + 7 = 88
8 × 12 + 2 = 98
9 × 98 + 6 = 888
8 × 123 + 3 = 987
9 × 987 + 5 = 8888
8 × 1234 + 4 = 9876
9 × 9876 + 4 = 88888
8 × 12345 + 5 = 98765
9 × 98765 + 3 = 888888
8 × 123456 + 6 = 987654
9 × 987654 + 2 = 8888888
8 × 1234567 + 7 = 9876543
9 × 9876543 + 1 = 88888888
8 × 12345678 + 8 = 98765432
9 × 98765432 + 0 = 888888888
8 × 123456789 + 9 = 987654321
Corrigé
***************************************************************************
Par exemple :
>>> 8 * 1234567 + 7
9876543
***************************************************************************
–4/12–
ISBS B1-ST01 Programmation TP1 (corrigé) 2012-2013
l’inventeur de lui donner tout ce qu’il voudrait pour sa récompense. Celui-ci répon-
dit : « Que Votre Majesté daigne me donner un grain de blé pour la première case
de l’échiquier, deux pour la seconde, quatre pour la troisième, et ainsi de suite, en
doublant jusqu’à la soixante-quatrième case. »
Édouard Lucas, L’arithmétique amusante, Blanchard 1974
On estime qu’un grain de blé pèse 0,035 g et que la production annuelle mondiale de
blé est de 600 millions de tonnes.
–5/12–
ISBS B1-ST01 Programmation TP1 (corrigé) 2012-2013
Cette fenêtre, titrée pour l’instant Untitled, va nous permettre de saisir notre premier
programme. Entrez les lignes suivantes.
# fichier : devine.py
# auteur : Jean-Claude GEORGES
# date : 19/05/2010
# màj : 16/10/2012
5 # exemple simple de programme python : le nombre à deviner
import random # pour des fonctions de génération de nombres aléatoires
MINI = 1
10 MAXI = 999
print ( """Voici le classique jeu du nombre à deviner (niveau Adibou CE1).
L’ordinateur va choisir un nombre au pseudo-hasard entre """
−−−→−−−→+ str( MINI ) + ’ et ’ + str ( MAXI ) +
15 "\net vous allez essayer de le deviner.\n" )
#initialisation du programme
nb_à_deviner = random.randrange(MINI , MAXI +1) # nombre à deviner
## **************** testeurs ****************************
20 ## décommentez la ligne suivante pour "tester" en un coup
# print(nb_à_deviner)
## ******************************************************
nb_essais = 0 # nombre d’essais
25 trouvé = False # type booleen
message = ’Proposez un nombre : ’
#corps du programme
while not trouvé : # tant qu’on n’a pas trouve
−−−→x = int (input(message)) # affichage message, puis demande entrée
30 # clavier et conversion en int
−−−→## **************** testeurs + cheat code ***************
−−−→## décommentez les trois ligne suivantes si vous voulez tester
−−−→## que tentative reste au singulier dans le dernier message
−−−→## en cas de découverte du nombre en un coup.
35 −−−→## ******************************************************
–6/12–
ISBS B1-ST01 Programmation TP1 (corrigé) 2012-2013
#−−→if x == 2011 :
#−−→−−−→print(nb_à_deviner)
#−−→−−−→continue
−−−→nb_essais += 1
40 −−−→if x < nb_à_deviner :
−−−→−−−→print ("C’est plus !")
−−−→elif nb_à_deviner < x :
−−−→−−−→print ("C’est moins !")
−−−→else : # x == nb_à_deviner
45 −−−→−−−→trouvé = True
−−−→−−−→#terminaison du programme
−−−→−−−→print ("\nBravo. Vous avez deviné le nombre en ",nb_essais,
" tentative", (’s’ if nb_essais > 1 else’’),’ !’, sep = ’’)
# on ajoute un s au pluriel
Sauvegardez le programme avec le menu File/Save, raccourci <Ctrl>S (devine.py par
exemple, le suffixe .py étant utilisé par Idle pour mettre en couleur les différents éléments
du programme).
La fenêtre Idle se renomme alors devine.py. Pour recharger un programme sauvegardé,
c’est le menu File/Open... , raccourci <Ctrl>O qu’il faut utiliser.
Exécutez le programme (menu Run/Run Module , raccourci <F5>). S’il y a des erreurs,
corrigez le programme, sinon le programme s’exécute dans la fenêtre Python Shell.
–7/12–
ISBS B1-ST01 Programmation TP1 (corrigé) 2012-2013
–8/12–
ISBS B1-ST01 Programmation TP1 (corrigé) 2012-2013
1 × 1 = 1
11 × 11 = 121
111 × 111 = 12321
1111 × 1111 = 1234321
11111 × 11111 = 123454321
111111 × 111111 = 12345654321
1111111 × 1111111 = 1234567654321
–9/12–
ISBS B1-ST01 Programmation TP1 (corrigé) 2012-2013
à rendre Écrire les trois fonctions affichant les n premières lignes de chacun des
trois autres tableaux du Talkhys (page 4 de l’énoncé)
Corrigé
***************************************************************************
# Talkhys : exemples de boucles
–10/12–
ISBS B1-ST01 Programmation TP1 (corrigé) 2012-2013
–11/12–
ISBS B1-ST01 Programmation TP1 (corrigé) 2012-2013
11 * 11 = 121
111 * 111 = 12321
1111 * 1111 = 1234321
11111 * 11111 = 123454321
111111 * 111111 = 12345654321
>>> Talkhys2(6)
9 * 1 + 2 = 11
9 * 12 + 3 = 111
9 * 123 + 4 = 1111
9 * 1234 + 5 = 11111
9 * 12345 + 6 = 111111
9 * 123456 + 7 = 1111111
>>> Talkhys3(6)
9 * 9 + 5 = 86
9 * 96 + 4 = 868
9 * 965 + 3 = 8688
9 * 9654 + 2 = 86888
9 * 96543 + 1 = 868888
9 * 965432 + 0 = 8688888
>>> Talkhys4(6)
8 * 1 + 1 = 9
8 * 12 + 2 = 98
8 * 123 + 3 = 987
8 * 1234 + 4 = 9876
8 * 12345 + 5 = 98765
8 * 123456 + 6 = 987654
***************************************************************************
–12/12–