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

时间:2017-03-22 22:07:46

标签: python

我需要为edx Python课程编写一个函数。这个想法是计算字符串系列中的字母和单词的数量,并返回平均字母数,而只使用for / while循环和条件。我的代码 close 能够做到这一点,但我做不到。为了我的生命。弄清楚它为什么不起作用。现在,我一直在猛烈抨击它两天,而且我知道这可能是非常简单的,我太愚蠢了(感觉到我的挫折感?),但我不知道它是什么。

如果我正在看第14行,那么逻辑是有道理的:如果我在字符串中是标点符号(不是一个字母)而前一个字符(在这种情况下为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

我做错了什么?!

9๏̯͡๏6

最终更正:

student.Add(new Students());

3 个答案:

答案 0 :(得分:3)

else:
    average = letters / (words + 1)
    return letters, words + 1, average

您默认情况下会在单词中添加1 ...这在所有情况下均无效:"Hi!"是一个很好的例子。这实际上是推迟所有字符串的原因:任何时候字符串都不会以一个单词结束,你的函数将会关闭。

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

答案 1 :(得分:3)

当字符串开始并带有标点字符时会出现问题:前一个字符仍然是"",并且不被视为标点字符,因此计数中不存在的单词。 / p>

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

punctuation = " !?.,"

因为如果c是s的子字符串,则测试c in s返回true,如果c是s的字符。并且每个字符串中都包含空字符串。

第二个问题发生在结束,如果字符串以单词终止,则不计算(你的word+1是一种修复方法吗?),但是如果字符串用标点符号终止,计算最后一个字。

for循环后添加:

if char not in punctuation:
   words += 1

现在没有必要添加1,只需使用

average = letters / words

答案 2 :(得分:0)

由于我假设您不允许使用内置的字符串函数(如split()),因此更加困难。

我接近这个的方式是:

  1. 将句子拆分为单词列表。
  2. 计算每个单词中的字母。
  3. 取平均字母数量。

    def averageWordLength(myString):

    punctuation = [" ", "!", "?", ".", ","]
    
    if not isinstance(myString, str):
        return "Not a string"
    
    split_values = []
    word = ''
    for char in myString:
        if char in punctuation:
            if word:
                split_values.append(word)
            word = ''
        else:
            word += char
    if word:
        split_values.append(word)
    
    letter_count = []
    for word in split_values:
        letter_count.append(len(word))
    
    if len(letter_count):
        return sum(letter_count)/len(letter_count)
    else:
        return "No words."