我对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 |
-------------------------
我的数独求解器每一步打印一个完整的网格,如何完全擦除它并重写另一个?
非常感谢并抱歉语言不好。
答案 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
的答案。