if condition :
BLOC INSTRUCTIONS 1 # si la condition est vérifiée
En python c'est la mise en forme du programme qui détermine son exécution. Pour déclarer des blocs d'instructions, on les décale. On dit que les blocs sont indentés.
Le terme condition désigne une condition booléenne, c’est à dire:
On appelle prédicat ou assertion la condition qui se trouve entre le if et les deux points
Définition : Une assertion est une phrase à laquelle on peut attribuer une valeur de vérité, c'est à dire qui est soit vraie soit fausse.
Exemple 1: Écrire une suite d'instructions permettant de déterminer si un nombre est pair
x = 17
if x % 2 == 0: # Le symbole % est appelé modulo et x % 2 renvoie le reste de la division euclidienne
print("Le nombre est pair")
Détaillons l'exemple 1 pour bien comprendre ce qu'il se passe
Exemple 2: Contrôler un mot de passe
# -*- coding: utf-8 -*-
mdp = u"motdepasse"
user_mdp = raw_input(u"Entrez votre mot de passe: ")
if mdp == user_mdp:
print(u"ok")
if condition :
BLOC INSTRUCTIONS 1 # si la condition est vérifiée
else:
BLOC INSTRUCTIONS 2 # si la condition n'est pas vérifiée
Il n'y a pas d'assertion à la suite de else
Exemple 3: Comment indiquer à l'utilisateur qu'il a fait une erreur ?
# -*- coding: utf-8 -*-
mdp = u"motdepasse"
user_mdp = raw_input(u"Entrez votre mot de passe: ")
if mdp == user_mdp:
print(u"ok")
else:
print(u"mot de passe oublié")
exemple 4: Écrire une suite d'instructions permettant d'obtenir la valeur absolue d'un nombre \(x \in \mathbb{R}\)
Soit \(x \in \mathbb{R}\), on appelle valeur absolue de \(x\) et on note \(|x|\) le réel \(max(x, -x)\)
Ainsi \(|x|=x\) si \(x \geq 0\), \(|x| = -x\) si \(x \leq 0\)
x=-3.14
abs_x = max(x, -x)
print abs_x
if x >= 0:
abs_x = x
else:
abs_x = -x
print abs_x
Avec les opérateurs booléens :
Exemple 5: Comment contrôler à la fois le mot de passe et l'identifiant ?
id = u"cpge"
mdp = u"cAmIlLe-JuLlIaN_2016" #un bon mot de passe comporte des majuscules des minuscules des chiffres et des caratères spéciaux
user_id = raw_input(u"Identifiant ? ")
user_mdp = raw_input(u"Mot de passe ? ")
if id == user_id and mdp == user_mdp:
print(u"ok")
else:
print(u"problème id ou mdp")
Rédiger un algorithme permettant de déterminer le maximum de trois nombres
Un choix possible seulement parmi un ensemble de possibilités
if condition 1:
BLOC INSTRUCTIONS 1 # si la condition 1 est vérifiée
elif condition 2:
BLOC INSTRUCTIONS 2 # si la condition 2 est vérifiée
else:
BLOC INSTRUCTIONS 3 # si aucune des conditions n'est vérifiées
Exemple 6: Écrire une suite d'instructions permettant d'afficher acide, basique ou neutre en fonction de la valeur de la concentration en ions \(H_3O^+\) (appelé ion oxonium) d'une solution:
import math
c = float(raw_input(u"Concentration en ion H3O+ = ")) #transtypage
pH = -math.log10(c) #Attention log=ln
print pH
if pH < 7:
print(u"Acide")
elif pH == 7:
print(u"Neutre")
else:
print(u"Basique")
Écrire une suite d'instructions permettant de déterminer si une année saisie par l'utilisateur est bissextile.
Une année est dite bissextile si c'est un multiple de 4, sauf si c'est un multiple de 100. Mais elle est quand même considérée comme bissextile si c'est un multiple de 400.
Un distributeur de banque dispose de billets de 10, 20, 50, 100, 200 et 500 euros. Écrire un programme qui demande la somme désirée et propose une répartition avec le moins de billets possible. Contrairement à l'exercice du TD1 les billets affectés d'un coefficient zéro ne sont pas affichés
Écrire une suite d'instructions qui renvoie vrai si une chaîne de caractères représente un nombre et faux sinon.
Ecrire une suite d'instructions qui calcule l’heure une minute après celle stockées sous la forme de deux variables :
heure, minute = 10, 20
Exemples :
Ne pas oublier le cas de minuit.
#maximum de trois nombres
a, b, c = 10, 10, 10
if a > b:
if a > c:
max = a
else:
max = c
else:
if b > c:
max = b
else:
max = c
print max
#maximum de trois nombre avec conjonction
a, b, c = 24, 24, 25
if a > b and a > c:
max = a
elif a > b and a < c:
max = c
elif b > c:
max = b
else:
max = c
print max
Une meilleur stratégie consiste à diviser pour régner, on décompose en deux problèmes distincts, on cherche d'abord le max de a et b puis on compare avec c
a, b, c = 23, 2, 25
if a > b:
max = a
else:
max = b
if c > max:
max = c
print max
#Année bissextile
'''
2015 n'est pas bissextile. L'an 2008 était bissextile suivant la première règle (divisible par 4).
L'an 1900 n'était pas bissextile, car divisible par 100 mais non divisible par 400.
L'an 2000 était bissextile car divisible par 400.
'''
bissextile = False
an = int(raw_input(u"Entrez une année : "))
if (an % 400) == 0:
bissextile = True
elif (an % 100) == 0:
bissextile = False
elif (an % 4) == 0:
bissextile = True
else:
bissextile = False
print bissextile
#Année bissextile optimisé
bissextile = False
an = int(raw_input(u"Entrez une année : "))
if (an % 400) == 0 or ((an % 100 != 0) and (an % 4 == 0 )):
bissextile = True
else:
bissextile = False
print bissextile
bissextile = False
an = int(raw_input(u"Entrez une année : "))
if (an % 4 == 0 ) and (an % 100 != 0) or (an % 400) == 0:
bissextile = True
else:
bissextile = False
print bissextile
Un algorithme glouton (greedy algorithm en anglais, parfois appelé aussi algorithme gourmand) est un algorithme qui suit le principe de faire, étape par étape, un choix optimum local. Dans certains cas cette approche permet d'arriver à un optimum global
#La monnaie SVP
somme = int(raw_input(u"Combien désirez-vous ?"))
n = somme / 500
if n > 0:
somme = somme - n * 500
print n,"billet(s) de 500"
n = somme / 200
if n > 0:
somme = somme - n * 200
print n,"billet(s) de 200"
n = somme / 100
if n > 0:
somme = somme - n * 100
print n,"billet(s) de 100"
n = somme / 50
if n > 0:
somme = somme - n * 50
print n,"billet(s) de 50"
n = somme / 20
if n > 0:
somme = somme - n * 20
print n,"billet(s) de 20"
n = somme / 10
if n > 0:
somme = somme - n * 10
print n,"billet(s) de 10"
#Parité d'un nombre
nombre = raw_input(u"Donnez un nombre entier = ")
if nombre.isdigit():
if int(nombre)%2 == 0: #transtypage String to int
print u"Nombre pair"
else:
print u"Nombre impair"
else:
print "Ce n'est pas un nombre entier"
#La chaîne est-elle un nombre ?
a = "233.897"
b = a.replace(".", "", 1)
if b.isdigit():
print "transtypage possible"
print "entier:", int(float(a)), "flottant:",float(a)
else:
print "Ce n'est pas un nombre"
import time
print time.strftime("Version du "+'%d/%m/%y %H:%M',time.localtime())
Christophe Casseau mail : isncaju@gmail.com