2016-04-09 4 views
-5

このエラーは引き続き発生しますか?私は、raw_input()がinput()として読み込まれていると思って、ユーザー入力を文字列として見ることができません。どのように私はこれが動作するようにこれを変更することができますか分かりません。そして、いいえ、質問:「Python 2.7はユーザー入力を受け取り、引用符を使わずに文字列として操作する」は私の質問に答えません。文字列を変数に変換する(unary +: 'str'の不良オペランドタイプ)

options = ["An animal", "A food", "A fruit", "A number", "A superhero name", "A country", "A dessert", "A year"] 
#"options" become variables 
for i in options: 
    if i[0:3] == "An ": 
     exec("%s = %s" % (i[3::], raw_input("Enter " + i + " "))) 
    else: 
     exec("%s = %s" % (i[2::], raw_input("Enter " + i + " "))) 

私はこのエラーが供給保つ:

NameError: name 'input' is not defined 
+1

おそらくこの部分を指しているでしょう。 raw_input( "Enter"、+ i + "") '。あなたは何が間違っているのを見ますか? –

+0

@Penguin: 'raw_input(" Enter "、+ i +" ")'を変数に割り当て、次に 'raw_input'があるところに変数を置きます。したがって、 'a = raw_input(" Enter "、+ i +" ")'、そして 'exec("%s =%s "%(i [3 ::]、a)'。 –

+1

これは2時間前に質問したこのコードに関するもう1つの質問は、このサイトですでに回答済みのトピックに関するものです。ここで質問する前に、質問を調べてください。 "site:stackoverflow"で例外名を検索してみてください。 com "を参照して他のSOの回答を確認してください。 – skrrgwasme

答えて

2

あなたが十分な情報を提供しなかったが、私の霊魂力はあなたが「動物を入力してください」と促されたとき、あなたはinputを入力したことを教えてください。ループを通る最初の反復のためにそう

exec("%s = %s" % (i[3::], raw_input("Enter " + i + " "))) 

、これは次のようになります:次に

exec("%s = %s" % ("animal", "input")) 

とき

は、あなたが取得する場合は特に、精神的にあなたのコードが何をしているかを歩くようにしてください代入が発生します:

exec("animal = input") 

入力と同じ意味:

animal = input 

直接Pythonインタープリタに。おそらく、引用符で右側を囲むように意図

NameError: name 'input' is not defined 

実行時に文字列としてそれを処理するために:あなたが得るようinputは、定義されていない

exec("%s = '%s'" % ("animal", "input")) # Note that this is unsafe. See the note below. 

すべてのことが言われています、私はこのコードが信じられないほど脆弱だと言うことを義務づけられています。ループが "A superhero name"に反復すると、superhero nameは有効な識別子ではないため、破損します。代わりにおそらくスペース上の文字列を分割し、おそらく2番目の単語を取るか、すべてのスペースを、例えばアンダースコアと置き換えるべきです。さらに、入力に引用符を付けることでユーザーがエスケープできないように、ユーザー入力をサニタイズする必要があります。 (execをユーザ入力に完全に使用することを避けることです。変数名が本当に必要ですか?プロンプト文字列を入力文字列にマッピングするPython辞書を使用しないのはなぜですか?)

関連する問題