我正在攻读CS普通考试,我正在做一些练习考试。我无法理解为什么这个问题会回来" ="而不是" False"。我真的不明白
splitLine = aStr.split()
def mostlyLongWords(aStr, threshold):
splitLine = aStr.split()
shortCount = 0
longCount = 0
for word in splitLine:
if len(word) < threshold:
shortCount += 1
else:
longCount += 1
if shortCount > longCount:
return False
if longCount > longCount:
return True
return '='
seussLine = 'There is no one alive who is you-er than you'
print(mostlyLongWords(seussLine, 5))
一个。真
湾假
C。 =
d。 SyntaxError:不兼容的返回类型
即以上都不是
答案 0 :(得分:0)
假设你忠实地复制了这个,这是一个棘手的问题。代码中存在两个严重的错误,导致它没有按预期运行,并且您可能应该发现这些错误。
你喜欢它要做的是计算短词和长词的数量,然后返回False
,'='
或True
他们如何比较。由于测试句有7个短词和3个长词,因此应该返回False
。
但是if
检查在<{em>} for
循环中缩进。这意味着,不是在所有单词都被计算完毕后进行检查,而是在每个单词之后进行检查。因此,只要存在不平衡1 > 0
,因此您只是检查第一个单词是否很长,而不是大多数单词是否很长。由于'There'
很长(5个或更多字符),因此应返回True
。
但是另一个错误;第二个比较不是longCount > shortCount
,而是longCount > longCount
。这显然永远不会成真。因此,程序将循环,直到短字的数量超过长字的数量 - 在这种情况下它将返回False
- 或者它将退出循环并返回'='
。在这种情况下,只要您到达'no'
,shortWords
为2
,longWords
为1
,就会返回False
如果正确答案应该是=
,那么要么你没有忠实地复制它,要么答案是错误的。一种可能性是,在复制问题时,您无意中纠正了第三个错误。例如,我注意到您在函数外部有splitLine = aStr.split()
。这是一个奇怪的事情,它应该是NameError
。但是,如果在代码中较早的某个地方有一行代表你没有向我们展示过的那一行,那么你将设置一个名为aStr = ''
的有效全局变量。如果实际代码中存在拼写错误,例如splitLine
,那么您的函数将循环遍历该全局变量。如果是splitline = aStr.split()
或''.split()
,那么,与其他两个错误相结合,会导致'There there'
被返回。