| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
| nsi:tds:systeme_affichage [2022/01/16 19:45] – l goupillwiki | nsi:tds:systeme_affichage [2024/01/25 14:03] (Version actuelle) – goupillwiki |
|---|
| Pour vos essais, vous pourrez utiliser le fichier {{ :nsi:tds:alphabet.txt |}} mais pensez à en créer d'autres ! | Pour vos essais, vous pourrez utiliser le fichier {{ :nsi:tds:alphabet.txt |}} mais pensez à en créer d'autres ! |
| |
| <WRAP tip> | |
| ===== Un peu d'aide ===== | ===== Un peu d'aide ===== |
| | |
| | === Ouvrir le fichier === |
| | |
| | <code python> |
| | f = open(filename, 'r', encoding='utf8') |
| | content = f.read() |
| | f.close() |
| | lines = content.split('\n') |
| | </code> |
| | |
| | Suite à ce code, ''lines'' contient un tableau où chaque item est une ligne du fichier. |
| | |
| | <code> |
| | [' ■■■ ', '■ ■', '■■■■■', '■ ■', '■ ■', '■■■■ ', '■ ■', ..., ''] |
| | </code> |
| | |
| | Vous remarquez que la dernière ligne est vide. Cela peut arriver mais n'est pas certain. Cela dépend de comment à été écrit le fichier. On peut s'assurer que la dernière ligne n'est pas vide en supprimant toute dernière ligne qui serait vide : |
| | |
| | <code python> |
| | while lines[-1] == '': |
| | lines.pop() |
| | </code> |
| | |
| | La fonction `pop`a pour effet d'enlever le dernier élément. |
| | |
| | === Accéder à une ligne === |
| | |
| | Maintenant que nous disposons de ''lines'', nous pouvons facilement consulter le contenu d'une ligne. |
| | |
| | <code python> |
| | >>> lines[2] |
| | '■■■■■' |
| | </code> |
| | |
| | === Parcours caractères / lignes === |
| |
| Supposons que l'on veuille afficher ''%%"BONJOUR"%%''. On va devoir à un moment où à un autre récupérer l'affichage pour ''%%"B"%%'', pour ''%%"O"%%'', etc. | Supposons que l'on veuille afficher ''%%"BONJOUR"%%''. On va devoir à un moment où à un autre récupérer l'affichage pour ''%%"B"%%'', pour ''%%"O"%%'', etc. |
| |
| L'affichage de ''%%"B"%%'' (et des autres) se compose de ''n = 5'' lignes -- //dans l'exemple, cela pourrait être autre chose que 5 !.// | L'affichage de ''%%"B"%%'' (et des autres) se compose de ''n = 5'' lignes -- //C'est un exemple, cela pourrait être autre chose que 5 !.// |
| |
| Donc première question : comment obtenir les lignes de l'affichage de ''%%"B"%%'' (par exemple) ? Et même mieux : comment obtenir chaque ligne de l'affichage de tel caractère (par exemple, la ligne 2 de B) ? | Donc première question : comment obtenir les lignes de l'affichage de ''%%"B"%%'' (par exemple) ? Et même mieux : comment obtenir chaque ligne de l'affichage de tel caractère (par exemple, la ligne 2 de B) ? |
| * Le caractère doit être un caractère dans A--Z. S'il n'y est pas on considère que l'on demande le joker. Il sera utile d'associer un indice à chaque caractère : A -> 0, B -> 1, ... Z -> 25 et pour les autres -> 26 (joker) | * Le caractère doit être un caractère dans A--Z. S'il n'y est pas on considère que l'on demande le joker. Il sera utile d'associer un indice à chaque caractère : A -> 0, B -> 1, ... Z -> 25 et pour les autres -> 26 (joker) |
| * Chaque caractère compte ''n'' lignes et l'alphabet a 27 caractères. ''alphabet'' compte donc exactement ''27 * n'' lignes et il est donc possible de déterminer ''n'' connaissant ''alphabet''. | * Chaque caractère compte ''n'' lignes et l'alphabet a 27 caractères. ''alphabet'' compte donc exactement ''27 * n'' lignes et il est donc possible de déterminer ''n'' connaissant ''alphabet''. |
| * Évidemment, ''line'' devrait toujours vérifier ''0 <= line < n'' | * Évidemment, ''line'' devrait toujours vérifier ''%%0 <= line < n%%'' |
| * Pour faire la fonction il faut raisonner ainsi : je demande la ligne 2 (''line == 2'') pour le caractère ''%%"B"%%'' (donc associé à un indice ''1'') et dans mon exemple je peux déterminer que ''n = 5''. quel est le numéro de la ligne demandée dans ''alphabet'' ? C'est la ligne 7, la fonction devrait renvoyer ''alphabet[7]'' dans ce cas.\\ Par quel calcul trouver ce 7 ? | * Pour faire la fonction il faut raisonner ainsi : je demande la ligne 2 (''line == 2'') pour le caractère ''%%"B"%%'' (donc associé à un indice ''1'') et dans mon exemple je peux déterminer que ''n = 5''. quel est le numéro de la ligne demandée dans ''alphabet'' ? C'est la ligne 7, la fonction devrait renvoyer ''alphabet[7]'' dans ce cas.\\ Par quel calcul trouver ce 7 ? |
| |
| Dernière chose, pour afficher le message (par exemple ''%%"BONJOUR"%%'', il faut énumérer les caractères du message et les lignes d'affichage (par exemple ici 5 lignes puisque chaque caractère a 5 pixels de haut). Comment articuler ces deux énumérations ? | Dernière chose, pour afficher le message (par exemple ''%%"BONJOUR"%%'', il faut énumérer les caractères du message et les lignes d'affichage (par exemple ici 5 lignes puisque chaque caractère a 5 pixels de haut). Comment articuler ces deux énumérations ? |
| </WRAP> | |
| | === Fichier de sortie === |
| | |
| | Supposons que vous ayez obtenu un résultat formé des 5 lignes de pixels pour écrire BONJOUR, dans une variable ''result''. |
| | |
| | Il faut encore mettre les lignes ensemble et écrire dans un fichier : |
| | |
| | <code python> |
| | content = '\n'.join(result) # recolle les lignes |
| | f = open(filename, 'w', encoding='utf8') |
| | f.write(content) |
| | f.close() |