鉴于您是新手,我想把我的帽子扔进去,不用正则表达式并尝试解释。也许只有在你完成后才能阅读。您的问题标题可以这样回答:
def replace_nth_char(string, n, replacement):
n -= 1
l_string = list(string)
l_string[n] = replacement
return ''.join(l_string)
它将字符串转换为可以用索引n 替换的字母列表,然后将其连接起来。
我还尝试向您展示更多 python 选项。
在管理状态时,您可能需要考虑using a class。它可以帮助您将所有功能和属性包装到一个有目的的对象中 - 玩您的词汇游戏。我建议调查他们。这是游戏中的一个:
import random
class VocabularyGame():
def __init__(self, chosen_words, hidden_words):
self.chosen_words = chosen_words
self.hidden_words = hidden_words
self.hidden_letters = list(set(''.join(words)))
self.masked_sentence = self.mask_words(chosen_words, hidden_words)
print(f"Game start: {self.masked_sentence}")
def mask_words(self, sentence, masks):
return ' '.join(['_'*len(w) if w in masks else w for w in sentence.split(' ')])
def try_letter(self, letter=None):
if letter is None:
letter = random.choice(self.hidden_letters)
self.masked_sentence = ''.join(
[c if c== letter else m for m, c in zip(self.masked_sentence, self.chosen_words)]
)
self.hidden_letters = [l for l in self.hidden_letters if l != letter]
print(f"Trying letter {letter}...\nRemaining letters: {self.masked_sentence}")
__init__ 部分在我们创建新游戏实例时运行,并采用三个参数(self, chosen_words, hidden_words)。使用self 引用当前类实例(或游戏),我们可以使用它来设置和检索类的属性,在这种情况下,以记住我们的单词和句子。
def __init__(self, chosen_words, hidden_words):
self.chosen_words = chosen_words
self.hidden_words = hidden_words
self.hidden_letters = list(set(''.join(hidden_words)))
self.masked_sentence = self.mask_words(chosen_words, hidden_words)
print(f"Game start: {self.masked_sentence}")
list(set(''.join(words))) 将隐藏单词中的所有唯一字母连接成一个字符串,using sets 将它们转换为唯一字母。我将其转换回列表以方便以后使用。
然后我们应用一个函数来掩盖带有“_”的单词。
def mask_words(self, sentence, masks):
return ' '.join(['_'*len(w) if w in masks else w for w in sentence.split(' ')])
这会遍历句子中的每个单词,如果单词存在于隐藏单词中,则将其替换为单词长度的“_”。然后它重新加入它。现在我们有了开始状态。
最后要做的是尝试一个字母。我们通过定义一个方法(类上的函数)def try_letter(self, letter=None): 来做到这一点。如果没有提供字母,我们会从之前定义的唯一缺失字母中随机选择一个。
我们使用zip 一起检查原始句子中的每个字母和掩码句子中的每个字母,当原始字母是我们选择的字母时,我们替换掩码句子中的那个。
self.masked_sentence = ''.join(
[c if c==letter else m for m, c in zip(self.masked_sentence, self.chosen_words)]
)
然后从我们的隐藏字母列表中删除字母:
self.hidden_letters = [l for l in self.hidden_letters if l != letter]
最后,我们使用f-strings 打印出结果。
现在,我们可以玩游戏了!
chosen_word = "TO CRANK (STH) UP"
words = ['CRANK', 'UP']
game = VocabularyGame(chosen_word, words)
输出:Game start: TO _____ (STH) __
尝试一个字母 7 次 for i in range(7): game.try_letter()
输出:
Trying letter N...
Remaining letters: TO ___N_ (STH) __
Trying letter K...
Remaining letters: TO ___NK (STH) __
Trying letter R...
Remaining letters: TO _R_NK (STH) __
Trying letter P...
Remaining letters: TO _R_NK (STH) _P
Trying letter C...
Remaining letters: TO CR_NK (STH) _P
Trying letter U...
Remaining letters: TO CR_NK (STH) UP
Trying letter A...
Remaining letters: TO CRANK (STH) UP