在python中使用回车符和换行符的正确方法

2024-09-30 14:36:56 发布

您现在位置:Python中文网/ 问答频道 /正文

问题

在我用python编写代码的两年中,我一直在努力解决这个问题,因此我想寻求正确的方法。如何使其覆盖上一次打印,同时使用换行符(通过返回或\n)。我已经尝试了我能找到的大多数答案,但是它只做了我想做的工作之一


测试模型

import time, sys

counter1 = 0
counter2 = 0
counter3 = 0

for i in range(5):
    time.sleep(0.1)
    counter1 += 1
    counter2 += 1
    counter3 += 1
    
    #print method here!

尝试1:

使用"""\r的多行(f)字符串

    print(f"""\r
Counter 1: {counter1}
Counter 2: {counter2}
Counter 3: {counter3}
    """)

尝试1的输出:

Counter 1: 1
Counter 2: 1
Counter 3: 1


Counter 1: 2
Counter 2: 2
Counter 3: 2

..etc

尝试2:

使用\r\n的正规(f)字符串

print(f"\rCounter 1: {counter1}\nCounter 2: {counter2}\nCounter 3: {counter3}")

尝试2的输出:

Counter 1: 1
Counter 2: 1
Counter 3: 1
Counter 1: 2
Counter 2: 2
Counter 3: 2
etc..

尝试3:

使用sys.stdout.write\r\n

sys.stdout.write(f'\rCounter 1: {counter1}\nCounter 2: {counter2}\nCounter 3: {counter3}')
sys.stdout.flush()  

尝试3的输出:

Counter 1: 1
Counter 2: 1
Counter 1: 2
Counter 2: 2
Counter 1: 3
etc..

尝试4:

在末尾使用回车符(\r):

print(f"Counter 1: {counter1}\nCounter 2: {counter2}\nCounter 3: {counter3}\n", end = "\r")

尝试4的输出:

Counter 1: 1
Counter 2: 1
Counter 3: 1
Counter 1: 2
Counter 2: 2
Counter 3: 2

尝试5:

彼此分开打印,第一个打印前有\r

print(f"\rCounter 1: {counter1}")
print(f"Counter 2: {counter2}")
print(f"Counter 3: {counter3}")

尝试5的输出:

Counter 1: 1
Counter 2: 1
Counter 3: 1
Counter 1: 2
Counter 2: 2
Counter 3: 2

Tags: 方法字符串代码timestdoutsyscounteretc
2条回答

回车符不会撤消整个打印或任何操作,它只是将光标返回到当前行的第一列。想象一下,打字机上的托架回到左侧。如果在回车之前有一个换行符,那么光标将正好位于刚刚打印的换行符下方的换行符左侧

要想做你想做的事情,并覆盖之前的行,你必须做一些事情,比如重新打印整个屏幕的行数,或者使用诅咒之类的东西来帮你

再加上alefir的回答,我能想到的最接近的是这样的东西,它把你想要改变的一切都放在一行上。不确定它是否满足代码的需要

import time

counter1 = 0
counter2 = 0
counter3 = 0

print("%s\t%s\t%s" % ("Counter 1 name", "Counter 2 name", "Counter 3 name"))
for i in range(5):
    time.sleep(0.1)
    counter1 += 1
    counter2 += 1
    counter3 += 1
    print("%.1f\t\t%.1f\t\t%.1f" % (counter1, counter2, counter3), end = "\r")

或者,要用多行实现alefir的方法,您可以使用一些like this to clear the screen

# import only system from os
from os import system, name

# define our clear function
def clear():
  
    # for windows
    if name == 'nt':
        _ = system('cls')
  
    # for mac and linux(here, os.name is 'posix')
    else:
        _ = system('clear')

结合您的第1次尝试,您将得到如下结果:

for i in range(5):
    time.sleep(0.1)
    counter1 += 1
    counter2 += 1
    counter3 += 1
    clear()
    print(f"""\r
    Counter 1: {counter1}
    Counter 2: {counter2}
    Counter 3: {counter3}
    """)    

相关问题 更多 >