Ce court billet vous présente comment traiter les entrées d’un défi lorsque celles-ci sont proposées sous la forme d’un gros bloc de texte (contenant par exemple des coordonnées de points du plan).

On va s’intéresser ici au cas hypothétique où les entrées sont des points du plans, et sont décrits par leurs coordonnées cartésienne, sous cette forme :

14.6, 10.5
11.2, 11.5
20.5, -5.7
2.0, -1.4
...
3.1, 2.6

Les entrées sont donnés sous la forme d’une longue chaîne de caractères de plusieurs lignes (affichés dans une page Web).

Le traitement des entrées (en Python) se fait en trois temps :

Récupération de la chaîne de caractères

Un simple copié/collé suffit :

donnees = """\
14.6, 10.5
11.2, 11.5
20.5, -5.7
2.0, -1.4
...
3.1, 2.6"""

Notez tout de même le \ après les 3 guillemets qui évite que la première ligne soit vide. Ne copiez pas les ... bien sûr…

Découpage des lignes

On utilise la méthode split en indiquant qu’on veut couper sur les passages à la ligne (caractère \n) :

lignes = donnees.split("\n")

La variable lignes est maintenant une liste qui contient autant de chaînes qu’il y a de lignes dans les données initiales.

Par exemple :

>> print(lignes[0])
'14.6, 10.5'

Si on a des lignes vides parasites, on peut les supprimer ainsi par exemple :

lignes = [ligne.strip() for ligne in donnees.split("\n") if ligne.strip()]

Ici, on ne garde que les lignes non vides, et on supprime aussi les espaces parasites en début et fin de ligne.

Découpage des coordonnées

Pour chaque ligne, on réutilise split, sur la virgule, et on convertit les données en float :

data = []
for ligne in lignes:
    ligne_num = [float(d) for d in ligne.split(",")]
    data.append(tuple(ligne_num))

À présent, data est une liste de tuples de floats :

[(14.6, 10.5), (11.2, 11.5), (20.5, -5.7), (2.0, -1.4), (3.1, 2.6)]

Ou avec le module csv

Le module csv fait partie de la bibliothèque standard Python. Pour des entrées du type de celle envisagées ici, ce module fait aussi l’affaire, même si ça ne me semble pas particulièrement plus simple. Lien vers la doc du module csv