2016-04-02 18 views
0

Rastgele karıştırılan listeden ilk öğenin ne olduğuna dayalı olarak bir değeri (1) basan basit, arbritrary bir işlev oluşturdum.Python: Basit bir işlev içinde beklenmeyen yazdırma değerleri

Aşağıdaki koda bakıyorum: Bir değişken oluşturuyorum ve 1 olarak ayarladım, o zaman küçük bir liste oluşturuyorum (1,2,3) ve sonra listeyi karıştırıyorum. Eğer bu listenin ilk öğesi (shuffle'dan sonra) 1 veya 2 ise, bu durumda 'doğru' değerini yazınız, eğer listenin ilk elemanı 3 ise, '0'a' ayarlayınız. daha sonra işlevi tekrar çalıştırın. If ifadesinden görebildiğiniz gibi, 'value' değeri 0 olarak ayarlandığında, herhangi bir baskı gerçekleşmeden önce fonksiyonun tekrar çalıştırıldığından (sandalye()) bunun basılmasını beklemiyorum.

Bunu çalıştırdıktan sonra, 1'in 5 değerini içeren bir çıktı bulması bekleniyor. Sorun şu ki, yazdırılan 0 değeri görüyorum. Bu çok basit bir işlev gibi görünüyor ve bunun neden olduğunu görmediğim için biraz aptal hissediyorum. Herhangi bir fikir?

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() 

cevap

0

İşleviniz özyinelemeli, yani baskı önlemek için tekrar işlevini çağırmak zaman, işlev hala bitirecektir. Başka bir ifade eklediyseniz, bu sıfırlar kaybolur. Ör:

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() 

düzenleme: gramer düzenleme: örnek

+0

Mükemmel. Bu küçük değişim tam ihtiyacım olan şeydi. Teşekkür ederim. – Steve

1

Sadece correct değiştirmez chair() arayarak. correct = chair() yapmalısınız. Sorun şu ki chair() hiçbir şey döndürmüyor; yazdırır. Sen fonksiyonun dışına baskı taşımak ve onun yerine dönmelidir:

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

() 'yerine onu atama' – danidee

+0

@danidee Doğru' edemez sadece 'dönüş sandalye nedenleri: Neden yok. Her iki şekilde de bir avantaj göremiyorum. – zondo

+0

@danidee Temelde 'doğru' gereksiz olmaz mıydı? Değer hala for döngüsüne döndürülebilir mi? – jDo

İlgili konular