0

文字列をその単語に置き換えようとして[NOUN]います。私は無知です!

以下は私のコードです - これは多くのエラーを返します - 変数 story は文字列で listOfNouns はリストです - そのため、文字列を分割してリストに変換しようとしています.

def replacement(story, listOfNouns):   
    length = len(story1)
    story1 = story.split()
    for c in range(0,len(story1)):
        if c in listOfNouns:
             story1[c]= 'NOUN'
             story = ''.join(story)      
    return story


replacement("Let's play marbles", ['marbles'])上記の関数を次のように呼び出したときに表示されるエラー メッセージは次のとおりです。

Traceback (most recent call last):
  File "<pyshell#189>", line 1, in <module>
    replacement("Let's play marbels", ['marbels'])
  File "C:/ProblemSet4/exam.py", line 3, in replacement
    length = len(story1)
UnboundLocalError: local variable 'story1' referenced before assignment

新しいstory1リストを別のリストの別の要素に置き換えるにはどうすればよいですか?

タプルを変更して新しい文字列を返すにはどうすればよいです
Let's play [NOUN]か?

誰でも助けてもらえますか?私は迷子になり、Python/Java で持っているすべての知識を使用して、このがらくたを理解するために何時間もこれを試してきました!

4

3 に答える 3

2

これは、問題を解決するためのより短く簡単な方法です。

def replacement(story, nouns):
    return ' '.join('[NOUN]' if i in nouns else i for i in story.split())

出力

In [4]: replacement('Let\'s play marbles, I\'m Ben', ['marbles', 'Ben'])
Out[4]: "Let's play [NOUN], I'm [NOUN]"
于 2013-03-24T17:46:43.640 に答える
0

問題は、story1 の値を設定する前に、story1 の長さを計算することです。

これは、より「pythonic」な方法で反復し、分割された文字列ではなく元の文字列を結合するバグを修正する修正バージョンです。

def replacement(story, listOfNouns):   
    story1 = story.split()
    for i,word in enumerate(story1):
        if word in listOfNouns:
             story1[i] = '[NOUN]'
    return ' '.join(story1)      

print(replacement("Let's play marbles", ['marbles']))

出力:

Let's play [NOUN]

単語を含む単語の一部を置き換えることなく、正規表現を使用して単語のすべてのインスタンスを一度に効率的に置き換える別のソリューションを次に示します。

import re

stories = [
    'The quick brown fox jumped over the foxy lady.',
    'Fox foxy fox lady ladies lady foxy fox']

def replacement(story, listOfNouns):
    story = re.sub(r'''
        (?ix)   # ignore case, allow verbose regular expression definition
        \b      # word break
        (?:{})  # non-capturing group, string to be inserted
        \b      # word break
        '''.format('|'.join(listOfNouns)),'[NOUN]',story) # OR all words.
    return story

for story in stories:
    print(replacement(story,'fox lady'.split()))

出力:

The quick brown [NOUN] jumped over the foxy [NOUN].
[NOUN] foxy [NOUN] [NOUN] ladies [NOUN] foxy [NOUN]
于 2013-03-24T17:49:57.260 に答える
0

「割り当て前に参照された」というエラーは、次のことを指しています。

length = len(story1)
story1 = story.split()

最初に story1 を割り当ててから、その長さを取得する必要があります。

于 2013-03-24T17:27:06.750 に答える