Python: Как сделать функцию, которая запрашивает точное количество слов? - PullRequest
2 голосов
/ 23 февраля 2012

Вот что у меня есть на данный момент:

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 голосов
/ 23 февраля 2012

Ваша проблема в том, что вы вызываете 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 аргументы по умолчанию связаны не во время вызова функции, а во время definition Это означает, что ваш raw_input() будет срабатывать при определении main, а не при вызове main, что почти наверняка не то, что вы хотите.

1 голос
/ 23 февраля 2012

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

Другими словами, вы вызываете len (words) перед тем, как сказать, что означает 'words'!

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:
    #...
0 голосов
/ 23 февраля 2012

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

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

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

0 голосов
/ 23 февраля 2012

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

...