2016-11-16 2 views
1

My Black Jack код очень простой, но работает довольно гладко, однако я столкнулся с ударом скорости. Таким образом, здесь. Когда я вызываю «Хит», чтобы отправить мне еще одну карту в мой цикл While, для каждого цикла DECK создает одну и ту же карту. Первые 2 рисунка и карта Hit всегда разные, но внутри цикла While (который заканчивается, когда игрок говорит «остаться» и не хочет другую карту.) Карты Hit остаются неизменными.Python Black Jack вариант игры

import random 
import itertools 
SUITS = 'cdhs' 
RANKS = '23456789TJQKA' 
DECK = tuple(''.join(card) for card in itertools.product(RANKS, SUITS)) 
hand = random.sample(DECK, 2) 
hit = random.sample(DECK, 1) 

print("Welcome to Jackpot Guesser! ") 
c = input("Would you like to play Black Jack or play Slots? ") 
if c == 'Black Jack': 
    print() 
    print("Welcome to Black Jack! Here are the rules: ") 
    print("Black Jack is a game of whit, skill with a bit of Luck. You will start with 2 card and try to achieve a total of 21 points. \n Each cards worth is equal to its number, face cards are worth 10 and the Ace can be 1 or 11 points. You decide. \n You can decide to -Stay- and take the points you have or -Hit- to get another card. If you get 21 its Black Jack and you win. \n If no one gets 21, the highest points win, but if you go over 21 you -Bomb- and lose everything. \n Becarful not to Bomb and goodluck out there! Remember, you got to know when to Hit, when to Stay and when to walk away! \n") 
    print(hand) 
    print() 

    g = 'swag' 
    while g != 'Stay': 
     g = input(("What would you like to do, Stay or Hit: ")) 
     if g == 'Hit': 
      print(hit) 
     elif g == 'Stay': 
      print("Lets see how you did!") 
     else: 
      print("test3") 
elif c == 'Slots': 
      print("test") 
else: 
    print("test2") 

EX: Рука: Td (две бубны), 3в (3 клуба) Hit: 7s (7 лопаты) ударил 7s ударил 7s ударил 7s ... пребывания: позволяет увидеть, как вам сделал. Мне нужно продолжение цикла While Hits, чтобы отличаться, любые идеи.

ответ

1

Проблема в том, что вы генерируете хит-карту только один раз, во время начала программы. Изменение кода из

if g == 'Hit': 
     print(hit) 

к чему-то вроде

if g == 'Hit': 
     hit = random.sample(DECK, 1) 
     print(hit) 

сделает вывод различных карт на каждом ударе.

+2

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

+0

Спасибо, очень помогли! +1 – Rep

+0

спасибо за предложение .shuffle(), я не знал об этом – mmenschig

Смежные вопросы