2

これが私がこれまでに持っているものです:

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

4 に答える 4

2

あなたの問題はlen(words)、変数wordsが存在する前に呼び出していることです。これは、2 番目のコード ブロックの 2 行目にあります。

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()メインが呼び出されたときではなく、メインが定義されたときに起動することを意味します。これは、ほとんどの場合、必要なものではありません。

于 2012-02-23T04:14:32.043 に答える
1

独自の出力を読んでください:):'words'変数は割り当て前に参照されます。

つまり、「words」の意味を言う前にlen(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:
    #...
于 2012-02-23T04:18:25.953 に答える
0

UnboundLocalError:割り当て前に参照されるローカル変数'words'

これはまさにそれが言うことを意味します。あなたは実際にwords何であるかを理解する部分の前に使用しようとしています。words

プログラムは段階的に進行します。整然と。

于 2012-02-23T04:40:02.250 に答える
0

raw_input() を使用して入力を取得します。Split() を使用して wordcount を実行し、5 に等しくない場合は再読み込みします。

于 2012-02-23T04:32:29.597 に答える