2016-12-16 9 views
0

私はPythonで "Pythonで退屈なことを自動化する"という本からMadLibプログラムを書いています。私は自分のプログラムを行っていると確信していますが、ユーザが入力を要求するときに、この奇妙な "NameError"を取得し続けます。Python Madlib退屈なことを自動化

ここに私のコードです。私の計画は、メッセージが正常に結合されたことを確認したら、ファイルに内容を書き込むことです。

#!/usr/local/bin/python3 

import sys 

''' 
Create a Mad Libs program that reads in text files and lets the user add 
their own text anywhere the word ADJECTIVE, NOUN, ADVERB, or VERB 
appears in the text file. 
''' 

breaks = ["noun", "verb", "adverb", "adjective"] 


'''Program Usage and Exit Case''' 
if len(sys.argv) < 2: 
    print("Usage: ./mad.py <FileName>") 
    sys.exit() 

'''Read in File and Store Contents in Array''' 
file = open(sys.argv[1]) 
chunk = str(file.read()).split() 

****'''Search through text for keywords''' 
for word in chunk: 
    if word.lower() in breaks: 
     chunk[word] = input("Enter %s: " %word)**** 

newMessage = " ".join(chunk) 
print(newMessage) 


file.close() 
+0

はあなたのコードは、Python 3で実行されていますか?何が起こっているのかは、Python 2で実際に動作しているところです。ここで、入力はあなたが入力したコードとして評価しようとします。スクリプトにprint(sys.version)を追加して、その内容を確認することができます。 – paep3nguin

+0

また、単語は文字列であり、リストの数値インデックスではないので、あなたが試しているので、チャンク[ワード]は機能しません。あなたは代わりに "私のために列挙する(塊)"と "塊[私] = ..."のために行うことができます – paep3nguin

答えて

0

私は、問題は、コードが実際に入力機能は、実際にそれがコードであるかのように、ユーザの入力を実行しようとのPython 2、で実行されていることだと思います。 Python 2Python 3のinput()ドキュメントを比較してください。 Pythonはあなたが入力したものを変数として扱うので、NameErrorを取得します。これは存在しません。 Python 2で動作させたい場合は、入力raw_inputに置き換えてください。単語が文字列であり、チャンクが、リスト内のインデックスとして数を必要とするので、あなたが遭遇するだろう

もう一つの問題は、

chunk[word] = input("Enter %s: " %word) 

が動作しないことです。これを修正するには、forループの現在のインデックスを追跡するだけです。下図のようにそれを行うには、特定のPython的な方法は、enumerate機能である:

for i, word in enumerate(chunk): 
    if word.lower() in breaks: 
     chunk[i] = input("Enter %s: " %word) 

今、すべてが動作するはずです!固定Pythonの3バージョンは以下の通りです:

#!/usr/local/bin/python3 
import sys 

''' 
Create a Mad Libs program that reads in text files and lets the user add 
their own text anywhere the word ADJECTIVE, NOUN, ADVERB, or VERB 
appears in the text file. 
''' 

breaks = ["noun", "verb", "adverb", "adjective"] 


'''Program Usage and Exit Case''' 
if len(sys.argv) < 2: 
    print("Usage: ./mad.py <FileName>") 
    sys.exit() 

'''Read in File and Store Contents in Array''' 
file = open(sys.argv[1]) 
chunk = str(file.read()).split() 

'''Search through text for keywords''' 
for i, word in enumerate(chunk): 
    if word.lower() in breaks: 
     chunk[i] = input("Enter %s: " %word) 

newMessage = " ".join(chunk) 
print(newMessage) 


file.close() 
+0

これは実際に働いた:)!なぜ「動詞」のキーワードが捕捉されなかったのか把握するだけです。 – Tarrell13

関連する問題