2017-02-05 8 views
1

ich kann nicht herausfinden, wo ich Fehler gemacht habe, aber Druck ist immer wahrscheinlich Siege 100%Python Logik Black Jack sim

import random 

Deck einrichten und überprüft Noten von einzelnem Spiel

def singleGame(): 
    cardsVal = [11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10] # deck of cards 
    onhandScore = 17 # score on hand 
    cardNumber = pickOneCard() 
    newCardValue = cardsVal[cardNumber - 1] 
    onhandScore = onhandScore + newCardValue 

prüfen wenn gewinnen, verlieren oder

if onhandScore > 21: 
    result = 1 
elif onhandScore == 21: 
    result = 0 
else: 
    result = -1 

return result 

Wählen Sie eine Karte von 13 binden und das Rück seine Kartennummer

def pickOneCard(): 
    return random.randint(1, 13) 

prüfen n Simulationen und drucken die Ergebnisse

def multipleGames(n): 

Zur Aufzeichnung

defeat = 0; 
certainVictory = 0; 
likelyVictory = 0; 

Simulieren n Spiele eins nach dem anderen

for i in range(n): 
    result = singleGame() 

prüfen Noten Partitur und Werte speichern

if result == 1: 
    defeat += 1 
elif result == 0: 
    certainVictory += 1 
else: 
    likelyVictory += 1 

Berechnung Gesamtanteil

totalPer = (defeat + certainVictory + likelyVictory) 
defeatPer = float("{0:.2f}".format(defeat * 100/ totalPer)) 
certainVictoryPer = float("{0:.2f}".format(certainVictory * 100/ totalPer)) 
likelyVictoryPer = 100 - defeatPer - certainVictoryPer 

Druckergebnisse

print 'Defeats: ',defeatPer,'%' 
print 'Certain victories: ',certainVictoryPer,'%' 
print 'Likely victories: ',likelyVictoryPer,'%' 

für 100.000 Spiele Simulieren Code

multipleGames(100000) 

Antwort

2

Ihre Vertiefung prüfen Sieg Kontrolle verlieren oder Krawatte. Ihre Rückgabebefehl sollte wie folgt außerhalb der if-Anweisung sein.

if onhandScore > 21: 
    result = 1 
elif onhandScore == 21: 
    result = 0 
else: 
    result = -1 

return result 

Wegen dieses ein ganzzahliger Wert zurückgegeben wird, nur wenn sie den Fall erreicht else. Andernfalls gibt die Funktion standardmäßig None zurück. Jetzt, wenn wir hier ankommen.

if result == 1: 
    defeat += 1 
elif result == 0: 
    certainVictory += 1 
else: 
    likelyVictory += 1 

None nicht gleich 1 oder 0 so den else erreicht hat, und wenn es return -1 tut dies fügt auch eine für likelyVictory.