所以我有一个数字列表(answer_index),它与单词(word)中字符(char)的索引位置(索引)相关。我想在代码中使用列表中的数字作为索引输入(索引),以替换除我选择的字符(字符)以外的每个字符。因此,在这个实例中,最终打印(new_word)将是(****ee)而不是(coffee)。当(new_word)成为修改后的版本时,(word)保持它的原始值是很重要的。有没有人有一个解决方案,将列表转换为有效的索引输入?我也会寻找更简单的方法来实现我的目标。(注意:我对python非常陌生,所以我确信我的代码看起来很可怕)下面的代码:
word = 'coffee'
print(word)
def find(string, char):
for i, c in enumerate(string):
if c == char:
yield i
string = word
char = "e"
indices = (list(find(string, char)))
answer_index = (list(indices))
print(answer_index)
for t in range(0, len(answer_index)):
answer_index[t] = int(answer_index[t])
indexes = [(answer_index)]
new_character = '*'
result = ''
for i in indexes:
new_word = word[:i] + new_character + word[i+1:]
print(new_word)
您几乎不需要直接使用索引:
string = "coffee"
char_to_reveal = "e"
censored_string = "".join(char if char == char_to_reveal else "*" for char in string)
print(censored_string)
输出:
****ee
如果你想实现一款猜字游戏,你最好使用字典,将字符映射到其他字符:
string = "coffee"
map_to = "*" * len(string)
mapping = str.maketrans(string, map_to)
translated_string = string.translate(mapping)
print(f"All letters are currently hidden: {translated_string}")
char_to_reveal = "e"
del mapping[ord(char_to_reveal)]
translated_string = string.translate(mapping)
print(f"'{char_to_reveal}' has been revealed: {translated_string}")
输出:
All letters are currently hidden: ******
'e' has been revealed: ****ee
替换除某些字符外的所有字符的最简单和最快的方法是使用正则表达式替换。在本例中,它看起来像:
import re
re.sub('[^e]', '*', 'coffee') # returns '****ee'
这里,[^...]
是一个负字符匹配模式。'[^e]'
将匹配(然后替换)除"e"以外的任何内容。
其他选项包括将字符串分解为字符的可迭代对象(@PaulM的答案)或使用bytearray
代替
在Python中,通常不习惯使用索引,除非你真的想用它们做些什么。对于这个问题,我会避免使用它们,而只是遍历单词,读取每个字符并创建一个新单词:
word = "coffee"
char_to_keep = "e"
new_word = ""
for char in word:
if char == char_to_keep:
new_word += char_to_keep
else:
new_word += "*"
print(new_word)
# prints: ****ee