Python: как сделать функцию, которая запрашивает точное количество слов?


Вот что у меня есть до сих пор:

import string

Таким образом, я заставляю пользователя написать 5-адресное предложение, требующее всего 5 слов:

def main(sentence = raw_input("Enter a 5 worded sentence: ")):
    if len(words)<5:
        words = string.split(sentence)
        wordCount = len(words)
        print "The total word count is:", wordCount

Если пользователь вводит более 5 слов:

    elif len(words)>5:
        print 'Try again. Word exceeded 5 word limit'

Менее 5 слов:

    else:
        print 'Try again. Too little words!'

Он продолжает утверждать, что:

UnboundLocalError: local variable 'words' referenced before assignment
4 2

4 ответа:

Ваша проблема заключается в том, что вы вызываете len(words) до того, как переменная words существует. Это во второй строке вашего второго блока кода.

words = []
while len(words) != 5:
  words = raw_input("Enter a 5 worded sentence: ").split()
  if len(words) > 5:
    print 'Try again. Word exceeded 5 word limit'
  elif len(words) < 5:
    print 'Try again. Too little words!'

Обратите внимание, что в python аргументы по умолчанию привязываются во время определения функции , а не во время вызова функции. Это означает, что ваш raw_input() будет срабатывать, когда main определена, а не когда main вызвана, что почти наверняка не то, что вы хотите.

Прочитайте свой собственный вывод :): переменная 'words' ссылается перед назначением.

Другими словами, вы называете len (слова), прежде чем сказать, что означает "слова"!
def main(sentence = raw_input("Enter a 5 worded sentence: ")):
    if len(words)<5: # HERE! what is 'words'?
        words = string.split(sentence) # ah, here it is, but too late!
        #...

Попробуйте определить его, прежде чем пытаться использовать его:

words = string.split(sentence)
wordCount = len(words)
if wordCount < 5:
    #...

Возьмите входные данные, используя raw_input (). Сделать приложения WordCount, используя Сплит() а затем перечитайте, если она не равна 5.

UnboundLocalError: локальная переменная 'words', на которую ссылаются перед присвоением

Это означает именно то, что он говорит. Вы пытаетесь использовать words перед той частью, где вы выясняете, что такое words на самом деле.

Программы выполняются шаг за шагом. Будьте методичны.