2016-04-02 21 views
0

ランダムにシャッフルされたリストの最初の要素が何であるかに基づいて値(1)を出力する簡単な、アルファ関数を作成しました。Python:単純な関数内から予期せぬ印刷値

以下のコードを見てみましょう:変数を作成して1に設定しています。その後、小さなリスト(1,2,3)を作成してリストをシャッフルしています。リストの最初の要素(シャッフル後)が1または2の場合、 'correct'の値を出力しますが、リストの最初の要素が3の場合は 'correct'を0に設定し、関数を再度実行します。 ifステートメントからわかるように、 'value'が0に設定されていると、印刷が実行される前に関数が再度実行されているため(chair())、これはまったく印刷されません。

これを実行すると、5つの値のうち1つを見つけることが予想されました。問題は、0値も印刷されていることです。これは非常にシンプルな機能のように思えますが、なぜこれが起こっているのか分からないのはちょっとでも愚かな気がします。何か案は?

def chair(): 

    correct = 1 

    a = [1,2,3] 
    random.shuffle(a) 

    if a[0] == 3: 
     correct = 0 
     chair()    #run function again without printing 

    print correct 


for i in range(5): 
    chair() 

答えて

0

あなたの関数は再帰的であるので、あなたは印刷を避けるために、再び機能をリコールしたとき、機能がまだ終了します。 elseステートメントを追加した場合、それらのゼロが消滅することがわかります。例:

def chair(): 

    correct = 1 

    a = [1,2,3] 
    random.shuffle(a) 

    if a[0] == 3: 
     correct = 0 
     chair()    #run function again without printing 
    else: 
     print correct 


for i in range(5): 
    chair() 

編集:文法 編集:例

+0

パーフェクト。その小さな変化はまさに私が必要としていたものでした。ありがとうございました。 – Steve

1

ちょうどcorrectを変更しませんchair()を呼び出します。 correct = chair()する必要があります。その問題はchair()で何も返されません。それはそれを印刷します。あなたは、関数の外側に印刷を移動させ、代わりに返す必要があります:

def chair(): 

    correct = 1 

    a = [1,2,3] 
    random.shuffle(a) 

    if a[0] == 3: 
     correct = chair() 

    return correct 


for i in range(5): 
    print chair() 
+0

() 'の代わりにそれを割り当てるので' – danidee

+0

@danideeをcorrect'ことができない、あなただけの '戻り椅子理由:理由はありません。いずれにせよ利益は見られません。 – zondo

+0

@ダニデーそれは基本的に '正しい'を余分にしませんか?値はまだforループに返されますか? – jDo

関連する問題