我需要为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());
答案 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()),因此更加困难。
我接近这个的方式是:
取平均字母数量。
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."