2016-04-12 7 views
0

Ich kann nicht verstehen, warum Python nicht ausdruckt, wie viele Köpfe und Schwänze es in meinem Münzwurf Spiel gab? und druckt konsequent aus 0, 100Warum gibt Python nicht die richtigen Antworten aus?

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

irgendwelche Ideen?

Antwort

2

Sie haben hier einen Fehler

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

Was Sie wollen, ist

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

und konsequent 0 Ausdrucken wird, 100

Aufgrund dieser Fehler oben, wenn du analysierst das wenn sonst, weil flip == heads immer falsch war, du immer g et haben die else: tails += 1 ausgeführt, daher tails = 100 und heads = 0

+0

yeh mein Kumpel wies gerade darauf hin! ha cheers – NewUser123

+0

Eine starke typisierte Sprache verhindert diese Art von Problemen. –

0

Sie haben Ihr heads unter Anführungszeichen zu setzen, um es ein String zu machen, und aus diesem Grund Ihre if-Anweisung immer false ist, also Köpfe ist immer 0, und tails wird immer 100 .

diese

Versuchen:

# 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

Sie bewusst sein müssen einfach die heads (die Variable) nicht das gleiche wie 'heads' (die Zeichenkette) ist. In jedem Fall gibt es bessere (na ja, mehr pythonische) Wege, um eine einfache Zweier-Auswahl wie diese in Python zu machen.

Sie können nur so etwas wie die folgende Liste Verständnis verwenden:

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

Der Ausdruck für heads abgebaut werden können:

  • Beginnen Sie mit einer leeren Liste und eine Schleife 100-mal ausgeführt werden.
  • Für jedes Mal, wenn ein zufälliger 0/1 Wert 1 ist, fügen Sie 1 zur Liste hinzu.
  • die Liste Länge am Ende Get ist es die Anzahl der Sie

Alternativ 1. gekippt, können Sie die Liste mit genau 100 zufällig 0/1 Werte füllen könnte und sie einfach zusammenfassen:

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

Das ist einfacher als das ursprüngliche Code-Snippet, das ich zur Verfügung gestellt habe, aber es zeigt nicht die volle Leistung des Listenverständnisses, da es Transformation, Iteration und Auswahl haben kann: Der folgende Code gibt zum Beispiel die Quadrate aller positiven geraden Zahlen kleiner als oder gleich 20:

>>> [i * i for i in range(1,21) if i % 2 == 0] 
[4, 16, 36, 64, 100, 144, 196, 256, 324, 400] 
Verwandte Themen