2016-04-12 25 views
0

Python'un yazı tura atma oyununda kaç tane başlık ve kuyruk olduğunu neden yazdırdığını anlayamıyorum. ve tutarlı, 0100Python neden doğru cevapları yazdırmıyor?

# part 2 
import random 
heads = 0 
tails = 0 

flip_coin = ['heads', 'tails'] 

while (heads + tails) < 100: 
    flip = random.choice(flip_coin) 
    if flip == heads: 
     heads += 1 
    else: 
     tails += 1 
print(heads) 
print(tails) 

herhangi bir fikir dışarı yazdırıyor?

cevap

2

Sen eğer yukarıda burada

if flip == heads: # You are comparing with the heads count integer variable 

bir hata İstediğin

if flip == 'heads': # You want to know if it's the string 'heads' 

ve tutarlı 0 çıktısını Çünkü, bu hatayı 100

yaptı eğer analiz ederseniz, eğer flip == heads daima yanlış olduğundan, her zaman et else: tails += 1 dolayısıyla tails = 100 ve heads = 0

+0

Sadece arkadaşım bunu işaret etti! ha cheers – NewUser123

+0

Güçlü yazılı bir dil kullanmak, bu tür sorunları önleyecektir. –

0

Bunu bir dize yapmak tırnak altında heads koymayı unutmuş ve idam çünkü beyanı her zaman false ise sizin, dolayısıyla kafaları hep 0'dır ve tails olacak hep 100 olduğunu .

bu deneyin: sadece heads (değişken) farkında olması gerekir

# part 2 
import random 
heads = 0 
tails = 0 

flip_coin = ['heads', 'tails'] 

while (heads + tails) < 100: 
    flip = random.choice(flip_coin) 
    if flip == 'heads': 
     heads += 1 
    else: 
     tails += 1 
print(heads) 
print(tails) 
0

'heads' (dize) ile aynı değildir. Her durumda, Python'da böyle basit bir-iki seçim yapmak için daha iyi (daha iyi Pythonic) yollar vardır. Boş bir listeyle

  • Başlangıç ​​ve bir döngü 100 kez çalıştırın:

    >>> import random 
    >>> count = 100 
    >>> heads = len([1 for i in range(count) if random.randint(0,1) == 1]) 
    >>> tails = count - heads 
    >>> print(heads, tails) 
    43 57 
    

    heads için ifade etmek bölünebilir:

    Sadece Aşağıdaki liste anlama gibi bir şey kullanabilirsiniz.

  • Rastgele bir 0/1 değerinin 1 olduğu her seferinde, listeye 1 ekleyin.
  • sonunda liste uzunluğunu alın size tam 100 rastgele 0/1 değerlerle listesini doldurmak ve sadece bunları özetlemek olabilir, kaç kez sen

Alternatif 1. çevrilmiş bulunuyor:

>>> heads = sum([random.randint(0,1) for i in range(100)]) 

Bu, sağladığım orijinal kod parçacığından daha basittir, ancak dönüşüm, yineleme ve seçim yapabilmesi için liste kavramanın tam gücünü göstermez: Örneğin, aşağıdaki kod, tüm pozitif çift sayıların karelerinden daha az veya 20:

'e eşittir
>>> [i * i for i in range(1,21) if i % 2 == 0] 
[4, 16, 36, 64, 100, 144, 196, 256, 324, 400] 
İlgili konular