程序检查器(codecademy)中的错误实践是完美的

时间:2017-04-11 10:49:42

标签: python

我想在分割文本时也包含空格,因为我在google上查找了使用import re

import re
def censor(text,word) :
    text1=re.split(r"(\s+)",text)
    #print text1
    sum=""
    for i in range(0,len(text1)) :
        if text1[i]==word :
            for j in range(0,len(word)) :
                sum=sum+"*"
        else :
            sum=sum+text[i]
    return sum

我得到的错误是

image displaying error and code

如果我包含另一个for循环来替换每个' e'用空格,它不起作用。

1 个答案:

答案 0 :(得分:0)

在您的代码中,text1(非常糟糕的命名BTW)是单词列表,text是单个字符串。您的第一个for循环正在迭代text1个索引(列表中的单词),但在else子句中,您可以下标整个text字符串。显然,您希望从单词列表(text1)中获取单词,而不是i字符串中text位置的单词。 IOW:将您的else子句替换为:

sum=sum+text1[i]

并且测试应该通过。

如果您使用了正确的命名和正确的代码布局,您肯定会更容易发现问题:

def censor(text, word) :
    words = re.split(r"(\s+)",text)
    sum=""
    for i in range(0, len(words)) :
        if words[i] == word :
            for j in range(0, len(word)) :
                sum = sum + "*"
        else :
            # here you easily spot the error
            sum = sum + text[i]

    return sum

另外,你制造的东西比它们要复杂得多。您可以在循环之前为所有人预先计算“坏”字的“替换”字符串(并且您不需要循环来执行此操作),并且您不需要range和索引的访问,你可以直接在单词列表上迭代:

def censor(text, word) :
    replacement = "*" * len(word)
    words = re.split(r"(\s+)", text)
    cleaned = ""
    for w in words :
        if w == word :
            cleaned += replacement 
        else :
            cleaned += w
    return cleaned

还有其他可能的改进,但至少这是可读性和更多pythonic。