Le plus simple est d'installer l'environnement de développement (ou Integrated Development Environment) Pyzo puis la distribution Python Anaconda en suivant le guide rapide d'installation sur le site de Pyzo. Installez bien Anaconda et non pas Miniconda (sauf sur votre clef USB éventuellement) car Anaconda inclut tous les modules nécessaires et le Jupyter Notebook si pratique que vous êtes en train d'utiliser. Par la suite nous travaillerons plutôt avec l'IDE Pyzo.
pygame
pose problème avec conda et pip. Dans ce cas on se rend sur le site http://www.lfd.uci.edu/~gohlke/pythonlibs/ et on télécharge le paquet wheel de pygame qu'on installe avec pip install paquet.whl
En cas de problème contactez le professeur par la messagerie de l'ENT.
Le site de référence est http://www.france-ioi.org, si vous souhaitez progresser, il faut s'entraîner et ce site est la plateforme idéale : créez un compte puis suivez le parcours lycée pour commencer.
Pour visualiser ce que fait la machine lors de l'exécution d'un code Python, et mieux comprendre le fonctionnement du langage, un bon outil est http://pythontutor.com/
2 + 5
2*5
2**5 #exponentiation
2.2/3.5
17.0/5.0
17//5
%%python
print(17/5) #en python2
17/5 #en python3
3//-2
-(3//2)
(-3)%2
3%(-2)
-(3%2)
print
¶print
pour un affichage sur la sortie standard qui par défaut est l'écran. print(Bonjour)
Pour afficher du texte, celui-ci doit être contenu dans une chaîne de caratère délimitée par des apostrophes comme 'La mer' ou des guillemets comme "L'océan".
print('Bonjour')
On peut aussi afficher la valeur d'une expression obtenue par évaluation d'une combinaison de littéraux (valeurs correspondant aux types de base du langage), d'opérateurs et de variables
n = 2000
print(2017 - n)
On peut passer plusieurs arguments à la fonction print
en les séparant par une virgule, print
les affichera par concaténation en utilisant un espace vide par défaut comme séparateur.
print('Vous avez ', 2017 - n, ' ans')
Par défaut, print
effectue un saut de ligne après chaque affichage mais on peut changer ce comportement par défaut en réglant le paramètre optionnel end=''
.
print('Ligne 1')
print('Ligne 2')
print('Colonne 1', end='|')
print('Colonne 2')
On peut aussi changer le paramètre de séparation par défaut sep=''
.
print('Colonne 1', 'Colonne 2', sep='|')
Pour afficher l'aide sur une fonction en python
, on peut utiliser la documentation en ligne sur https://docs.python.org/3/ ou la documentation intégrée avec la fonction help
.
help(print)
2 * 5
4 * 5
print(3 * 5)
input
¶input
récupère un texte un saisi par l'utilisateur après un prompt
et retourne la saisie sous forme de chaîne de caractères. La fonction prend comme argument optionnel le prompt
qui doit être une chaîne de caractères.Testez le programme ci-dessous.
Comment expliquez-vous la réponse de l'interpréteur ?
Comment peut-on corriger ce programme ?
date = input('Entrez votre date de naissance : ')
print('Vous avez ', 2017 - date, 'ans')
On peut importer le module/bibbliothèque math
en créant juste un point d'accès (on donne les clefs de la bibliothèque).
C'est malin, mais contraignant car il faut faire précéder chaque nom de fonction de bibliothèque du nom de la bbibliothèque.
import math
math.sqrt(4)
Pour alléger la syntaxe, on peut emprunter une fonction de la bibliothèque et l'importer dans l'espace de nom du programme (quitte à le "polluer" et à créer des conflits de nommage avec des fonctions ou variables existantes ou importées d'autres bibliothèques)
from math import sqrt
sqrt(4)
log(1)
math.log(1)
Parfois on importe toutes les fonctions de la bibliothèque (on la déménage à l'intérieur de son programme quitte à l'encombrer inutilement avec des fonctions qui ne nous serviront à rien)
from math import *
log(1)
Une solution intermédiaire est d'utiliser un alias pour la la bibliothèque.
import matplotlib.pyplot as plt
% matplotlib inline
plt.plot([0,4],[0,4])
for
ou boucle inconditionnelle¶Une boucle inconditionnelle permet de répéter un bloc d'instructions lorsqu'on connaît à l'avance le nombre de répétitions.
La situation la plus courante est :
Pour k allant de 1 à 10 répéter
Bloc d'instructions
FinPour
Sa traduction en Python
est :
# flux parent
for k in range(1, 11):
# bloc d'instructions
# retour au flux parent
On remarque l'utilisation range(1, 11)
alors qu'on attendrait range(1, 10)
.
En fait range(1, 11)
retourne un itérateur, qui va parcourir avec un incrément de 1 tous les entiers $n$ tels que $1 \leqslant n < 11$.
Il faut bien se souvenir que la borne supérieure de range(n, m)
est exclue mais il est facile de retenir que le nombre de tours de boucles est $m - n$.
Par exemple, pour calculer la somme des tous les entiers consécutifs de 100 à 200, on peut écrire :
somme = 0
for k in range(100, 201):
somme = somme + k
print("La somme est ", somme)
S'il s'agit juste de répéter n
fois un bloc d'instructions on utilise le raccourci range(n)
au lieu de range(0, n)
ou de range(1, n + 1)
.
Par exemple pour dire 100 fois "Merci", on peut écrire :
for k in range(100):
print("Merci !")
print("Ouf!")
La fonction range offre un troisième paramètre optionnel qui permet de changer l'incrément par défaut qui est 1.
Par exemple, pour pour calculer la somme des tous les entiers pairs consécutifs entre 100 et 200, on peut écrire :
sommePair = 0
for k in range(100, 201, 2):
sommePair = sommePair + k
print("La somme est ", sommePair)
Enfin, la boucle for
permet aussi de parcourir des objets itérables comme les chaînes de caractères, les listes, les fichiers etc ...
Par exemple pour afficher les caractères consécutifs de la chaîne "Bonjour" avec un caractère par ligne, on peut écrire :
chaine = "Bonjour"
for c in chaine:
print(c)
Autre exemple, pour afficher des messages d'invitation personnalisés :
for nom in ["Jean-Luc", "Emmanuel", "François", "Marine"]:
print("Salut", nom, "je t'invite à mon anniversaire samedi !")
for i in range(2,5):
print(i**2)
Une variable est l'association d'un espace de la mémoire de l'ordinateur, accessible par son nom, et d'une valeur que l'on y stocke. En Python on définit une variable par une instruction d'affectation, par exemple pour affecter la valeur 12 à la variable de nom a
on écrit :
a = 12
Un langage de programmation fixe des contraintes pour les nomes de variables. En Python les seuls caractères autorisés sont les caractères non accentués, les chiffres (sauf en première position) et le tiret bas (mais pas le tiret haut).
1var = 13 #nom incorrect
var1 = 13 #nom correct
var-1 = 14 #nom incorrect
var_1 = 14 #nom correct
Un langage de programmation n'accepte par défaut qu'un nombre fini de types de valeurs, ainsi une variable est caractérisée par son type accessible par la fonction type
et qu'on peut afficher avec la fonction print
:
type(a)
a = 3
b = 4
a + 1
(2**a + 12)/b
a = 851
a = a + 1
a
852 = a
from math import pi, floor
a, b, c = 5, 3**4, 2*pi
a + b
a*c/b
(a - b)/c
a = a + 2
a = 5
b = 7
a = b
a + 3
a, b
d = c/4
d
int(d)
round(d)
floor(d)
int(-d)
round(-d)
floor(-d)
On peut remarquer que int
tronque la partie décimale et convertit le réel approché en entier et que floor
retourne la partie entière du réel approché. Quant à round
elle arrondit à l'entier le plus proche.
x = 10
y = 15
z = x + y
x = y
y = z
print(x + y + z)
a = 100
b = 17
c = a - b
a = 2
c = a + b
(a, b, c)
a = 3
b = 4
c = a
a = b
b = c
(a, b, c)
a, b = 3, 4
a + 1
(2**a + 12)/b
(a == 2) or (a != 2 and b > 6)
"j'ai " + str(b**a) + " ans"
Une condition de test doit avoir une valeur booléenne, ce peut être le résultat :
d'une comparaison arithmétique entre deux valeurs numériques a
et b
:
Python
est a == b
Python
est a != b
Python
est a < b
ou a > b
ou a <= b
ou a >= b
d'une opération logique entre deux valeurs booléennes x
ou y
:
Python
est not x
Python
est x or y
Python
est x and y
Il existe des règles de priorité : opérateurs arithmétiques prioritaires sur les opérateurs logiques, not
prioritaire sur and
qui est prioritaire sur or
. Des parenthèses permettent de changer les priorités.
Deviner les valeurs booléennes affichées par le programme ci-dessous puis vérifier en l'exécutant.
a = 504
b = 505
print(not (a > b))
print( a == b or a < b)
print( not ( a > 0 and a < b))
print((b - a) ** 2 == 1 and a != b - 1)
print((False or not False) and not(False and True))
from math import pi, exp, floor
x = float(input('Entrez un réel x : '))
print(x**5*exp(pi*floor(x)))
n = int(input('Entre le nombre de notes : '))
total = 0
for k in range(n):
total += float(input('Entrez la note {:d} '.format(k+1)))
print("Moyenne arrondie au centième : {:02.2f}".format(total/n))
pttc = float(input('Prix TTC (TVA à 19.6 %) au centime près : \n'))
pht = pttc/1.196
tva = pttc-pht
print('Le prix HT est de {:.2f} et la TVA est de {:.2f}'.format(pht,tva))
pht = float(input('Entrez un prix HT au centime près : \n'))
taux = float(input('Entrez un taux de TVA sous la forme 19.6 : \n'))
print('Le prix TTC est de {:.2f}'.format((1+taux/100)*pht))
x = int(input('Entrez la valeur de la variable x : '))
y = int(input('Entrez la valeur de la variable y : '))
z = x
x = y
y = z
x, y
x = x + y
y = x - y
x = x - y
x, y
a = int(input('Entrez la valeur de la variable a : '))
b = int(input('Entrez la valeur de la variable b : '))
a, b = b, a
a, b
c = 1 - 1j
type(c)
c.__class__
type(1j)
dir(c)
c.real, c.imag
def module(n):
if type(n) == type(1j):
return ((n.real)**2 + (n.imag)**2)**(1/2)
else:
return None
module(c)
def argument(n):
import math
if type(n) == type(1j):
real, imag = n.real, n.imag
if imag > 0:
return math.acos(real/module(n))
else:
return -math.acos(real/module(n))
else:
return None
argument(c)
-math.pi/4
c.conjugate()
argument(c.conjugate())
n
premiers entiers de 1 à n
, la valeur entière strictement positive de n
étant saisie par l'utilisateur. On notera l'utilisation de k += 1
comme raccourci pour l'incrémentation k = k + 1
. Recopier et compléter ce programme pour qu'il calcule également le produit des n
premiers entiers consécutifs $1 \times 2 \times 3 \times \ldots \times n$. Tester pour $n = 100$, que peut-on dire de l'ordre de grandeur du produit ? n = int(input('Entrez un entier n strictement positif : '))
somme = 0
for k in range(1, n + 1):
somme += k
print(somme)
Écrire un programme qui affiche les 10 premiers multiples de 2 sous la forme :
2 x 1 = 2
2 x 2 = 4
....
2 x 10 = 20
Modifier le programme précédent pour qu'il affiche les tables de mulplications pour les 10 premiers multiples de tous les entiers compris entre 1 et 9