在IPython控制台中删除几行

时间:2016-01-06 21:20:22

标签: python spyder

我对Pyhton很新,我从9月开始在Spyder(Python 3.4)中使用它。我想创建一个解决数独网格的程序,并在完成期间显示它(在IPython控制台中)。 我希望成功完成数独求解器并在输出中得到一个可打印的网格(我只发布可打印的网格代码):

def sudoku_pp(g):
    c = g.replace("0","_")
    s = ""
    l = 0
    for i in range(13):
        if i % 4 == 0:
            for _ in range(25):
                s += "-"        
        else:
            k = 9*l 
            s += "|"           
            for j in range(9):
                s += " "+c[k+j]
                if j%3 == 2:
                    s += " |"
            l += 1
        s += "\n"
    return(s)

其中g是一个包含每行数字的字符串,例如SUD1 = '530070000600195000098000060800060003400803001700020006060000280000419005000080079'

>>>print(sudoku_pp(SUD1))
-------------------------
| 5 3 _ | _ 7 _ | _ _ _ |
| 6 _ _ | 1 9 5 | _ _ _ |
| _ 9 8 | _ _ _ | _ 6 _ |
-------------------------
| 8 _ _ | _ 6 _ | _ _ 3 |
| 4 _ _ | 8 _ 3 | _ _ 1 |
| 7 _ _ | _ 2 _ | _ _ 6 |
-------------------------
| _ 6 _ | _ _ _ | 2 8 _ |
| _ _ _ | 4 1 9 | _ _ 5 |
| _ _ _ | _ 8 _ | _ 7 9 |
-------------------------

我的数独求解器每一步打印一个完整的网格,如何完全擦除它并重写另一个?

非常感谢并抱歉语言不好。

2 个答案:

答案 0 :(得分:1)

将以下内容添加到您的print语句中:

print(sudoku_pp(SUD1), flush=True, end='\r')

答案 1 :(得分:1)

在bash中你只需要使用tput,但我知道Python中没有这个工具的等价物。但是,您仍然可以打印可以执行此操作的转义码。

tput命令,用于将光标移动到上一行并删除它,根据this post

tput cuu1
tput el

将转义码转换为\033[K\033[A

所以基本上,你只需要根据你的例子做13次以删除完整的数独:

print(13 * "\033[K\033[A")
print(sudoku_pp(SUD1))

我只在Linux的iPython终端中测试了这个解决方案,但在Spyder本身没有,请告诉我它是否有效。

编辑:另请注意关于using curses的答案。