tabledesmatièresvrohart.e-monsite.com/medias/files/td01b-python.pdf · informatique psip2-a,b...

7
INFORMATIQUE PSI P2-A,B Année 2017/18 TD n°1 Fondamentaux en Python Table des matières 1 Rappels des syntaxes fondamentales 3 1.1 Instruction FOR ............................... 3 1.2 Instruction WHILE .............................. 3 1.3 Instruction IF ................................. 3 1.4 Créer une fonction .............................. 3 1.5 Programmer une suite récurrente d’ordre 1 ou 2 .............. 3 2 Rappel des bibliothèques fondamentales 4 3 Rappels sur les listes, les ensembles, les chaînes de caractères 5 4 Exercices de difficulté modérée 6 5 Exercices plus avancés 7 Vincent Rohart

Upload: lethuan

Post on 10-Sep-2018

213 views

Category:

Documents


0 download

TRANSCRIPT

INFORMATIQUE PSI P2-A,BAnnée 2017/18

TD n°1Fondamentaux en Python

Table des matières1 Rappels des syntaxes fondamentales 3

1.1 Instruction FOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.2 Instruction WHILE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.3 Instruction IF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.4 Créer une fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.5 Programmer une suite récurrente d’ordre 1 ou 2 . . . . . . . . . . . . . . 3

2 Rappel des bibliothèques fondamentales 4

3 Rappels sur les listes, les ensembles, les chaînes de caractères 5

4 Exercices de difficulté modérée 6

5 Exercices plus avancés 7

Vincent Rohart

1 Rappels des syntaxes fondamentales

1.1 Instruction FOR

for k in range (10) : # k i r a de 0 à 9 .print (k∗∗2)

Rappel. L’instruction range(a,b,p) représente les entiers de a à b-1 avec un pas de p.

1.2 Instruction WHILE

k = 0while k∗∗2 < 100 :

print (k∗∗2)k += 1 # équ iva l en t à k = k+1

1.3 Instruction IF

k = 0i f k <= 10 : # s i g n i f i e i n f é r i e u r ou éga l

print (k∗∗2)else :

print ( "c ’ e s t f i n i ! " )

Rappel. le test d’égalité se code avec == (à ne pas confondre avec l’affectation = ).

1.4 Créer une fonction

def f (x) :return (x∗∗2) :

Rappel. Une fonction créée par def doit toujours se terminer par un return (qui arrêtela lecture du programme, même s’il y a des lignes de codes après).

f = lambda x : x∗∗2 # c ’ e s t l a f on c t i on carré , nommée i c i f .

1.5 Programmer une suite récurrente d’ordre 1 ou 2

def u(n) :x = 3 # rep r é s en t e l e premier terme de l a s u i t e .for k in range (n) :

x = f (x) # où f e s t une f onc t i on dé jà e x i s t an t e .return x # va renvoyer l a d e rn i è r e va l eur de x , càd u(n ) .

def u(n) :x ,y = 0 ,1 # rep r é s en t e l e s 2 premiers termes de l a s u i t e .for k in range (n) :

x ,y = y , f (x ,y) # où f e s t une f onc t i on dé jà c r é é ereturn x

2 http://vrohart.e-monsite.com/

2 Rappel des bibliothèques fondamentalesOn dit aussi librairie, package, module... On charge une bibliothèque avec import.

On peut la renommer avec as.

• numpy : permet l’Analyse numérique, le calcul approchée d’intégrale, les fonctionsmathématiques usuelles, les constantes fondamentales (π, etc.)

• matplotlib.pyplot : permet le tracé graphique. Pour tracer la fonction cosinussur [0, 7π] on peut écrire :

import numpy as npimport matplotlib . pyplot as pltpi = np . pi # l e nombre p i s ’ ob t i en t grâce à numpyx = np . linspace (0 ,7∗ pi , 1 00 ) #cré e 100 r é e l s de 0 à 7 p iy = np . cos (x) #c a l c u l e l e s images des é léments de l a l i s t e xplt . plot (x ,y)plt . grid (True) #ra j ou t e une g r i l l eplt . axis ( ’ equal ’ ) # repè r e orthonormé

• random : le module de tout ce qui concerne l’aléatoire.

import random as rdrd . randint ( 1 , 6 ) # renvo i e un e n t i e r t i r é au hasard ent r e 1 et 6L = [1 , 2 , 3 , 4 , 5 , 6 ] # on c r é e une l i s t e .rd . shuff le (L) # mélange a l éa to i r ement l a l i s t e L , mais n ’ a f f i c h e r i e nL # a f f i c h e l a l i s t e mélanger . Attention , L a é té é c r a s é e !

3 http://vrohart.e-monsite.com/

3 Rappels sur les listes, les ensembles, les chaînes decaractères

En anglais : list, set, string (type str).

L = [1 ,2 ,3 ,2 , −1 , 4 ] # v o i c i une l i s t e .len (L) # la longueur de L e s t 6 .type (L) # l e type de L e s t l i s t .L [ 0 ] # c ’ e s t l e premier terme : i c i c ’ e s t 1 .L [ 6 ] # n ’ e x i s t e pas ! !L[−1] # c ’ e s t l e d e rn i e r terme : i c i c ’ e s t 4 .L .append (3 ) # ajoute 3 à l a f i n de L (L e s t a l o r s é c r a s é e ) .L += [ 3 ] # même chose , équ iva l en t à L = L + [ 3 ]2 in L # True

S = {1 ,2 ,3 ,2 ,−1 , 4} # vo i c i un ensemble .type (L) # l e type de L e s t s e t .len (L) # l e c a rd i na l de S e s t 5 et non 6 !{ } # c ’ e s t l ’ ensemble v ide .S == {−1 ,1 ,2 ,3 ,4} # True : i l n ’ y a pas d ’ ordre n i r é p é t i t i o n .S . union ({6 ,7}) # éc ra s e S en l ’ ensemble S union {6 ,7}S . inter ({1 ,7}) # à votre av i s ?S . difference ({1 ,2}) # idem

C = ’ bonjour , j e s u i s content ’ # on peut mettre des " au l i e u des ’type (C) # l e type de C e s t s t r .’ abc ’ + ’ ed f ’ # concatène l e s cha înes .’b ’ in ’ bonjour ’ # Trueord ( ’ a ’ ) # renvo i e 97 ( n ° ASCII de a )chr (97) # renvo i e a .

L = l i s t ({1 ,2 , 3} ) #conv e r t i t un ensemble en l i s t e .S = set ( [ 1 , 2 , 3 ] ) #conv e r t i t une l i s t e en ensemble .s = str ( [ 1 , 2 , 3 ] ) #conv e r t i t une l i s t e en chaîne de c a r a c t è r e s .

Remarque. Pour savoir si une liste L possède des éléments deux à deux distincts, il estpratique de faire le test suivant :

len (L) == len ( set (L) )

4 http://vrohart.e-monsite.com/

4 Exercices de difficulté modéréeExercice 1 Calculer 13+23+33+. . .+503 et vérifier que cela vaut (1+2+3+. . .+50)2.

Exercice 2 (Disco vs. hard rock). On rappelle qu’un carré parfait est un entier de laforme n2 avec n ∈ N.On appelle nombre disco tout carré parfait de la forme ABBA (avec A 6= B et A 6= 0).On appelle nombre hard rock tout carré parfait de la forme ACDC (avec A,C,D distinctset A 6= 0).Déterminer tous les nombres disco et hard rock.

Exercice 3 (La suite de Syracuse). Programmer (avec la commande def) la célèbresuite (un)n∈N définie par un premier terme u0 de votre choix, et pour tout n ∈ N,

un+1 =

®12un si un est pair,

3un + 1 sinon.

Observer que quelle que soit la valeur de u0 choisi, il existe n0 ∈ N tel que un0 = 1.Trouver le plus petit entier n0 convenant si u0 = 15.

Exercice 4 (Nombres d’Armstrong). Un nombre d’Armstrong est un entier naturel quiest égal à la somme des cubes des chiffres qui composent son écriture en base 10. Parexemple 153 est un nombre d’Armstrong car 153 = 13 + 53 + 33.Trouver tous les nombres d’Armstrong inférieurs à 10 000.

Exercice 5 (Nombres apocalyptiques, d’après J.-M. Saint-Jalm). Un nombre apocalyp-tique est un entier de la forme 2n avec n ∈ N qui comporte au moins une séquence 666dans son écriture décimale.Trouver le plus petit nombre apocalyptique.

5 http://vrohart.e-monsite.com/

Exercice 6 (Courbe elliptique sur R). Représenter l’ensemble des couples (x, y) ∈ R2

vérifianty2 = x3 + x+ 1.

On prendra garde aux problèmes d’arrondis, et on testera si |y2− (x3 + x+1)| < ε avecε > 0 assez petit, plutôt que y2 = x3 + x+ 1.

5 Exercices plus avancés

Exercice 7 La série ∑ (−1)n+1

n(définie sur N∗) est convergente et il est classique de

démontrer que sa somme vaut ln(2). En revanche, on peut montrer, et l’objet de cetexercice est de comprendre pourquoi, que si l’on change l’ordre de ses termes, on peutla faire converger vers n’importe quoi d’autre.

1. De quelle nature sont les séries ∑ −12n

et ∑ 12n+1

?2. Soit L ∈ R quelconque. Expliquer comment construire une série ∑

an dont lestermes sont exactement les mêmes que ∑ (−1)n+1

n, mais qui converge vers L.

3. Notons un = (−1)n+1

n. On a ainsi créé une bijection σ : N∗ → N∗ qui « réordonne

les termes de ∑un », c’est-à-dire telle que an = uσ(n) pour tout n ∈ N∗. Écrire

une fonction Python prenant L et n en paramètre et renvoyant la valeur σ(n).

Exercice 8 (L’énigme de Bérangère). Bérangère (professeur d’EPS et néanmoins amie)me dit : « tiens l’matheux, j’parie que tu peux même pas trouver 26 en utilisant 2, 3,4, 5 et les quatre opérations +, −, × et ÷, mais sans utiliser deux fois le même truc[nombre ou opération, je traduis] mais en utilisant vraiment les quatre chiffres [nombres,je traduis] ! »

Donner tort à cette médisante sportive en écrivant un programme PYTHON qui

– trouve le résultat sous une forme de chaîne de caractères, par exemple :

′(((2 + 3) × 4 ) - 5)′

(qui n’est évidemment pas la solution),– trouve toutes les solutions possibles, en convenant que (((3 + 2) × 4 ) - 5) et(((2 + 3) × 4 ) - 5) désignent la même solution.

– renvoie en plus le nombre de solutions au problème.

Clouer définitivement le bec de Bérangère en calculant le temps de calcul en utilisantla fonction clock() qu’on peut charger en début de programme grâce à l’instruction :from time import clock.

6 http://vrohart.e-monsite.com/

Exercice 9 Un cryptarithme (du grec κρυπτός, caché et ἀριθμός : nombre) est unedevinette calculatoire du type

MORE + SEND = MONEY

où chaque lettre désigne un chiffre (entre 0 et 9) de sorte que l’opération ainsi créée soitexacte. Ce problème admet une unique solution : 1085 + 9567 = 10652 (donc M = 1,O = 0, Y = 2, etc.)

Créer un programme PYTHON qui résout le cryptarithme suivant :

UN + UN + NEUF = ONZE

On calculera le temps de calcul en utilisant la fonction clock() qu’on peut chargeren début de programme grâce à l’instruction : from time import clock.

7 http://vrohart.e-monsite.com/