2013-02-10 2 views
0

Я написал симулятор Блэкджека. Цель состояла в том, чтобы оценить вероятность дилера по сравнению с бюстом. Обратите внимание, что дилер должен рисовать, когда он равен 16, и должен стоять на 17. Если в руке дилера есть туз, его следует считать равным 11, когда итоговое значение составляет от 17 до 21 включительно; в противном случае туз должен быть засчитан как 1. Программа, похоже, работает, но я не знаю сотни. Вот ядро ​​программы. Можете ли вы проверить, является ли код ошибочным, пожалуйста?Симулятор блэкджека (для проверки)

def simNGames(n): 
    holds = busts = 0 
    for i in range(n): 
     score = simOneGame() 
     if score <= 21: 
      holds += 1 
     else: 
      busts += 1 
    return holds, busts 

def simOneGame(): 
    score = 0 
    cardsVal = [2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 11] 
    while not gameOver(score): 
     dealerScore = choice(cardsVal) 

     # in case dealer hits an ace 
     if dealerScore == 11: 
      if score >= 6 and score <= 10: 
       score += 11 
      else: 
       score += 1 
     else: 
      score += dealerScore 

    return score 

def gameOver(score): 
    return score >= 17 and score <= 21 or score >=22 
+0

Если вы симулируете множество игр подряд, вы должны принять во внимание тот факт, что колоды истощаются из-за определенных карт, которые делает дилер (у торговца меньше шансов набрать ту же карточку). Если вы имитируете небольшое количество игр, этот эффект можно в значительной степени игнорировать, так как блэкджек обычно играет со многими колодами. – Celada

ответ

0

В целом логика кажется прекрасной.

Мое предложение было бы написать Unit Tests для конкретных случаев, о которых вы беспокоитесь.

+0

Хорошо, спасибо за усилия по чтению. Спасибо за предложение, мне еще предстоит узнать об модульном тестировании. – nutship