2010-11-20 10 views
0

私は、ユーザから読み込まれたリストを使って、ある種のデータベースを作成しています。ユーザーがfinishと入力すると、whileループを停止します。しかし、何らかの理由でループを解除するためにfinish TWICEと入力する必要があります。ループが壊れない

また、リストは返された後で空です。

def readNames(): 
nameList = [] 
count = 0 
while count != -1: #infinite loop 
    addList = raw_input("Please enter a name: ") 
    if addList == 'finish': 
     return nameList 
     break 
    nameList.append(addList) 
    print nameList 

私はそれが

readNames() 
print readNames() 

で働いていた場合にも、ここで出力

Please enter a name: Dave 
['Dave'] 
Please enter a name: Gavin 
['Dave', 'Gavin'] 
Please enter a name: Paul 
['Dave', 'Gavin', 'Paul'] 
Please enter a name: Test1 
['Dave', 'Gavin', 'Paul', 'Test1'] 
Please enter a name: finish 
Please enter a name: finish 
[] 
>>> 
+0

私のためにうまく動作します(IDLEで)。それ以外にも、無限ループを作るもっと簡単な方法があります( 'True:'で十分です;なぜ偽の変数+条件を作りますか?私は実際に 'count = -1'を探していました...)。また、 'break'は不要です(' return'は関数を終了し、ループを終了します)。 – delnan

+0

私にとってはうまく動作しますが、いくつかの注意があります:あなたは無限ループのために 'while True:'を実行するだけで、 'break'に達することはないので、' break'する必要はありません。 'names = readNames()'は私にとってうまくいきます。 PS:あなたのインデントを修正しました。 –

答えて

4

あなたは

readNames() 
print readNames() 

を行うと、あなたが二回機能を実行します。 2回目の実行では、あなたのリストが空のままである理由を「完了」と入力するだけです。

何がやりたいことはこれです:

def readNames(): 
    nameList = [] 
    while True: #infinite loop 
     addList = raw_input("Please enter a name: ") 
     if addList == 'finish': 
      return nameList 
     nameList.append(addList) 

# store the result, then print it 
names = readNames() 
print names 
+0

大変お手伝いしてくれてありがとうございます。これは年を重ねている。 :) – Hypergiant

-1

はあなたと

 
if addList == 'finish': 
     return nameList 
     break 

を置き換えることができませんでしたで、それを起動してチェックしています

 
if addList == 'finish': 
     return nameList 
     count = -1 

ジェームズ

+1

-1これはまだ不必要なだけでなく(私とIvoのコメントも参照してください)、質問にも答えません。 – delnan

+0

同じことが起こっています。 – Hypergiant

+0

ちょうど私の2セントを追加してください。申し訳ありません。 – Bojangles

2

私はあなたの呼び出し元のコードが誤って二回readnames()を呼び出していると思います。

+0

はい、それは起こっているようです。 'print readNames()'を削除した後、期待どおりに破損しています。 – Hypergiant

1

ああ、あなたのコードを掲載した後、私は問題を見ることができます:

readNames() 
print readNames() 

あなたはreadNamesを呼び出し、として標準入力からそれらの名前を読んで計画されている、適切にreturn読み取った名前し、何も(names = readNames())に割り当てないので、の結果をスローします。その後、readNamesにもう一度と呼ぶと、ループを終了しなかったかのように見えます(ループしたが、再度ループするように指示した)。 finishと入力すると、readNamesの2回目の呼び出しは何も入力せずに終了します(nameListはローカル変数なので、関数の実行が終了すると失われます)ので、[]に戻ります。

これを修正するには、(1)一般的なプログラミング知識をブラッシュアップしてください;)(2)names = readNames()のような処理を行います。 print names

+0

多くのおかげで、助けて、残念ながらTHC4kはあなたにそれを打つ。 :) – Hypergiant

関連する問題