-1

How do I make the print statement from this code stay in one line?

import time

bitcoin = 0

while 1 == 1:
    time.sleep(1)
    print(f"Bitcoin: {bitcoin}")
Known
  • 1
  • 2

1 Answers1

0

Try this:

import time

bitcoin = 0

while 1 == 1:
  time.sleep(1)
  print(f"\r\xb[{2}KBitcoin: {bitcoin}",end='')
  bitcoin+=1

basically, \r is the escape code for carriage return, meaning it goes back to the start and writes over the previous line. \x1b[{2}K clears the line,(the previous bitcoin value). end='' means that print doesn't go down to a new line.

Another solution, if you know exactly what terminal coordinates you want the text is:

import time

bitcoin = 0
x=10
y=0
def posprint(string,x=0,y=0):
  print('\u001b[s')
  print(f'\x1b[{y};{x}H\x1b[{2}K')
  print(f'\x1b[{y};{x}H',string)
  print('\u001b[u',end='')
while 1 == 1:
  time.sleep(1)
  posprint(f"Bitcoin: {bitcoin}",x,y)

posprint takes the coordinates you enter into it, and prints the text at those coordinates. I use ansi escape codes here to navigate to the position and clear the line before printing the string at that location.

Again, here \x1b[{2}K clears the line, but this time \x1b[{y};{x}H first travels to the x and y coordinates. Then, after clearing the line, the function goes back to the coordinates, and then finally prints the string.

The function also goes back to where the cursor was last. \u001b[s saves the cursor position and \u001b[u restores the position of the cursor.

Agent Biscutt
  • 712
  • 4
  • 17