我正在尝试编写一个函数,将字符串中的专用字转换为星号。基本上,我想从字符串中检查一个单词(例如,如果我将“World”作为专用单词,请将“Hello World”更改为“Hello *****”)。我尝试编写以下代码,但代码不会将单词转换为星号。
def censor(text, word):
a = text.split()
replace = ""
for i in word:
replace += "*"
for i in a:
if i == word:
i = replace
result =' '.join(a)
return result
有人能帮助我吗?除了行i = replace
之外,代码中的所有内容似乎都有效。
谢谢!
答案 0 :(得分:2)
i = replace
将名为i
的变量重新绑定到replace
中的字符串。它不会像您期望的那样更新列表。您可以使用索引将replace
分配给列表中的项目来修复代码:
for idx, s in enumerate(a):
if s == word:
a[i] = replace
现在,列表a
中的项目将会更新。
答案 1 :(得分:2)
如果您只是想更改字符串中的子字符串,可以使用以下内容:
def censor(text, word):
return text.replace(word, '*'*len(word))
这将替换word
的所有*
个实例,并为len(word)
添加censor(text, word):
a = [w if w!=word else '*'*len(w) for w in text.split()]
return ' '.join(a)
秒。
我的回答只是意识到问题是,如果你想要审查"世界"但不是"世界破坏者",你会遇到问题,因为你最终会得到" *****破坏者"。
在这种情况下,我会说做类似的事情:
w
在第二行,我们让每个text.split()
(word
中的一个字词)保留,除非它是*
,在这种情况下我们将其替换为def censor(text, word):
a = text.split()
for i, v in enumerate(a):
if v == word:
a[i] = "*"*len(v)
return ' '.join(a)
print censor("Hello World", "World")
&#39 ;足以填补。然后我们用空格加入它并返回
答案 2 :(得分:1)
这可能会有所帮助
Hello *****
输出:
...
const sql = require('mssql')
...
// Create connection to database
const databaseConfig = {
userName: 'USER_NAME',
password: 'PASSWORD',
server: 'SERVER_NAMECLOUDAPP.AZURE.COM',
database: 'DATABASE',
options: {
encrypt: true // Use this if you're on Windows Azure
}
}
...
答案 3 :(得分:0)
您始终可以使用find()
方法。
def replaceWord(word, sentence):
# find the starting position
posStart = sentence.find(word)
# find the ending position
posEnd = posStart + sentence[posStart:].find(" ") - 1
# Get the word
new_word = sentence[posStart:posEnd+1]
# Turn word into a list
list_word = list(new_word)
# Find length of word
word_length = len(sentence[posStart:posEnd + 1])
# replace the word with "*"
star = ""
for i in list_word:
star = star + i.replace(i, "*")
# Add back in sentence
new_sentence = sentence[0:posStart - 1] + " " + star + " " + sentence[posEnd +2:]
return new_sentence
print(replaceWord("fox", "The fox is there"))