【发布时间】:2017-03-22 22:07:46
【问题描述】:
我需要为 edx Python 课程编写一个函数。这个想法是计算出一系列字符串中的字母和单词的数量,并在仅使用 for/while 循环和条件时返回平均字母数。我的代码接近能够做到这一点,但我不能。为了我的一生。弄清楚为什么它不起作用。我已经用头撞了两天了,现在,我知道这可能是一件非常简单的事情,我太白痴了(感觉到我的挫败感?),但我不知道它是什么。
如果我正在查看第 14 行,逻辑是有道理的:如果字符串中的 i 是标点符号(不是一个字母)并且前一个字符(在本例中为 char)不是标点符号(因此是字母),它应该是一个单词。但它仍然把双标点算作单词。但不是全部。
def averageWordLength(myString):
char = ""
punctuation = [" ", "!", "?", ".", ","]
letters = 0
words = 0
if not myString == str(myString):
return "Not a string"
try:
for i in myString:
if i not in punctuation:
letters += 1
elif i in punctuation:
if char not in punctuation:
words += 1
elif char in punctuation:
pass
char = i
if letters == 0:
return "No words"
else:
average = letters / (words + 1)
return letters, words + 1, average
except TypeError:
return "No words"
print(averageWordLength("Hi"))
print(averageWordLength("Hi, Lucy"))
print(averageWordLength(" What big spaces you have!"))
print(averageWordLength(True))
print(averageWordLength("?!?!?! ... !"))
print(averageWordLength("One space. Two spaces. Three spaces. Nine spaces. "))
期望的输出:
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
【问题讨论】:
-
您希望这些打印语句的输出是什么?
-
输出应该是:2.0, 3.0, 4.0, Not a string, No words, 4.75
-
顺便说一句,有很多代码可能会抛出错误,您将它们包装在单个 try 块中。你应该尽量缩小范围。
-
我最近一直在放弃优雅,而不是试图通过我的显示器无聊我的 头脑 来强迫它工作,但你是绝对正确的。跨度>
-
在上面发布了我的解决方案。感谢所有帮助我了解我做错了什么的伟大人物!
标签: python