我想在左邊添加一個紅色的 ABCD,因為它在頂部......我有一個大問題,因為一切都是在回圈中完成的
就像我現在一樣

正如我想要的那樣

import sys
INF = sys.maxsize
def floydWarshall(graph):
n = len(graph)
dist = [[] for i in range(n)]
for i in range(n):
for j in range(n):
dist[i].append(graph[i][j])
for k in range(n):
for i in range(n):
for j in range(n):
dist[i][j] = min(dist[i][j], dist[i][k] dist[k][j])
print('Najkrotszy dystans pomiedzy kazda para')
print("\033[91m A B C D\033[0m")
for i in range(n):
for j in range(n):
if dist[i][j] == INF:
print("%7s" % ("INF"), end=' ')
else:
print("%7s" % (dist[i][j]), end=' ')
print()
graph = [[0, 5, INF, 10] , [INF, 0, 3, INF], [2, INF, 0, 1], [5, 3, 4, 0]]
floydWarshall(graph)
uj5u.com熱心網友回復:
例如,您可以引入一個row_names帶有行名稱的串列:
row_names = ["A", "B", "C", "D"]
然后在標題列印后的第一個 for 回圈之后,使用索引i來獲得正確的row_name:
# ...
for i in range(n):
print("\033[91m{0}\033[0m".format(row_names[i]), end= ' ')
for j in range(n):
# ...
如果你使用 Python >= 3.6 你可以用F-Strings替換 format 函式:
print(f"\033[91m{row_names[i]}\033[0m", end= ' ')
編輯:或如@kosciej16 建議的那樣,使用chr(ord("A") i)代替row_names:
ord()回傳字母“A”的 ASCII 碼 (65)- 添加索引
i到它 - 并
chr()隨后將ASCII數回一個字符
(例如“B”將是ord("A") 1= 66 -> chr(66)-> “B”)
輸出:
Najkrotszy dystans pomiedzy kazda para
A 0 5 8 9
B 5 0 3 4
C 2 4 0 1
D 5 3 4 0
uj5u.com熱心網友回復:
您可以通過執行以下操作來大大簡化事情:
for i in range(n):
row_header = chr(ord("A") i)
preformatted_values = ("INF" if v == INF else v for v in dist[i])
formatted_values = [f"\033[91m{v}\033[0m" for v in preformatted_values]
row = "/t".join(formatted_values)
print(f"{row_header} {row}")
這不會處理您在row字串中所做的所有格式化,但您也可以使用類似format()而不是print()為了在每個元素上進行格式化,然后使用上面顯示的join()而不是手動遍歷您的行。
另一種選擇是使用一個老牌庫,如tabulate。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/380270.html
