【问题标题】:Counting words containing certain letter计算包含某些字母的单词
【发布时间】:2021-07-30 18:16:05
【问题描述】:

任务是编写一个名为count_letter 的函数,该函数接受单词列表和某个字母,并返回至少找到该字母一次的单词数量。而且,我们必须使用for 循环。 所以我列出了一些编程语言和字母“a”,并尝试应用我们迄今为止学到的所有内容以及一些互联网教程来了解如何将人类逻辑转换为代码行,但显然我遗漏了一些东西,因为它没有不工作:( 这就是我的代码现在的样子:

mylist = ['fortran', 'basic', 'java', 'python', 'c++']
letter = 'a'
a_list = []
def count_letter(mylist):
  count = 0
  for i in range(len(mylist)):
    if letter in i:
      count += 1
      a_list.append(i)
  return a_list
  print(len(a_list))

结果是 - 没有结果。 Online-python 编译器返回响应 ** 进程退出 - 返回码:0 ** 我的问题是 - 我会错过什么或错误地定位那个循环不起作用。我想自己理解。 在教程中,我发现了一个返回正确答案的结构(看起来非常优雅和紧凑),但它没有任何功能,所以它不是我们真正需要编写的:

mylist = ['fortran', 'basic', 'java', 'python', 'c++']
letter = 'a'
res = len ([ele for ele in mylist if letter in ele])
print ('Amount of words containing a: ' +str(res))

这里系统响应:3,正如预期的那样。

请告诉我应该在代码 #1 中检查什么。

【问题讨论】:

  • 抱歉,“社区您好!”从我的问题中消失了。
  • 你的循环有问题:for i in range() 返回整数。你想要的是字符串,所以请改用for word in mylist:
  • printreturnfor i in range(len(mylist)): 可以是for i in mylist: 之后永远不会执行

标签: python python-3.x function for-loop


【解决方案1】:

我已经阅读了你所有的答案,我写下了一些重要的观点,今天再次使用我的代码,经过更多的尝试,它成功了...... 所以最终版本看起来像:

words = ['fortran', 'basic', 'java', 'python', 'c++']
letter = "a"


def count_letter(words, letter):
    count = 0
    for word in words:
        if letter in word:
            count += 1
    return count
print(count_letter((words),letter))

系统响应: 3

对我来说尚不明显的是:正确的缩进(它们也是问题的一部分),以及 print 行中 words 周围的额外括号。但它伴随着学习。

再次感谢您!

【讨论】:

    【解决方案2】:

    我认为'takes'意味着函数必须用两个参数定义:words_list和letter:

    def count_letter(words_list, letter):
    

    自然语言中的算法可以是:给我单词列表中每个单词都有字母的单词总和。

    在Python中可以表示为:

    def count_letter(words_list, letter):
        return sum(letter in word for word in words_list)
    

    一些解释:letter in word 返回布尔值(True 或 False),在 Python 中,布尔值是整数的子类(True 为 1,False 为 0)。如果字母在单词中,则结果为 1,否则为 0。结果的总和给出字母存在的单词数

    【讨论】:

    • 是的,你是对的,那是两个参数:单词列表和字母,对不起,我的错误没有把两者都放在def 非常感谢你的程序逻辑解释,我为自己写下来。
    【解决方案3】:

    就我个人而言,我发现将内容缩进四个空格时,Python 源代码更易于阅读。所以,这里又是你的函数,缩进更宽:

    def count_letter(mylist):
        count = 0
        for i in range(len(mylist)):
            if letter in i:
                count += 1
                a_list.append(i)
        return a_list
        print(len(a_list))
    

    for i in range(...) 将遍历整数集合。因此,i 将为循环的每次迭代采用一个新的整数值。首先i 将是0,然后是1 在下一次迭代中,依此类推。

    然后你问if letter in i:。这永远不可能是真的。 letter 是一个字符串,i 是一个整数。一个字符串永远不能是一个整数——所以这个 if 语句永远不会执行。相反,您想检查letter 是否在当前单词中(列表中的ith 单词)。 if 语句应为:

    if letter in mylist[i]:
        ...
    

    mylist[i] 是当前单词。

    然后您增加count 并将i 添加到a_list。您可能打算将mylist[i] 附加到a_list,但我不明白为什么您甚至需要a_list。您只需要count,因为它会跟踪您到目前为止遇到的条件为真的单词数量。 count 也是您最后应该返回的变量,因为这就是函数的目的:返回包含某个字母的单词(而不是单词本身)的数量。

    此外,您的最终print 语句的缩进方式使其成为函数体的一部分。不过,它在return 之后,这意味着它永远不会真正有机会打印。当你在函数内部使用return时,它会结束函数,并且执行流程会返回到最初调用函数的地方。

    需要应用的最后一个更改是,您的函数应该接受要查找的字母作为参数。现在,您的函数只接受一个参数 - 要搜索的单词列表。

    以下是我将应用于您的代码的更改:

    def count_letter(words, letter): # I find 'words' is a better name than 'mylist'.
        count = 0
        for i in range(len(words)):
            current_word = words[i]
            if letter in current_word:
                count += 1
        return count
    

    以下是您可以如何使用该功能:

    words = ["hello", "world", "apple", "sauce"]
    letter = "e"
    count = count_letter(words, letter)
    print("The letter '{}' appeared in {} words.".format(letter, count))
    

    输出:

    The letter 'e' appeared in 3 words.
    

    【讨论】:

    • 感谢您提出重要观点,您的建议代码看起来更加紧凑。到目前为止,我们还没有学习 .format,但我知道它在你的代码中做了什么。
    【解决方案4】:

    我在你的代码中发现了几个错误:

    1. 当你在 range(len(mylist)) 中执行 for i 时,你实际上是在循环遍历数字 1,2,... 而不是 mylist 的元素。所以你必须使用“for i in mylist”来循环遍历数组 mylist 的元素。

    2. 从函数返回时,返回之后的代码不会被执行。所以你必须先打印出来,然后从函数中返回。

    3. 不要忘记调用该函数。否则函数不会被执行。

    4. 不需要计数变量,因为您可以使用 len 方法访问长度。

    mylist = ['fortran', 'basic', 'java', 'python', 'c++']
    letter = 'a'
    a_list = []
    def count_letter(mylist):
      for i in mylist:
        if letter in i:
          a_list.append(i)
      print(len(a_list))
      return a_list
      
    print(count_letter(mylist))
    

    旅途中一切顺利!

    【讨论】:

    • 感谢您的详细解释!这绝对有帮助,因为我对 python 还不太熟悉。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    • 1970-01-01
    • 2023-02-21
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    • 2013-07-24
    相关资源
    最近更新 更多