Ich denke, es gibt Zeiten, in denen Sie Änderungen in einem zweidimensionalen Array beobachten möchten, hauptsächlich bei Wettkampfprofis. DP oder DP.
Wenn es sich um ein eindimensionales Array handelt, ist es ziemlich schwierig zu erkennen, ob Sie das zweidimensionale Array nacheinander "drucken". Also habe ich eine Funktion vorbereitet, um die Änderung des zweidimensionalen Arrays zu beobachten.
Klicken Sie hier für das fertige Produkt ↓
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)])
Der Betriebszustand ist ↓
Die Punkte sind wie folgt.
time.sleep ()
)(Hinzugefügt am 19.11.2020) In den Kommentaren erhielt ich einen technischen Schreibstil.
In Verbindung stehender Artikel wurde gestern veröffentlicht und ich war überrascht. Der Artikel, auf den ich zur Implementierung verwiesen habe, ist hier. Diese Artikel reichen aus, um sie zu erklären, daher werde ich diesmal nur die wichtigsten Punkte erläutern.
Sie können den Cursor mit \ 033 [nA
" n Zeilen nach oben bewegen.
Das zweidimensionale Array, das Sie anzeigen möchten, wird in die Zeichenfolge "(res_str)" konvertiert, die Anzahl der darin enthaltenen Zeilenumbrüche "\ n" wird gezählt und am Ende der Zeichenfolge hinzugefügt. Es ist einfacher, die Zeichenfolge f zu verwenden.
Vergessen Sie nicht "end =" in "print".
new_line_cnt = res_str.count('\n')
res_str += f'\033[{new_line_cnt}A'
print(res_str, end='')
Es ist schwer zu erkennen, ob die Längen nicht gleich sind
3 5 345
235 -48 123
1 2 3
Daher möchte ich die Länge (Anzeigeziffer) jedes Elements gleich machen.
3 5 345
235 -48 123
1 2 3
Dieses Mal machen wir das mit str.rjust (n)
.
Die Zeichenfolge ist rechtsbündig und der Teil, der für n Zeichen nicht ausreicht, wird mit den im zweiten Argument angegebenen Zeichen gefüllt (wenn nichts angegeben ist, wird er mit Leerzeichen gefüllt).
v_str = str(v).rjust(val_width)
\ 033 [31m Zeichenfolge, deren Farbe Sie ändern möchten \ 033 [0m
ist OK.
Die Farbe kann von 30 m bis 37 m eingestellt werden. 31m
ist rot.
(Für Details klicken Sie hier](https://www.nomuramath.com/kv8wr0mp/))
In der Funktion ändern wir die Farbe des für "Highlights" angegebenen Werts. Dies ist auch einfach, wenn Sie die Zeichenfolge f verwenden.
if (i,j) in highlights:
v_str = f'\033[31m{v_str}\033[0m'
Ich habe es dem Competition Pro-Snippet hinzugefügt, da es zum Debuggen verwendet werden kann. Ich dachte, es wäre bequemer, wenn der "Schlaf" -Teil als Tasteneingabe verwendet würde, aber auf einem Mac war es mühsam, die "Tastatur" ohne "Sudo" zu verwenden. Lassen Sie sie also so, wie sie ist.
Recommended Posts