在蟒蛇中的刽子手:有线被替换?

ste*_*boy 6 python scripting

我正在努力用我目前所知的Python编写一个简单的Hangman游戏(我正在以艰难的方式学习Python),到目前为止我有这个:

from sys import argv
import random

script_name, dict_file = argv

hang_list = open(dict_file).read().splitlines()
hang_list = filter(None, hang_list) 
word = random.choice(hang_list)

guesses = ''

def compare_words():
    global guesses
    new_word = ''
    for char in word:
        if char in guesses: 
            new_word += char
        else:
            new_word += "_"
    return new_word

def test_letter():
    global guesses
    letter = raw_input("Guess a letter: ")
    guesses += letter
    new_word = compare_words()
    print "\nCurrent guesses: %s" % guesses
    print "%s\n\n" % new_word
    if new_word == word:
        print "You won!"
    else:
        test_letter()


test_letter()
Run Code Online (Sandbox Code Playgroud)

我还没有实施评分系统(小菜一碟),但我的布局有问题.如你所知,这将打印"当前猜测:"和每次新词; 但是,我想要的是四行看起来像:

Guess a letter:
Guesses: abczy
__c__b_
Run Code Online (Sandbox Code Playgroud)

并让这三条线不断更新.但是,我无法弄清楚如何使打印替换标准输出.我相信我需要使用\r转义字符,但我已经尝试将它放在各个地方,但无法让它工作.那么,我应该如何修改它以使其替换?我宁愿不清楚,因为它仍然使事情有点混乱; 我想换掉那里的东西.谢谢!

Pet*_*ain 0

\r 字符是回车符,这意味着它将把光标返回到当前行的开头。如果你想重画光标所在的线,那没问题,但如果你想重画其他线,那就不行了。

要执行您想要的操作,您需要使用终端库,例如 Linux 上的curses 或Windows 上的控制台API。如果您只是在 Linux 上工作,并且想要一种更简单的方法来访问颜色、光标移动和无回显的输入,那么您可能会比尝试 bless 更糟糕(https://pypi.python.org/pypi/blessed/)。

如果你需要一个跨平台 API 来完成这类事情,目前还没有纯 Python 的方法来处理这一切,但我正在研究一种方法。https://github.com/peterbrittain/asciimatics中的 Screen 类以跨平台的方式涵盖了上述所有功能。