bool
et valeurs booléennes¶Nous avons vu qu'il existe un type bool
True
et False
sont les deux valeurs possibles de ce type.
Les comparaisons et les opérations booléennes renvoient des valeurs de type bool
"Hilary Clinton" == "Donald Trump"
False
2.0 < 2.1 and 2.0 > 1.9
True
Les valeurs ci-dessous sont toutes évaluées par l'interpréteur comme ayant la valeur booléenne false
False
None
0
""
()
[]
{}
Tout le reste1 sera évalué comme true
Vous pouvez écrire :
>>> if var: ou while list:
plutôt que :
(C'est même jugé plus pythonique (pythonien ?))
>>> if var != "": ou while list != []:
1 Sauf les objets dont vous avez construit les classes. Voir les diapos à venir sur Classes et objets.
Les assertions (assert condition
) permettent de vérifier qu'une condition est remplie avant de poursuivre le programme
assert
est utilisé à des fins de débogage.
var = 2
assert 1 <= var <= 10
est équivalent à :
if not 1 <= var <= 10:
raise AssertionError
# plus exactement
if __debug__:
if not 1 <= var <= 10: raise AssertionError
for
¶for
permet d'appliquer à chaque élément d'une liste les instructions du bloc qui suitwords = ['tout', 'ici', 'chante', 'la', 'vie', 'de', 'naguère']
for word in words:
up_word = word.upper()
print(up_word)
Plus précisément for
s'applique sur les séquences (list
, str
, tuple
) et plus généralement sur les iterables voir doc
Les iterables sont des objets issus de classes qui implémentent la méthode __iter__()
et/ou __getitem__()
Essayer help(str)
ou help(dict)
continue
permet de passer à l'itération suivantefor word in words:
if word == 'la':
continue
print(word, end=" ")
tout ici chante vie de naguère
break
permet de quitter la boucle en coursfor word in words:
if word == 'la':
break
print(word, end=" ")
tout ici chante
zip
permet de boucler sur plusieurs séquenceszip
s'arrête à la longueur la plus petitenoms = ['einstein', 'planck', 'turing', 'curie', 'bohr', 'shannon']
facs = ['inalco', 'p3', 'p10', 'inalco', 'p3', 'inalco']
parcours = ['pro', 'r&d', 'r&d', 'pro', 'pro', 'r&d']
for nom, fac, parcours in zip(noms, facs, parcours):
print("{} est inscrit en {} à {}".format(nom, parcours, fac))
einstein est inscrit en pro à inalco planck est inscrit en r&d à p3 turing est inscrit en r&d à p10 curie est inscrit en pro à inalco bohr est inscrit en pro à p3 shannon est inscrit en r&d à inalco
Pour travailler avec les fichiers on doit procéder à trois opérations :
open
(renvoie IOError
en cas d'échec)read
ou readline
ou readlines
) et/ou écriture (write
)close
Ouverture
open
est une fonction qui accepte de nombreux arguments : RTFMopen
renvoie un objet de type file
>>> #f = open(filename, mode)
>>> f = open('nom_fichier', 'w')
Les modes sont :
a : concaténation (append)
b : mode binaire
La documentation de Python conseille cette façon de faire
>>> with open('mon_fichier', 'r') as f:
... read_data = f.read()
L'utilisation du mot clé with
garantit la fermeture du fichier même si une exception est soulevée
Plusieurs options pour la lecture
read()
sans argument retourne le contenu du fichier# Les n premiers octets
3_chars = f.read(3)
# Le reste du fichier
content = f.read()
readline
et readlines
for line in f.readline():
process(line)
lines = f.readlines()
file
est un itérable ! (the pythonic way)for line in f:
process(line)
write
for item in list:
f.write(item)
fonction close
f.close()
En règle générale veillez à toujours fermer les objets fichiers
En mode écriture oublier de fermer un fichier peut réserver des mauvaises surprises
sys.stdin
, sys.stdout
et sys.stderr
sont des objets de type file
Comme les listes et les tuples, les chaînes sont des sequences, on peut leur appliquer les opérations suivantes propres à la catégorie d'objets sequence :
var = "bonjour"
len(var)
7
max(var)
'u'
var[2]
'n'
var[-1]
'r'
var[0:3] # 3 premiers éléments
'bon'
var[-3:] # 3 derniers éléments
'our'
if 'u' in var:
print("Il y a un u dans {}".format(var))
Il y a un u dans bonjour
var = "Le Grand Quotidien National"
var.lower()
'le grand quotidien national'
var = "Le Grand Quotidien National"
var = var.lower()
var.replace('na', 'bo')
'le grand quotidien botiobol'
strip, rstrip
strip
appelé sans arguments supprimme le ou les espaces en tête et en fin de chaîne
rstrip
fait la même chose en fin de chaîne uniquement
lstrip
idem en début de chaîne
var = "Lover you should've come over "
var.rstrip()
"Lover you should've come over"
split
split
découpe une chaîne en fonction du séparateur passé en argument et renvoie une liste
var = "The concept of global warming was created by and for the Chinese in order to make U.S. manufacturing non-competitive."
words = var.split(' ')
words[:5]
['The', 'concept', 'of', 'global', 'warming']
join
join
est l'inverse de split
, il permet de joindre les éléments d'une liste de chaînes pour former une seule chaîne de caractères
list = ['Quand', 'le', 'ciel', 'bas', 'et', 'lourd']
" ".join(list)
'Quand le ciel bas et lourd'
« There should be one-- and preferably only one --obvious way to do it. » Zen of Python
Sauf que :
name = ""
coffee_price = 0.6
print("Tiens salut " + name + ". Tu aurais pas " + str(coffee_price*2) + " euros pour 2 cafés ?")
Tiens salut . T'aurais pas 1.2 euros pour 2 cafés ?
format()
depuis python3 (et python2.7)print("Tiens salut {}. T'aurais pas {} euros pour 2 cafés ?".format(name, coffee_price*2))
Tiens salut . T'aurais pas 1.2 euros pour 2 cafés ?
print(f"Tiens salut {name}. T'aurais pas {coffee_price*2} pour 2 cafés ?")
Tiens salut . T'aurais pas 1.2 pour 2 cafés ?
Vous rendrez des scripts Python3. Avec des commentaires c'est mieux.