如何删除python代码中的白色?

r7xajy2e  于 2023-03-28  发布在  Python
关注(0)|答案(1)|浏览(148)

我使用下面的代码:

import time
import sys

def delay_print(s):
  for c in s:
    sys.stdout.write(c)
    sys.stdout.flush()
    time.sleep(0.25)

def Loading():
  load = int(10)
  while load != 0:
    delay_print("...\r   \r")
    load = load - 1
    time.sleep(0.5)

Loading()

这工作正常,但有没有什么方法可以删除白色时,它显示使用\r命令?

rt4zxlrg

rt4zxlrg1#

你必须明白的是,字符串的\r部分是控制字符-\r,名为“回车”控制字符,它具有十进制代码“13”,也可以写成十六进制编码\x0c,向 * 终端 * 仿真器程序发出信号(程序的窗口是一个中央文本区域,在那里执行Python代码)将其解释为“将(打印)光标返回到当前行的开头”。
与更复杂的控制代码不同,它可以执行着色文本或在其他行中任意定位等操作,即使在Windows的cmd默认终端上也可以默认工作。
所以,这里有空白的原因是,如果要在同一行中重新打印的新字符串比前一个字符串短,旧字符串的剩余字符将不会被删除-并且信息将被破坏。就像,如果这是用来显示时钟,如果在“23 h59”之后打印“0 h 00”,终端中的结果将是“0 h 009”(由于新字符串的尺子仅为4个字符,因此前一个字符串中的“9”未被覆盖)
在这段代码中,每个字符之间都有一个停顿,空白只是为了擦除,通过打印覆盖,前面的每个点。
因此,虽然可以重写这段代码,使变量中有所需的空格数,而不是在字符串中有3个硬编码的空格,但仍然需要为每个“.”或其他字符打印一个空格字符。即使对于更复杂的文本用户界面(TUI)程序,这仍然是正确的:输出一个空格字符实际上是“擦除”一个字符单元格。(可以使用其他没有字形的unicode字符来代替-但是这些字符在各种终端程序中不受支持,并且不具有与“空字符单元格”相同的语义含义)
下面是相同的脚本,它将“”替换为一个简单的逻辑,该逻辑计算打印的字符并一次擦除一个字符:

import time

def delay_print(s):
  count = 0
  for c in s:
    print(c, flush=True, end="")
    if c == "\r":
        time.sleep(0.25)
        for i in range(count):
            print(" ", flush=True, end="")
            time.sleep(0.25)
        print("\r", flush=True, end="")
    time.sleep(0.25)

def Loading():
  load = int(10)
  while load != 0:
    delay_print("...\r")
    load = load - 1
    time.sleep(0.5)

Loading()

(It还用标准print函数代替了sys.stdout.write的使用,该函数具有以同步方式一次打印一个字符所需的参数)

相关问题