2014-09-28 22 views
-1

我正在學習CS常見考試,我正在做一些練習測試。我無法理解爲什麼這個問題返回「=」而不是「假」。我真的不明白Python編程多選

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)) 

a。真
b。假
c。 d =
d。語法錯誤:不兼容返回類型
e。以上都不是

+0

它向我返回False – 2014-09-28 20:13:33

+1

它會返回'False'嘗試執行它 – 2014-09-28 20:14:45

+0

您在第一行定義'aStr'的地方。如果刪除第一行也爲我返回'False'。 – 2014-09-28 20:16:25

回答

0

假設你已經忠實地複製了,這是一個詭計的問題。代碼中有兩個嚴重的錯誤,導致它不能按預期行事,並且你大概應該找到這些錯誤。

你最好什麼樣子它做的是計數的短期和長期的字的數量,和False'=',或True取決於他們如何比較回報。由於測試句子有7個短單詞和3個長單詞,它應該返回False

if檢查都縮進for循環。這意味着,在所有單詞已經計算完畢後,不要再進行檢查,而是在每一個單詞之後進行檢查。所以一旦出現不平衡,1 > 0,因此你只是檢查第一個單詞是否很長,而不是大部分單詞是否長。由於'There'很長(5個或更多字符),因此應該返回True

但是有另一個錯誤;第二個比較不是longCount > shortCount,它是longCount > longCount。這顯然永遠不會是真的。因此,程序將循環,直到短字的數量超過長字的數量 - 在這種情況下,它將返回False - 否則它將剛剛退出循環並返回'='。在這種情況下,只要您找到單詞'no',shortWords2,longWords1,因此它返回False

如果正確答案應該是=,那麼要麼你沒有忠實地複製它,要麼答案是錯誤的。一種可能性是,在複製問題時,你有無意識地糾正了第三個錯誤。例如,我注意到你已經獲得了以外的splitLine = aStr.split()的功能。這是一件很奇怪的事情,它應該是一個NameError。但是,如果在代碼的某個地方有一條線,例如aStr = '',您沒有向我們顯示,那麼您將設置一個名爲splitLine的有效全局變量。如果在實際代碼中存在拼寫錯誤,例如splitline = aStr.split(),那麼您的函數將循環遍歷該全局變量。如果它是,例如,''.split()'There there',則與其他兩個錯誤組合,將導致返回'='