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)closeOuverture
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 readlinesfor line in f.readline():
process(line)
lines = f.readlines()
file est un itérable ! (the pythonic way)for line in f:
process(line)
writefor 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.