编写一个以两个字符串作为输入的函数,并用星号替换它

时间:2015-08-27 17:23:44

标签: python

我参加了10月15日的Codecademy练习。目标是创建一个审查功能 拿字符串“这个黑客是怪人”并用“这个****是怪人”替换它

def censor("this hack is wack", "hack"):
     def "h,a,c,k".split():
          for letter in list: 
                       "*" 4
                "".join(list)
    return list 

1)我很确定你不需要在函数内部定义函数,所以我将split函数存储为变量吗?

2)在完成循环浏览黑客中的每个字母后,如何重写.join函数以使用星号获取新句子

2 个答案:

答案 0 :(得分:4)

让我们从您的代码开始,因为几乎每一行都有问题:

def censor("this hack is wack", "hack"):

def表示“定义”,是您定义函数的方式。你似乎把它与你打电话的方式混淆了。在这种情况下,您需要变量以便稍后调用您的参数。你有硬编码的字符串文字。这没有意义,也不是有效的语法。

def 'h,a,c,k'.split():

我甚至不知道这意味着什么。 'h,a,c,k'.split()是一个几乎没有操作的命令,因为split()默认情况下会拆分空格,而字符串'h,a,c,k'不包含空格。因此,这将返回['h,a,c,k']。也就是说,如果您正确发出命令,它将返回。因为它是你开始定义一个函数,然后开始写其他东西?

for letter in list:

这很好,但是list是一个糟糕的变量名,因为你掩盖了Python内置的list函数,稍后你可能需要它。 (或者您可能稍后尝试使用它,并且它会表现不正确,因为您将其名称命名为其他内容。)

"*" 4

抱歉,我不明白你的意思。

"".join(list)

很好,除非你没有将它存储在任何地方,而且每次循环只执行一次而不只是一次。

您尝试编写的功能是这样的:

def censor(sentence, bad_word):
    return sentence.replace(bad_word, '*' * len(bad_word))

然后你调用就像这样:

censor('this hack is wack', 'hack')
"this **** is wack"

当你调用这样的函数时,'this hack is wack'变为sentence'hack'变为bad_word在函数内的代码中。然后,该函数使用字符串的replace方法替换等于“坏词”('*' * len(bad_word))长度的多个星号,用于“坏词”本身。

答案 1 :(得分:2)

首先,您应该学习如何定义函数。

函数将输入作为变量 - 而不是文字。

所以,你的功能就像这样开始:

def censor(string):

您必须使用给定的输入调用您的函数。您想输入"this hack is wack",因此您的来电是:censor("this hack is wack")

现在,您需要弄清楚如何将"hack"替换为"****"str.replace方法就是这么做的。在Python shell中试试这个:

"this hack is wack".replace("hack", "****")

把这一切放在一起,你得到:

def censor(string):
    return string.replace("hack", "****")

censor("this hack is wack")

如果你想要变量替换,那么你可以替换任何单词,你的功能应该是:

def censor(string, to_censor):
    return string.replace(to_censor, "*" * len(to_censor))

censor("this hack is wack", "hack")

你应该真正研究一个基本的,介绍性的Python教程,因为你的代码在任何方面都不正确。

我建议先阅读Python functions