在Python中将变量与列表中的所有项进行比较

在Python中将变量与列表中的所有项进行比较,python,Python,我需要为edx Python课程编写一个函数。其思想是计算一系列字符串中的字母和单词数,并返回平均字母数,同时仅使用for/while循环和条件。我的代码几乎可以做到这一点,但我不能。为了我的生命。找出它为什么不起作用。我已经用头撞了它两天了,我知道这可能是一件非常简单的事情,我太蠢了以至于看不见(感觉到我的挫败感?),但我不知道它是什么 如果我看第14行,逻辑是有意义的:如果字符串中的I是标点符号(不是字母),而前面的字符(在本例中是char)不是标点符号(因此是字母),那么它应该是一个单词。

我需要为edx Python课程编写一个函数。其思想是计算一系列字符串中的字母和单词数,并返回平均字母数,同时仅使用for/while循环和条件。我的代码几乎可以做到这一点,但我不能。为了我的生命。找出它为什么不起作用。我已经用头撞了它两天了,我知道这可能是一件非常简单的事情,我太蠢了以至于看不见(感觉到我的挫败感?),但我不知道它是什么

如果我看第14行,逻辑是有意义的:如果字符串中的I是标点符号(不是字母),而前面的字符(在本例中是char)不是标点符号(因此是字母),那么它应该是一个单词。但它仍然将双标点符号计算为单词。但不是所有的

期望输出:

2, 1, 2.0
6, 2, 3.0
20, 6, 4.0
Not a string
No words
38, 8, 4.75
我到底做错了什么

٩๏̯͡๏۶

最后更正:

for i in myString:
    if i not in punctuation:
        letters += 1
        if char in punctuation:
            words += 1
    char = i
默认情况下,您正在向单词添加1。。。这并非在所有情况下都有效:
“嗨!”
就是一个很好的例子。这实际上是延迟所有字符串的原因:只要字符串没有以单词结尾,函数就会被关闭

提示:如果最后一个单词后面没有标点符号,您只需要添加一个

默认情况下,您正在向单词添加1。。。这并非在所有情况下都有效:
“嗨!”
就是一个很好的例子。这实际上是延迟所有字符串的原因:只要字符串没有以单词结尾,函数就会被关闭


提示:如果最后一个单词后没有标点符号,则只需添加一个。

当字符串以标点符号字符开头时,会出现问题:前一个字符仍然是
,并且不被视为标点符号,因此将统计不存在的单词

您可以在符号列表中添加
,或执行以下操作:

punctuation = " !?.,"
因为在s中测试
c
如果c是s的子字符串,则返回true,如果c是s的字符,则返回aka。空字符串包含在每个字符串中


第二个问题出现在结尾,如果字符串以单词结尾,则不计算该问题(您的
单词+1
是否解决了该问题?),但如果字符串以标点符号结尾,则计算最后一个单词

for
循环之后添加以下内容:

if char not in punctuation:
   words += 1
现在不需要添加1,只需使用

average = letters / words

当字符串以标点字符开头时,会出现问题:前一个字符仍然是
,并且不被视为标点字符,因此计算中不存在的单词

您可以在符号列表中添加
,或执行以下操作:

punctuation = " !?.,"
因为在s中测试
c
如果c是s的子字符串,则返回true,如果c是s的字符,则返回aka。空字符串包含在每个字符串中


第二个问题出现在结尾,如果字符串以单词结尾,则不计算该问题(您的
单词+1
是否解决了该问题?),但如果字符串以标点符号结尾,则计算最后一个单词

for
循环之后添加以下内容:

if char not in punctuation:
   words += 1
现在不需要添加1,只需使用

average = letters / words

这变得更加困难,因为我假设不允许使用内置的字符串函数,如split()

我的方法是:

  • 将句子分成一组单词。
  • 数一数每个单词中的字母。
  • 取字母的平均数量。

    def averageWordLength(myString):


  • 这变得更加困难,因为我假设不允许使用内置的字符串函数,如split()

    我的方法是:

  • 将句子分成一组单词。
  • 数一数每个单词中的字母。
  • 取字母的平均数量。

    def averageWordLength(myString):


  • 这些打印语句的期望输出是什么?输出应该是:2.0、3.0、4.0,不是字符串,没有单词,4.75作为旁白,有很多代码可能会抛出错误,您正在一个try块中包装这些错误。你应该尽量缩小范围。最近,我一直在放弃优雅,而不是通过显示器让我的思维枯燥来强迫它工作,但你绝对是对的。我在上面发布了我的解决方案。感谢所有帮助我认识到我做错了什么的伟大的人!这些打印语句的期望输出是什么?输出应该是:2.0、3.0、4.0,不是字符串,没有单词,4.75作为旁白,有很多代码可能会抛出错误,您正在一个try块中包装这些错误。你应该尽量缩小范围。最近,我一直在放弃优雅,而不是通过显示器让我的思维枯燥来强迫它工作,但你绝对是对的。我在上面发布了我的解决方案。感谢所有帮助我认识到我做错了什么的伟大的人!我想让“
    ”不是标点符号
    (见第13行),一切都好,我收回我说的话。我将标点符号转换为
    “!?,”
    ,但没有考虑它。你提出了一个正确的观点:)Aaaaaa,我从来没有想过问题会出现在字符串的开头。我在上面发布了我的解决方案,但根据你和@TemporalWolf的建议,我按单词的开头而不是结尾来计算单词。我希望
    “不要用标点符号
    ”为
    False
    (见第13行),一切正常。我收回我说的话。我将标点符号转换为
    “!?,”
    ,但没有考虑它。你提出了一个正确的观点:)Aaaaaa,我从来没有想过问题会出现在字符串的开头。我在上面发布了我的解决方案,但根据你和@TemporalWolf的建议,我按单词的开头数了数