Python3.8 list.append('█') 但不适用于空格字符?

2024-10-01 00:17:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python的初学者,正在努力编写我的第一个程序。我正在尝试创建一个游戏,游戏需要猜一个硬编码的句子

mystery_sentence='All things excellent are as difficult as they are rare'

def printGuessedLetter():
    print("This is the sentence to guess: " + ''.join(userGuesslist))


for n in mystery_sentence:
    userGuesslist.append('█')
printGuessedLetter()

上面的代码返回:

这是要猜测的句子:█████████████████████████████████████████████████████

下面是上面的一段代码:

letter = input("> Enter a letter:\n>> ").lower()[0]

if letter in userGuesses:
    print("You've already submitted this letter")

else:
    attempts -= 1
    userGuesses.append(letter)
    if letter in mystery_sentence:
        print("\nNice guess")
        if attempts > 0:
            print("You have ", attempts, "remaining attempt")
            for i in range(len(mystery_sentence)):
                if letter == mystery_sentence[i]:
                    letterIndex = i
                    userGuesslist[letterIndex] = letter.upper()
            printGuessedLetter()

由于“猜测”一句包含空格,我认为玩家更容易看到以下内容:██ ██████ █████████ ███ ██ █████████ ██ ████ ███ ████

然后,当玩家提交一封信时,它会如下所示:

下面是要猜测的句子: ██ ██████ █████████ A.██ A.█ █████████ A.█ ████ A.██ █A.██

等等

但是,我无法用完整块替换空格字符。我不确定list.append是正确的函数

有人有什么建议吗


Tags: in游戏ifasaresentence句子print
3条回答

可以使用re.sub替换所有非空白(\S)字符:

import re

mystery_sentence='All things excellent are as difficult as they are rare'
hidden = re.sub(r'\S', '█', mystery_sentence)

print(hidden)
# ███ ██████ █████████ ███ ██ █████████ ██ ████ ███ ████

如果您确实希望将此作为列表:

userGuesslist = list(hidden)

没有正则表达式的另一个选项:

hidden = ''.join(['█' if char !=' ' else ' ' for char in mystery_sentence])
print(hidden)    
# ███ ██████ █████████ ███ ██ █████████ ██ ████ ███ ████

或者,如果您真的想要列表而不是字符串:

userGuesslist = ['█' if char !=' ' else ' ' for char in mystery_sentence]

正则表达式对于您的问题来说是一种过分的手段。在用块字符替换其他字符时保留空格的简单方法是

userGuesslist = []
for n in mystery_sentence:
    if n == ' ':
        userGuesslist.append(' ')
    else:
        userGuesslist.append('█')

另外,请注意letterIndex变量在代码中是多余的(您可以只保留i

也许这会有帮助。可以将Unicode字符用于块here is link

block = u'\u2588'
print(block)
>> █

您可以像这样打印多个文件:

num = 10
block = u'\u2588'
blocks = block * num
print(blocks)
>> ██████████

num = 25
block = u'\u2588'
blocks = block * num
print(blocks)
>> █████████████████████████

您也可以这样做:

num = 25
block = chr(9608)
blocks = block * num
print(blocks)
>> █████████████████████████

相关问题 更多 >