我正在嘗試在 for 回圈中從串列中列印很多字串。它作業正常,但它太慢了,有什么辦法讓它更快。
import time
import os
board = {
1:[' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '],
2:[' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '],
3:[' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '],
4:[' ','@',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '],
5:['#','#','#','#','#','#','#','#','#','#','#','#'],
}
while True:
os.system('clear')
v = 1
while v < 6:
or i in board[v]:
print(i, end = ' ')
v = 1
print('')
最后它作業正常,但列印速度太慢(它使文本閃爍)。有什么辦法可以加快速度使其看起來一致嗎?
uj5u.com熱心網友回復:
在游戲中重繪 螢屏有一個完整的故事。這個想法不是清除幀之間的螢屏。
import time
import os
import atexit
def clear():
print ("{}[2J{}[;H".format(chr(27), chr(27)), end="")
return
def move_to(row,col):
print("{}[{};{}H".format(chr(27), row, col), end="")
return
def hide_cursor():
print('{}[?25l'.format(chr(27)), end="")
return
def show_cursor():
print('{}[?25h'.format(chr(27)), end="")
return
atexit.register(show_cursor)
board = {
1:[' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '],
2:[' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '],
3:[' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '],
4:[' ','@',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '],
5:['#','#','#','#','#','#','#','#','#','#','#','#'],
}
clear()
hide_cursor()
while True:
move_to(0,0)
v = 1
while v < 6:
for i in board[v]:
print(i, end = ' ')
v = 1
print('')
show_cursor()
那么您只能重繪 已更改的螢屏部分。
這僅適用于終端支持ANSI Escape 序列的情況,但這似乎沒問題,因為您已經使用了“clear”。
uj5u.com熱心網友回復:
C 在使用像你這樣的小矩陣時也會發生文本閃爍(我有同樣的問題here)。
我不認為這會優化你的代碼,但我建議你在這個范圍內使用 a listover a :dict
board = [0,
[' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '],
[' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '],
[' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '],
[' ','@',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '],
['#','#','#','#','#','#','#','#','#','#','#','#']
]
這將做同樣的事情,dict在這種情況下 a 是無用的,因為您使用ints 作為鍵。
uj5u.com熱心網友回復:
你試過理解嗎?
board = {
1: [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
2: [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
3: [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
4: [' ', '@', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
5: ['#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#'],
}
[[print(i, end=' ') for i in board[v 1]] for v in range(len(board))]
uj5u.com熱心網友回復:
如果板子狀態真的是這樣管理的,你可以逐行列印而不是逐字符列印:
for row in board:
print(''.join(row))
或者計算整個塊并在清除后立即發出單個列印命令,并且僅當它實際更改時。
def format_board(board):
return '\n'.join(''.join(row) for row in board)
while True:
if format_board(board) != board_lastchange_string:
os.system('clear')
print(format_board(board))
# if you update the board somewhere, save
# `format_board(board)` to `board_lastchange_string`
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/459257.html
