2017-01-05 4 views
-1

ユーザ入力を文字列として受け取るPythonプログラムをビルドすることになっています。このプログラムは、 "John"が入力されてからリストを印刷するまで、リストに入力されたすべての文字列を追加するために必要です。スクリプト内でNameError例外がスローされました - わからない理由

本質的に、このプログラムは誤って入力されたすべての文字列を "John"が正しい文字列であるリストに格納します。

しかし、私は次の例外を取得しています:

Traceback (most recent call last): 
    File "/home/dwayne/doen.py", line 7, in <module> 
    if names_entered == "John": 
NameError: name 'names_entered' is not defined` 

は、これは私がこれまで持っているコードです:

name = "John" 
while name != 'John': 
names_entered = raw_input('Enter your name: ') 


if names_entered == "John": 
print [] 
+1

これは 'while'ループには入りません。ジョン: 'name'のは「 名=『』 names_entered =『』 しばらく名=!こんにちはそれはちょうど私の下に次のコードでは『ジョン』 を印刷し@jaltman John'' –

答えて

3

あなたのインデントが正しくありません。 whileループのボディとifはインデントされなければなりません。その後

、コンパイラは非常に正しいです:場合はながらと同じレベルであるので、names_enteredは、その時点での値を持つという保証はありません。あなたが「ジョン」ループの前に、あなたがループに入ることは決してないだろうしを強制

  1. は、あなたが他の問題を抱えている、ことを修正した場合でも。

  2. "John"が見つかると、空のリストが印刷されます。
  3. 他の名前をリストに追加するコードはありません。

これはあなたが動くことを望みます。それでもリストに名前は蓄積されません。それをあなたに。

name = "" 
while name != 'John': 
    names_entered = raw_input('Enter your name: ') 

    if names_entered == "John": 
     print [] 
0

私はあなたに論理的な助けを与えることができます。 WHILEループの前に "name"変数を "John"に設定しています。これは "name"変数が "John"と等しいかどうかを確認することです。これが意味することは、どんな種類の入力を受け入れる前にWHILE条件が満たされるということです。つまり、whileループ内で宣言されたものは決して触れられないので、実際に宣言されることはありません。したがって、WHILEループの下のIF文で "names_entered"にアクセスすると、 "names_entered"には決して値が割り当てられませんでした(宣言されていない)ので、エラーが発生します。あなたはループをしながら、してもらう前に、空の文字列に「名前」変数を設定し

私の論理的な解決策はこれです。ループをヒットすると、条件は満たされません(空の文字列は "John"と等しくない)ので、ループの内容が考慮されます。

あなたが入力としていることは、「John」という名前で最終的に終わることがわかっている名前のリストを作成することです。 WHILEループに入る前にそれらの名前をすべて追加するリスト(文字列配列)が必要です。 "name"変数を宣言するところで、空の文字列配列( "names_entered")を宣言します。次に、ユーザーからの入力( "name"変数への入力)を受け入れる場合は、取得した各エントリをnames_entered変数に追加します。この変数は、最終的に出力されます。

コードでは、ユーザー入力を直接リストに入れようとしています。代わりに、あなたの "name"に入力を割り当てます。これは "names_entered"に "name"を加えた後にWHILEループで "John"と等しいかどうかを調べるためにテストされます。 "name"が "John"に等しい場合、WHILE条件が満たされ、WHILEループ以下のコードが処理されます。

リストを印刷する場合、収集した名前の配列をループして、それぞれをコンソールに出力する必要があります。たぶん "for"ループ?

申し訳ありませんが、コードが不足していますが、うまくいけばロジック支援が役立ちます。

幸運を祈る!

+0

''に等しいん: 名= raw_input(「自分の名前を入力してください:」) 場合names_entered ==名: プリントあなたは第二の実際のコードからバックステップしなければならないつもりだ –

+0

をnames_entered。あなたがしたいことを考えてみてください。ユーザ入力を受け取り、それぞれのエントリは単一の名前を表します。あなたは "John"という名前に出会うまでこれをしたいと思っています。一方、入力したすべての名前を追跡するために、作成しているリストに各エントリを追加します。 "John"に遭遇すると、ループはなくなり、作成したリストが印刷されます。あなたがループから脱落した場合は、すでに「John」を持っていることをすでに知っているので、作成したリストを印刷することができます。それ以上のテストは必要ありません。 – jeristotle

関連する問題