TryAlgo

Compte rendu de l'atelier n° 1

Table des matières

Généralités

Activités

Ressources

Généralités

Prise en main

Suivre les instructions ici

Concernant les itérateurs qu’on retrouve dans les boucles :

range(3)  # [0, 1, 2]

range(2, 6)  # [2, 3, 4, 5]

Lecture d'un fichier

with open('fichier.txt') as f:
    for line in f:
        # Pour retirer le retour de ligne final

        line = line.strip()

Ou bien, pour directement obtenir la liste des lignes :

dico = open('fichier.txt', encoding='utf-8').read().splitlines()

Écriture dans un fichier

Par exemple, pour dessiner un rectangle 5 × 3 d’étoiles :

# 'w' pour 'write'

with open('fichier.txt', 'w') as f:
    for i in range(5):
        f.write('*' * 3 + '\n')
        # '\n' : caractère de fin de ligne

Format des chaînes de caractères

print("Je m'appelle", prenom, "et j'ai", age, "ans")
# est équivalent à

print("Je m'appelle %s et j'ai %d ans" % (prenom, age))
# 's' pour 'string' et 'd' pour 'digits', un entier

Sous-listes

Testez les lignes suivantes :

l = liste(1, 101)  # Nombres de 1 à 100

print(l[5])
print(l[2:7])
print(l[:4])
print(l[-3:])
print(l[::3])
print(l[5:45:4])

Lorsqu’on écrit l[n1:n2:n3] :

Parcourir une liste

Ces deux codes affichent ligne après ligne les caractères d’une chaîne.

# i parcourt [0, 1, …, len(chaine) - 1]

for i in range(len(chaine)):
    print(chaine[i])
# est équivalent à

for lettre in chaine:
    print(lettre)

Le deuxième a l’avantage d’être plus lisible mais on perd l’information de position du caractère courant dans la chaîne.

Activités

Calcul d'intérêts

À partir de :

taux = 5
somme = 27
nb_mois = 10

Écrire une fonction qui affiche à chaque mois la somme majorée par le taux d’intérêts.

for i in range(1, nb_mois + 1):
    somme = somme * (1 + taux / 100)
    print("Au mois", i, "j'ai", somme)

Si on crée la fonction suivante, qui prend en argument les paramètres somme et taux :

def augmentation(somme, taux):
    return somme * (1 + taux / 100)
# on peut remplacer la ligne du code précédent

somme = somme * (1 + taux / 100)
# par

somme = augmentation(somme, taux)

Plus lisible, et notamment pratique lorsque la fonction est sur plusieurs lignes et est réutilisée à plusieurs endroits dans le code. Don’t repeat yourself.

Liste des mots de la langue française

Suivre les instructions ici

Sur cette liste de 336 531 mots on pouvait par exemple écrire une fonction qui renvoie le nombre de mots commençant par une certaine lettre donnée en argument :

def commence_par(lettre):
    nb_mots = 0
    for mot in dico:
        if mot[0] == lettre:
            nb_mots += 1
    return nb_mots

On peut ensuite appeler commence_par('c'), par exemple.

Statistiques sur le Top 250 IMDb (au format JSON)

Suivre les instructions ici

Pour déterminer par exemple les dix années où sont sortis le plus de films dans le Top 250, la structure Counter est très utile, grâce à sa méthode most_common déjà programmée.

from collections import Counter

nb_occ = Counter()
for film in top:
    nb_occ[film["year"]] += 1
for annee, valeur in nb_occ.most_common(10):
    print('En', annee, 'il y a eu', valeur, 'films dans le top 250')

Utilisation d'une API de météo

Certains sites Web proposent un service appelé API (application programming interface) permettant d’obtenir des réponses à des requêtes de type :

(pour afficher plus joliment les données obtenues, essayez jsonprettyprint.com)

Seulement, le service nous fournit trop d’informations pour notre utilisation. Pour obtenir la température d’une ville, il faut donc :

from urllib.request import urlopen
from urllib.parse import urlencode
import json

def get_data(ville):
    return json.loads(urlopen('http://api.openweathermap.org/data/2.5/weather?%s' % urlencode({'q': ville})).read().decode('utf-8'))

def k2c(t):  # Conversion °K -> °C

    return t - 273.15

def afficher_meteo(ville):
    data = get_data(ville)
    celsius = k2c(data['main']['temp'])
    print('À', ville, 'il fait', round(celsius, 2), '°C')

afficher_meteo('La Roque d\'Anthéron')

Jeu des boîtes

Règles du jeu

Parcours du graphe de Paris

(Bientôt.)

Commentaires