Exercice 1.2 du Poly
a) Arithmétique de base¶
3 + 25 * 2
Python
respecte les ordres de priorité sur les opérations arithmétiques : inutile de de parenthéser en 3 + (25 * 2)
23/4
La division entre entiers est par défaut la division euclidienne.
Rappel : pour la divison réelle, placer un point décimal sur l'un des deux entiers pour le déclarer comme un flottant :
23./4 , 23/4.
23.//4 # Le quotient de la division euclidienne
23 % 4
On obtient le reste de la division euclidienne. En effet : $23 = 5 \times 4 + 3$
2**100
C'est $2^{100}$ : on obtient un nombre à 31 chiffres (j'ai compté !) qui se termine par un L
: abréviation de large integer
(grand entier).
Si on veut demander à Python
le nombre de chiffres, on peut p.ex :
- Convertir ce nombre en chaîne de caractères avec
str()
- Calculer la longueur de la chaîne avec
len()
.
Ce qui donne :
len(str(2**100))
Problème : m'affiche-t-il la valeur approchée ou la valeur exacte ?
Question subsidiaire : combien de chiffres y a-t-il dans l'écriture de $2^{100}$ ?
Réponse : Les nombres à $n$ chiffres sont les nombres $x$ vérifiant l'encadrement suivant : \[10^{n-1} \le x < 10^n. \]
Ainsi on cherche l'entier $n$ tel que : \[ 10^{n-1} \le 2^{100} < 10^n. \]
En passant aux $\log_{10}$ : \[n- 1 \le 100 \log_{10} (2) < n. \]
En ajoutant $1$ membre à membre : \[ n \le 100 \log_{10} (2) +1 < n+1. \]
Mais je ne sais pas combien vaut $100 \log_{10} (2)$. Il me faudrait une calculette. Attends ! J'ai Pyhton
qui est fait pour ça. Demandons donc à Python
combien vaut $ 100 \log_{10} (2)$ :
from math import log10
100*log10(2)
Finalement, $n$ est l'entier tel que $n \le 31,1 < n+1$.
Conclusion : $2^{100}$ a 31 chiffres.
Remarque (exo de spé math) : Vérifier que $2^{100}$ se termine par un $6$.
Comme Python
nous a dit : $2^{100}=$1 267 650 600 228 229 401 496 703 205 376
, on peut penser qu'il nous donne la valeur exacte de $2^{100}$
b) Représentation des flottants¶
2.6-3.3*2.0
On devrait trouver -4
. Attention aux problèmes de représentation des flottants : dans la machine, les nombres ne sont pas codés en base 10, mais en base 2 (en binaire).
2.6-3.3*2.0 == -4.0 # je demande à Python si ces deux nombres sont égaux.
Python considère ces deux flottants comme distincts !
c) Chaînes de caractères¶
"bon" + "jour"
Les chaînes de caractères sont délimitées par des guillemets. Le +
n'est pas l'addition ici mais la concaténation de deux chaînes.
"J'en veux " + 3
Problème de type : Le +
coordonne obligatoirement deux objets de même type. Or ici le premier est une chaîne et le second un entier. Si on veut rectifier :
"J'en veux " + "3" # Correction
"Dis \"bonjour\". "
Rappel : le backslash a servi à échapper les guillemets de leur rôle de délimiteur de chaînes de caractères. Il peuvent ainsi jouer leur rôle naturel de guillemets.
"Ca marche " + pas
ici, pas
est compris comme le nom d'une variable (c'est un appel de variable). Or on n'a jamais créé de variable pas
"Ca marche " + "pas" # Correction
"ha " * 3 + "!"
Python
concatène deux chaînes :
- la chaîne
"!"
et la chaîne"ha " * 3
- la chaîne
"ha " * 3
est la chaîne"ha "
concaténée 3 fois avec elle-même.
"dom" * "mage"
On ne peut pas multiplier deux chaînes de caractères : on sait seulement les concaténer par un +
ou les répliquer par un *
mais dans ce dernier cas, Python
aurait dû trouver un entier au lieu de la chaîne de caractères "mage"
.
d) Expressions logiques¶
1 + 1 = 2
Le symbole =
sert à assigner une valeur à une variable. En l'occurrence, c'est assigner la valeur 2
à une variable qu'on appelle : 1 + 1
. Ce nom est interdit.
Rappel. Dans une initialisation/affectation de variables, le nom de la variable est toujours à gauche du =
1 + 1 == 2 # On demande à Python si il est vrai que 1+1 = 2 (c'est un test logique et pas une affectation)
2 + 2 == 4 # C'est encore un test logique. Le résultat d'un test logique est toujours : soit vrai soit faux
2 + 2 <= 3
La réponse est faux
: on sait que c'est un test logique. Le symbole <=
siginifie : $\le$
0 != 1 and 7 < 5
Le symbole !=
signifie $\neq$. L'instruction teste si il est vrai que $0 \neq 1$ et $7<5$
0 == 1 or 7 >= 5 # le symbole >= signfie supérieur ou égal
not (3.0 == 3)
not
signifie : la négation de ou le contraire de. D'après le principe logique du tiers exclu, une assertion et son contraire ne peuvent être simultanément vrai. Comme toute assertion ne peut être que vrai ou fausse, la négation d'une assertion vraie est obligatoirement fausse.
True or uohstuihsrt
Le mot true
n'est pas reconnu par Python
. Comme un ou
est vrai dès que l'une de ses options est vraie; Python
(qui est paresseux) s'arrête de lire la suite puisqu'il a rencontré un vrai
uohstuihsrt or True
En revanche,dans ce dernier cas, Python
commence par analyser le premier terme uohstuihsrt
. Cette fois, Python
est coincé car une variable avec un tel nom (à coucher dehors d'ailleurs) n'a jamais été créé.
e) Conversion de types¶
int(14.3)
C'est la troncature entière. À ne pas confondre avec la partie entière.
int(-14.3)
float(12)
Convertit un entier en floattant (changement de type)
str(147)
Convertit un entier en chaîne de caractères.