所以挑战是用一个等长的星号替换一个句子中的特定单词 - 3个字母 - > 3个星号等。
第一部分不起作用,但是第二部分没有 - 任何人都可以批评第一部分,并指出我可能犯的错误,因为逻辑看起来似乎是原来的?
def censor(text, word):
for c in text:
if c == word: ## this line was totally wrong
text.replace(c, "*" * len(c))
return text
下一部分确实有效,然后CodeAcademy的回答有所不同:
def censor(text, word):
a = "*" * len(word)
for c in text:
nw = text.split(word)
return a.join(nw)
你将如何处理这项任务?
答案 0 :(得分:1)
第二种解决方案也不完美:
def censor(text, word):
a = "*" * len(word)
nw = text.split(word) # no need for a loop here, one split catches all occurrences
return a.join(nw)
第一次尝试:
def censor(text, word):
# for c in text: # loops char by char
# if c == word: # one character likely won't be your word
# text.replace(c, "*" * len(c)) # does nothing, string is immutable
return text.replace(word, "*" * len(word)) # simple!
答案 1 :(得分:0)
在第一段代码中,你逐字逐句地遍历字符串 - 你永远不会找到一个单词。
在这种情况下我会使用正则表达式import re
来加快速度并找到合适的单词。尝试在句子The airplane is in the air now!
中屏蔽“空气”一词。
re
的示例。
re.sub(r'\bair\b', '***', 'The airplane is in the air now!', flags=re.IGNORECASE)
答案 2 :(得分:0)
你可以试试这个:
s = "hello, how are you?"
word = "hello"
import re
final_string = re.sub("\b"+re.escape(word)+"\b", '*'*len(word), s)
输出:
'*****, how are you?'
答案 3 :(得分:0)
正则表达式方法很好。另一种方法是用空格分割句子,查找要审查的单词,并用星号替换它。
$(document).ready(function postData() {
var id = localStorage.getItem('user-id');
var token = localStorage.getItem('user-token');
var vars = "id=" + id + "&token=" + token;
var hr = new XMLHttpRequest();
var url = "../php/getUsers.php";
hr.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {
var data = JSON.parse(hr.responseText);
for(var i=0;i<data.length;i++){
var templateData = {
name: data[i].name,
id: data[i].id
};
var id=templateData['id'];
$.get('templates/user.htm', function(templates) {
var template = $(templates).filter('#user-template').html();
$('#user-container').append(Mustache.render(template, templateData));
});
//alert("Test");
}
}
}
hr.open("POST", url, true);
hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
hr.send(vars);
});
尽管如此,这不会起到标点符号的作用。