2014-09-28 2 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. True
b. False
c. =
d. SyntaxError: несовместимые типы возврата
e. Ничего из вышеперечисленного

+0

Он возвращает False для меня –

+1

Он вернет 'False' try, выполнив его –

+0

, где вы определяете' aStr' в первой строке. если удалить первую строку, верните «False» для меня тоже. –

ответ

0

Предполагая, что вы скопировали это добросовестно, это спорный вопрос. В коде есть две серьезные ошибки: они не действуют так, как ожидалось, и вы, вероятно, должны найти эти ошибки.

Что вы бы как это сделать, это подсчитать количество длинных и коротких слов, и вернуться False, '=' или True в зависимости от того, как они соотносятся. Поскольку тестовое предложение имеет 7 коротких слов и 3 длинных, оно должно возвращать False.

Ноты if с отступом внутриfor петля. Это означает, что вместо того, чтобы делать проверку после того, как все слова подсчитаны, вы делаете это после каждого слова. Поэтому, как только возникает дисбаланс, 1 > 0, и поэтому вы просто проверяете, длинное ли первое слово, а не то, являются ли большинство слов длинными. Поскольку 'There' длинный (5 или более символов), он должен вернуть True.

Но есть другой ошибка; Второе сравнение не longCount > shortCount, это longCount > longCount. Это, очевидно, никогда не будет правдой. Таким образом, программа будет зацикливаться до тех пор, пока количество коротких слов не будет превышать количество длинных слов - в этом случае оно вернет False - или оно просто выпадет из цикла и вернет '='. В этом случае, как только вы доберетесь до слова 'no', shortWords - 2, longWords - 1, поэтому он возвращает False.

Если правильный ответ должен был быть =, то либо вы его не скопировали, либо ответ был просто неправильным. Одна из возможностей заключается в том, что есть третья ошибка, которую вы невольно исправили при копировании вопроса. Например, я замечаю, что у вас есть вне функции. Это странно, и это должно быть NameError. Но если есть строка, например, aStr = '' где-то ранее в коде, который вы нам не показали, тогда вы должны установить действительную глобальную переменную с именем splitLine. И если в фактическом коде есть опечатка, например, splitline = aStr.split(), тогда ваша функция будет перебирать эту глобальную переменную. Если бы это было, скажем, ''.split(), или 'There there', то в сочетании с двумя другими ошибками, которые приведут к возврату '='.

Смежные вопросы