Info-PCSI2 TP n°2 : Premiers programmes Python 1. Quelques principes généraux : Dès que l’on écrit un programme d’une dizaine de lignes, il devient indispensable de le rendre parfaitement lisible pour permettre à une autre personne de le comprendre et de le modifier ou bien pour soi-même le reprendre plus tard. On veillera en particulier à: - choisir des noms de variables parlants - ajouter des commentaires en les précédant du symbole #. 2. Les commandes de base Les entrées/Sorties print() input Affiche du texte, le contenu d’une variable, … >>> print ("Bonjour le monde !") Bonjour le monde ! il existe des caractères spéciaux qui ne seront pas affichés : \t : tabulation \n : saut à la ligne >>> print("bonjour \n tout \t le monde") bonjour tout le monde Afficher plusieurs variables à la fois : >>> print ("x =", 1) Demander une valeur à l’utilisateur : Attention la variable ainsi définie est une chaîne de caractère. >>> valeur = input("entrez une valeur :") print(valeur) Les branchements conditionnels On utilise une variable condition de type booléen. >>> if condition1: >>> bloc d’instructions >>> elif condition 2: >>> bloc d’instructions ......... >>> elif condition (n-1): >>> bloc d’instructions >>> else: >>> bloc d’instructions 1 2 (n-1) n Remarques : -Seul le bloc en gras est obligatoire, le reste est optionnel - L’instruction « elif » est une compression de « else if », qui signifie « sinon si » C’est l’indendation qui définit les blocs d’instructions à exécuter si condition est vraie. N.Véron-LMB-2014 Info-PCSI2 Opérateurs de comparaison Signification Exemple Résultat == est égal à 1 == 2 False n'est pas égal à 1 != 2 True < est strictement inférieur 1 < 2 True > est strictement supérieur 1 > 2 False >= est supérieur ou égal 1 >= 2 False <= est inférieur ou égal 1 <= 2 True != ou <> Il faut bien faire la différence entre le symbole de l'affectation "=" et le symbole de la comparaison "==". La boucle for : >>> for compteur in itérable >>> bloc d’instructions C’est l’indendation qui définit le corps de la boucle. Les itérables en Python sont les types range, string, tuple et liste. L’expression range(m,n,p) est défini de la façon suivante : son premier élément est m ; son plus grand élément est n − 1; et l’élément venant après l’élément i est l’élément i + p. range(n) abrège l’expression range(0, n, 1) La boucle while >>> while condition : >>> bloc d’instructions Remarque : En cas de problème type boucle infinie, il est possible de sortir d’une boucle à tout moment à l’aide de CTRL + C. Cela permet de forcer l’arrêt d’un programme. C’est l’indendation qui définit le corps de la boucle. 3. Les modules complémentaires : Au démarrage, Python dispose d’un petit nombre de fonctions permettant d’exécuter des programmes basiques. On peut compléter la bibliothèque initiale en chargeant des modules. Par exemple pour utiliser la fonction sinus présente dans le module math, on pourra écrire au choix : >>> from math import sin >>> a = sin(pi/4) >>> import math as m >>> a = m.sin(pi/4) >>> from math import * >>> a = sin(pi/4) On a importé la seule fonction sinus. A préférer car il peut y avoir une autre fonction sin dans un autre module On a importé tout le module math Le problème est qu’il y ait d’autres fonction oooov éditeur et le sauvegarder dans la repertoire courant sous le nom : TP2_14-15 Ouvrir un nouvel Pour executer le code tapé dans l’éditeur : F5 Pour executer un bloc de ligne en surbrillance : F9 N.Véron-LMB-2014 Info-PCSI2 Exercice 1 : Voici un programme Python N = int(input(‘entrer un entier naturel : ‘)) for i in range(N) : if i%2 = 0: carre = i**2 else : carre = 0 somme = somme + carre print(somme) a. A quelle question répond-t-il ? b. Il comporte deux erreurs, lesquelles ? c. Modifier ce programme pour qu’il détermine le nombre d’itérations nécessaires pour que somme > A, A entier donné par l’utilisateur. Exercice 2 : Que fait l’algorithme suivant ? Données : a,b,c entiers relatifs Si a > b alors Si a>c alors ma Sinon mc FindeSi Sinon Si b>c alors mb Sinon mc FindeSi FindeSi Afficher m a. Le traduire en Python, de sorte que a,b et c soient entrés par l’utilisateur. b. Le tester avec différentes valeurs de a,b et c. c. Trouver un moyen de faire la même chose avec une commande Python. Exercice n°3 : sinus et cosinus a. Ecrire un programme qui affiche la valeur de la somme : sin(1) + sin(2) + ...+ sin(100). b. Le modifier pour qu’il affiche la valeur du produit : sin(1)*sin(2)*...*sin(100).. c. Ecrire un programme qui affiche les entiers k de [-20,20] tels que sin(k) < cos(k) d. Ecrire un programme qui affiche la valeur u100, lorsque u0 = 1 et k , uk+1 = sin(uk) e. Ecrire un programme qui affiche le plus petit entier k>0 tel que sin(k) > 0,99. Exercice n°4 : Un jeu a. Ecrire un programme qui choisit un entier N au hasard entre 1 et 200, puis qui demande à l’utilisateur de rentrer des entiers jusqu’à ce qu’il trouve N, en lui répondant « plus » ou « moins » pour chaque réponse erronée et en lui donnant son « score » une fois N trouvé. b. Quelle est la bonne stratégie pour gagner à ce jeu ? Essayer c. Ecrire un programme qui inverse les rôles c’est à dire que c’est l’utilisateur qui choisit un nombre et c’est l’ordinateur qui essaye de le trouver (la personne qui code le programme a su répondre à la question b.) Aide : On pourra utiliser la fonction randint(a,b) du module random qui renvoie un entier au hasard entre a et b. Correction de l’exercice 4 N.Véron-LMB-2014 Info-PCSI2 Correction #Exercice4, jeu 1 import random as rd N=rd.randint(1,200) print('Vous devez devinez un nombre entier entre 1 et 200') essai=0 score=0 while essai!=N: essai=int(input('tentez votre chance: ')) score=score+1 if essai==N: print('Bravo en ',score,' essais') elif essai<N: print('plus grand') else: print('plus petit') #Exercice 4 jeu 2 print('choissez un nombre entre 1 et 200') print('A chaque essai, répondez juste, plus ou moins') a,b=1,200 print('je tente, ',int((a+b)/2)) essai=input('juste, plus ou moins? ') if essai=='juste': print('je suis trop fort') else: while essai!='juste': if essai=='moins': a,b=a,int((a+b)/2) print('je tente, ',int((a+b)/2)) essai=input('juste, plus ou moins?') else: a,b=int((a+b)/2),b print('je tente, ',int((a+b)/2)) essai=input('juste, plus ou moins?') print('je suis trop fort!') N.Véron-LMB-2014