iT邦幫忙

0

python 「\b」左刪字元

  • 分享至 

  • xImage

讓滑鼠隨時標記當前座標。
但是迴圈多了一個數值,\b刪除左邊字元,刪不乾淨?

from PIL import Image as im
import pyautogui as pag

print("Ctrl+C to stop")

try:
    while True:
        x, y = pag.position() # x:1012, y: 167
        ps = 'x:' + str(x).rjust(4) + '. y:' + str(y).rjust(4)
        ss = pag.screenshot().getpixel((x, y))	# (51, 51,51)
        ps += ', RGB=({0}, {1}, {2})'.format(ss[0], ss[1], ss[2]) 
        # x:1012, y: 167, RGB=(51, 51,51)92)  ←問題出在這裡,明明下面的'\b'*len(ps) 應該能完全清除ps字串的內容,但總是會「不夠」,漏掉一些沒刪到,比如上面的92),為什麼呢?
        
        print(ps, end='')	# 為了讓下一行的「\b」發生作用,此行必須有end=''。
        print('\b'*len(ps), end='', flush=True)	
        # 擦掉先前印出的座標,並更新記憶體狀態
        
except KeyboardInterrupt:	# 按ctrl+c,停止while True迴圈
    print('\nDone.')

註:會寫程式的人通常數學很厲害吧?
本來想夾帶問一題「高中3次函數的圖形」,但又怕歪樓。

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
猴子
iT邦新手 4 級 ‧ 2023-04-06 19:51:15
最佳解答

我自己理解在 python 中 \b 並不是用來 刪除的 而是替換。
比如:
abc\b 不會刪除 c 還是 abc,但 abc\bd 會把 c 換成 d,最終會變成 abd

你可以跑跑看以下的程式:

ps = "awa"

print(ps, end="")
print("\b" * len(ps) + " " * len(ps), flush=True)
print("None")

他會輸出
None


ps = "awa"

print(ps, end="")
print("\b" + " " * len(ps), flush=True)

他會輸出
aw

然後至於第二個問題 S... 我現在高職電子科一年級
數學: 75, 英文: 30....
註: 數學全班有人好像考 100...
這成績熱騰騰剛出的 :L

不好意思,我把\b記成「backspace鍵」了,
但它只是「back後退」的意思。
謝謝您的回覆。

繼續找到解答
ps += ', RGB=({0:03}, {1:03}, {2:03})'.format(ss[0], ss[1], ss[2])
改成這樣可以完全遮蓋前次數字(位數相同),不足補0,不補亦可(刪掉冒號後的0)。
例外'\b'*len(ps)可以直接用'\r'取代。:D

我要發表回答

立即登入回答