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
[]
>>>
4

4 に答える 4

4

あなたがするとき

readNames()
print readNames()

関数を 2 回実行します。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
于 2010-11-20T16:52:29.870 に答える
2

readnames()呼び出しコードが誤って2 回呼び出していると思います。

于 2010-11-20T16:51:04.123 に答える
1

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

readNames()
print readNames()

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

names = readNames()これを修正するには、(1)一般的なプログラミング知識を磨きます;)そして(2) ;のようなことをします。print names

于 2010-11-20T16:54:35.907 に答える
-1

交換できませんでしたか

addList == '終了' の場合:
        nameList を返す
        壊す

addList == '終了' の場合:
        nameList を返す
        カウント = -1

?

ジェームズ

于 2010-11-20T16:48:40.367 に答える