2017-03-25 6 views
1

私は、以下の機能のために正常に動作するロジックを取得し、いくつかの問題を抱えてきたにユーザ入力を追加するには:機能がリスト

def answers_body(): 
    user_preference = [] 
    user_preference.extend(input("Please enter your answer: ")) 

私の質問は本当ににダウンしています。リストを呼び出すたびにリストがクリアされないように、私はこれをどのように書き直すことができますか?私はこのプログラムにグローバル変数を使用することを避けています。このため、経験豊富なプログラマーには、グローバル変数/リストに頼らずにこれを修正する方法についてアドバイスをいただき、本当に感謝しています。

ありがとうございます。

+1

私は関数の引数にリストを定義する場合、 'preference_list.append' +デフanswers_body'のような引数にリストを定義(preference_list = []) ' –

+0

は、だから私はそれに追加し続けることができますか?つまり、answers_bodyを2回実行した場合、2回の実行後に両方の回答がリスト内に存在するでしょうか? 編集:これは機能しました!どうもありがとうございました :)。 1つの最後の質問。将来この関数からリストを取得したい場合は、どうすればよいでしょうか?関数の外で試してみると、Pythonは未定義のエラーを投げます。 –

+0

これはグローバルな名前空間にはないので、それを返して次のようにしなければなりません: 'user_preference = answers_body()' –

答えて

2

1つの方法は、関数呼び出しの外にを配置することです。 list.extendは、主に複数の値をリストに追加するために使用されるため、代わりにlist.appendを使用することをおすすめします。

preference_list = [] 
def answers_body(body): 
    body.append(input("Please enter your answer: ")) 
for i in range(10): 
    answers_body(preference) 
print(preference_list) 

あなたはグローバル変数として何それをしない場合もanswers_bodyの名前スコープにpreference_listを保存することができます。

def answers_body(): 
    answers_body.preference_list.append(input("Please enter your answer: ")) 

answers_body.preference_list = [] 
for i in range(10): 
    answers_body() 
print(answers_body.preference_list) 
+0

関数のパラメータとしてリストを渡すのはどうですか? – Netwave

+0

これをグローバル変数にすることなくこれを行うにはどうしますか?またはそれは失われた原因です。関数の複数の実行からユーザーの入力を保存する別の方法を調べる必要がありますか? –

+1

@pixelrain新しい方法を使ってグローバル変数にすることはできません – abccd

関連する問題