0

这是一个家庭作业问题。我需要定义一个函数,该函数接受一个单词和一个字母,并删除单词中该字母的所有出现。我不能使用正则表达式或字符串库之类的东西。我试过了...

def delete(word,letter):
    word = []
    char = ""
    if char != letter: 
        word+=char
    return word

def delete(word,letter):
    word = []
    char = ""
    if char != letter:  #I also tried "if char not letter" for both
        word = word.append(char)
    return word

两者都不提供任何输出。我究竟做错了什么?

4

6 回答 6

4

好吧,仔细看看你的函数:

def delete(word,letter):
    word = []
    char = ""
    if char != letter: 
        word+=char # or `word = word.append(char)` in 2nd version
    return word

因此,该函数获取了一个单词和一个传入的字母。您要做的第一件事就是丢弃该单词,因为您正在用不同的值(一个新的空列表)覆盖局部变量。接下来,您将初始化一个空字符串char并将其内容(它是空的)与传递的字母进行比较。如果它们不相等,即如果letter不是空字符串,则将空字符串char添加到 (empty list)word中。然后word被退回。

另请注意,您不能将字符串添加到列表中。对列表的+操作仅用于合并两个列表,因此您的append版本绝对不会出错。鉴于您想要一个字符串作为结果,将结果存储为一个开始更有意义。

当发生与传递的单词完全无关的事情时,不要将空字符串添加到空字符串/列表中,而是要保持原始单词完整并以某种方式查看每个字符。您基本上想遍历单词并保留所有不是通过字母的字符;像这样的东西:

def delete(word, letter):
    newWord = '' # let's not overwrite the passed word
    for char in word:
        # `char` is now each character of the original word.
        # Here you now need to decide if you want to keep the
        # character for `newWord` or not.
    return newWord

for var in something基本上将采用序列并为该序列something的每个值执行循环体,使用变量标识var。字符串是字符序列,因此循环变量将包含单个字符,并且针对字符串中的每个字符执行循环体。

于 2013-03-21T17:41:50.690 回答
1

你没有做任何事情word传递给你的函数。最终,您需要遍历传递给您的函数 ( for character in word: doSomething_with_character) 的单词并从中构建您的输出。

于 2013-03-21T17:35:23.770 回答
0
def delete(word, ch):
    return filter(lambda c: c != ch, word)

基本上,只是对字符串进行线性传递,丢弃匹配的字母ch

filter采用高阶函数和iterable. 字符串是 aniterable并且迭代它会迭代它包含的字符。filter从高阶函数返回的可迭代对象中删除元素False

在这种情况下,我们filter排除所有等于传递ch参数的字符。

于 2013-03-21T17:38:04.067 回答
0

我喜欢值得了解的功能风格@TC1 和@user2041448。这是另一个实现:

def delete( letter, string ):
    s2 = []
    for c in string:
        if c!=letter:
             s2.append( c )

     return ''.join(s2)
于 2013-03-21T17:45:36.060 回答
0

您的第一个函数使用 + 运算符和一个可能不是最合适的选择的列表。+ 运算符可能应该为字符串保留(并将 .append() 函数与列表一起使用)。

如果意图是返回一个字符串,则分配“”而不是 [],并使用 + 运算符

如果意图是返回一个字符列表,请 分配 [],并使用 .append() 函数

更改您用于构造返回值的变量的名称。

将任何内容分配给 word 会删除作为参数提供给函数的内容。

所以让它result=[] OR result="" etc..

还:

您似乎试图解决此问题的方式要求您遍历原始字符串中的字符,您发布的代码根本不会循环。

您可以使用具有这种语义的 for 循环:

for characterVar in stringVar:
    controlled-code-here
code-after-loop

当然,您可以/应该更改名称,但我以一种可以帮助您理解的方式命名它们。在您的情况下, stringVar 将被替换为 word ,如果它不是已删除的字符,您将追加或添加 characterVar 到结果中。您希望包含在循环中的任何代码都必须缩进。控制行之后的第一条未缩进的行向 python 表明代码在循环之后。

于 2013-03-21T17:54:31.013 回答
0

这就是我想出的:

def delete(word, letter):
    new_word = ""
    for i in word:
        if i != letter:
            new_word += i
    return new_word
于 2013-03-21T18:06:04.607 回答