Je pense qu'il y a des moments où l'on souhaite observer des changements dans un tableau bidimensionnel, principalement chez les pros de la compétition. DP ou DP.
S'il s'agit d'un tableau à une dimension, il est assez difficile de voir si vous «imprimez» le tableau à deux dimensions de manière séquentielle. J'ai donc préparé une fonction pour observer le changement du tableau à deux dimensions.
Cliquez ici pour le produit fini ↓
from time import sleep
def print_2d_overwrite(list2d, val_width=5, sleep_sec=1.0, header=None, highlights=[]):
res_str = f'{header}\n' if header is not None else ''
for i, row in enumerate(list2d):
for j, v in enumerate(row):
v_str = str(v).rjust(val_width)
if (i,j) in highlights:
v_str = f'\033[31m{v_str}\033[0m'
res_str += f' {v_str}'
res_str += '\n'
new_line_cnt = res_str.count('\n')
res_str += f'\033[{new_line_cnt}A'
print(res_str, end='')
sleep(sleep_sec)
# --- sample ---
n = 3
list2d = [ [0]*n for _ in range(n)]
for i in range(n):
for j in range(n):
list2d[i][j] = 3**(i+j)
print_2d_overwrite(list2d, val_width=3, header=(i,j), highlights=[(i,j)])
L'état de fonctionnement est ↓
Les points sont les suivants.
time.sleep ()
)(Ajouté le 19/11/2020) Dans les commentaires, j'ai reçu un style d'écriture technique.
Article connexe a été publié hier et j'ai été surpris. L'article auquel j'ai fait référence pour l'implémentation est ici. Ces articles suffisent à expliquer, donc cette fois je n'expliquerai que les principaux points.
Vous pouvez déplacer le curseur de n lignes vers le haut avec \ 033 [nA
".
Le tableau bidimensionnel que vous souhaitez afficher est converti en la chaîne de caractères (res_str)
, le nombre de sauts de ligne \ n
qu'il contient est compté et il est ajouté à la fin de la chaîne de caractères. Il est plus facile d'utiliser la chaîne de caractères f.
N'oubliez pas end = ''
dans print
.
new_line_cnt = res_str.count('\n')
res_str += f'\033[{new_line_cnt}A'
print(res_str, end='')
Il est difficile de voir si les longueurs ne sont pas les mêmes comme ça
3 5 345
235 -48 123
1 2 3
Donc, je veux que la longueur (chiffre d'affichage) de chaque élément soit la même.
3 5 345
235 -48 123
1 2 3
Cette fois, nous allons faire cela avec str.rjust (n)
.
Alignez la chaîne de caractères à droite et remplissez les n caractères manquants avec les caractères spécifiés dans le deuxième argument (si rien n'est spécifié, remplissez les espaces).
v_str = str(v).rjust(val_width)
\ 033 [31m Chaîne de caractères dont vous voulez changer la couleur \ 033 [0m
est OK.
La couleur peut être réglée de «30 m» à «37 m». «31m» est rouge.
(Pour plus de détails, cliquez ici](https://www.nomuramath.com/kv8wr0mp/))
Dans la fonction, nous modifions la couleur de la valeur spécifiée pour les «tons clairs». Ceci est également facile si vous utilisez la chaîne de caractères f.
if (i,j) in highlights:
v_str = f'\033[31m{v_str}\033[0m'
Je l'ai ajouté à l'extrait pro de la concurrence car il peut être utilisé pour le débogage.
Je pensais que ce serait plus pratique si la partie sleep
était utilisée comme entrée de touche, mais sur un Mac, il était difficile d'utiliser le clavier
sans sudo
, alors laissez-le tel quel.
Recommended Posts