2016-08-18 2 views
0

In Python 3 gab es Antworten darüber, wie eine vorhandene Ausgabe durch eine andere ersetzt werden kann. Diese Antworten schlagen die Verwendung von Ende = '\ r' im Print vor ('Hallo', Ende = '\') Dies funktioniert natürlich, aber es funktioniert nur für eine Zeile.Ersetzen Sie mehrzeilige vorhandene Ausgabe in Python

In dem Programm, das ich unten poste, gebe ich zuerst 5 Zeilen aus, was die Darstellung einer Tabellenmatrix ist. Der Benutzer wird aufgefordert, eine Nummer einzugeben (1-3) und dann wird die Matrix erneut mit einem "X" in der Position gedruckt, die der Benutzer angegeben hat.

Aber wie Sie sehen können, ist die Matrix unterhalb der ursprünglichen gedruckt. Wie kann ich die vorhandene Ausgabe ersetzen?

Wenn ich das Ende = '\ r' verwende, bewegt es den Cursor einfach an den Anfang der Zeile. Aber das funktioniert nicht für mich, weil ich 5 Zeilen drucken möchte, und dann den Cursor an den Anfang der ersten Zeile und nicht an den Anfang der fünften Zeile bewegen (wie das Ende = '\ r' tut).

Wie konnte ich dies in Python erreichen?

from __future__ import print_function 
list1=[' '*11,'|',' '*7,'|',' '*10] 

def board(): 
    print ('\t \t | \t \t |') 
    print (list1) 
    print ('\t \t | \t \t |') 
    #print '\n' 
    print 

def playerone():  
    player1 = raw_input("PLAYER1: enter your position 1-3: ") 
    if (player1 == '1'): 
     list1[0]=' '*5 + 'X'+' '*5 
    elif (player1=='2'): 
     list1[2]=' '*3 + 'X'+' '*3 
    elif (player1=='3'): 
     list1[4]=' '*3 + 'X'+' '*6 
    else: 
     playerone() 

print ('our board is : ') 
board() 

playerone() 

print ('our board is :') 
board() 

Antwort

0

Sofern Sie keine Flüche verwenden möchten (was ein weiterer großer Schritt ist), können Sie nicht um mehrere Zeilen zurückgehen.

ABER was Sie tun können, ist den Bildschirm zu löschen und alles neu anzuzeigen.

print(chr(27) + "[2J") 

löscht den Bildschirm

(wie in clear terminal in python angegeben)

+0

ich jupyter verwende. Und in Python 3 funktioniert das nicht. In meinem Fall zumindest. – spyimp

0

Sie können den Bildschirm löschen, bevor das Board zu drucken.

Und innerhalb der Platine() können Sie den ClearScreen() aufrufen, um den Bildschirm vor dem Drucken der Platine zu löschen.

0

Was zu versuchen, eine tragbare Lösung mit Terminals klaren Befehl, zum Beispiel zu verwenden:

from __future__ import print_function 
import os 

class Game: 

    def __init__(self): 
     self.running = True 
     self.list1 = [' ' * 11, '|', ' ' * 7, '|', ' ' * 10] 

    def clear_sceen(self): 
     os.system('cls' if os.name == 'nt' else 'clear') 

    def draw_board(self): 
     print('our board is : ') 
     print('\t \t | \t \t |') 
     print(self.list1) 
     print('\t \t | \t \t |') 

    def check_inputs(self): 
     player1 = raw_input("PLAYER1: enter your position 1-3: ") 

     if (player1 not in ['1', '2', '3']): 
      self.running = False 
     else: 
      print(chr(27) + "[2J") 

      if (player1 == '1'): 
       self.list1[0] = ' ' * 5 + 'X' + ' ' * 5 
      elif (player1 == '2'): 
       self.list1[2] = ' ' * 3 + 'X' + ' ' * 3 
      elif (player1 == '3'): 
       self.list1[4] = ' ' * 3 + 'X' + ' ' * 6 

    def run(self): 
     self.clear_sceen() 

     while self.running: 
      self.draw_board() 
      self.check_inputs() 

     print(
      '\nGame ended! you should have pressed numbers between 1-3 :P') 

if __name__ == "__main__": 
    g = Game() 
    g.run() 
Verwandte Themen