在字符串

时间:2016-10-14 18:17:33

标签: python python-3.x

我正在创造一个类似刽子手的游戏。基本上让我说我有一个秘密的词,比如,“美女和野兽”,这取决于用户猜测字母和最终的整个单词。

到目前为止,我的代码工作正常,但是如果你想要检查它here you go。以下是相关部分:

def draw(good_guesses, bad_guesses, secret_word):  # DRAW spaces, letters & strikes
    clear()
    print(secret_word)
    # printing strikes first
    print("Strikes: {}/7".format(len(bad_guesses)))
    print("")

    # printing bad guesses so far
    for letter in bad_guesses:
        print(letter, end=" ")  # have a space between each element
    print("\n")  # double blank lines

    # print discovered/undiscovered letters
    for letter in secret_word:
        if letter in good_guesses:
            print(letter, end=" ")
        else:
            print('_', end=" ")
    print('')

回到我们的例子。对于字符串“beauty and the beast”,用户将看到以下内容打印出来:

“_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _”

正如您所看到的,字符串的空格打印为下划线,这正是我想要改变的。

如果将其打印出来会好得多:

“_ _ _ _ _ _ / _ _ _ / _ _ _ / _ _ _ _ _”

我想也许有办法定位空格并将它们打印成空格而不是下划线?无法想象如何做到这一点。

感谢。

3 个答案:

答案 0 :(得分:3)

在代码的逻辑中,您需要使用相等运算符来处理该情况:==。所以这样的事情会起作用:

for letter in secret_word:
    if letter in good_guesses:
        print(letter, end=" ")
    elif letter == ' ':
        print('/', end=" ")
    else:
        print('_', end=" ")

print('')

答案 1 :(得分:1)

我认为您要做的是将第40行更改为以下内容:

if letter in good_guesses or letter == ' ':

或者,您可以将字符添加到good_guesses

if letter in good_guesses + ' ':

这允许您添加其他字符:

if letter in good_guesses + ' -,': # Commas, spaces, and dashes are "given" to the player.

答案 2 :(得分:1)

您可以对代码进行一些改进,主要是使用str.join和理解。

这是一个draw函数,它可以执行原始函数,但需要进行更改和其他一些修改:

def draw(good_guesses, bad_guesses, secret_word):
    # DRAW spaces, letters & strikes
    clear()
    print(secret_word)
    # printing strikes first
    print("Strikes: {}/7\n".format(len(bad_guesses)))

    # printing bad guesses so far
    print("{}\n".format('  '.join(bad_guesses)))

    # print discovered/undiscovered letters
    print("{}\n".format(''.join(letter if letter in good_guesses else '/' if letter == ' ' else '_' for letter in secret_word)))

' '.join(bad_guesses)优于原始for循环,因为它不会打印尾随空格。

''.join(letter if letter in good_guesses else '/' if letter == ' ' else '_' for letter in secret_word)使用空字符串连接迭代器的所有元素。如果正确猜测,迭代器将返回字母,'/'表示空格,'_'表示其他所有字符。

在这两种情况下,预先格式化字符串都不必在print中使用自定义行结尾。

以下是输入字符串的示例输出,用户猜到了所有元音:

>>> draw('aeuy', 'io', 'beauty and the beast')
beauty and the beast
Strikes: 2/7

i  o

_eau_y/a__/__e/_ea__