2014-05-21 4 views
0

Я занимаюсь разработкой игры в BlackJack и нуждаюсь в некоторой помощи. Я хочу быть в состоянии превратить список строк, таких как:Включение строк в список целых чисел

unused_cards1 = ['AS', '2S', '3S', '4S', '5S', '6S', '7S', '8S', '9S', 'TS', 'JS', 'QS', 'KS', 'AC', '2C', '3C', '4C', '5C', '6C', '7C', '8C', '9C', 'TC', 'JC', 'QC', 'KC', 'AH', '2H', '3H', '4H', '5H', '6H', '7H', '8H', '9H', 'TH', 'JH', 'QH', 'KH', 'AD', '2D', '3D', '4D', '5D', '6D', '7D', '8D', '9D', 'TD', 'JD', 'QD', 'KD'] 

их соответствующих Интс, когда я случайно добавьте к руке:

player_1_hand = [] 

Я хочу, чтобы это сохранить это строковые свойства когда я показываю руку, а также сохраняю ее целочисленные свойства, чтобы фактически играть в игру, но дело в том, что я также хочу, чтобы выбранная карта была удалена из списка unused_cards1 и в кучу сброса: used_cards = []

Как мне это сделать? В любом случае это поможет ...

Спасибо!

+0

Что соответствующее ИНТ для 'QD' (например)? – vaultah

+0

A = 1, 2 = 2 ... 10 = 10, J = 10, Q = 10, K = 10. То же самое для всех костюмов. – user3593343

+2

Возможно, подумайте о словаре? – jgritty

ответ

0

Похоже словарь это то, что вы хотите:

>>> cards = {'AS' : 11, '2S' : 2, etc...} # default aces to 11 
>>> cards['AS'] 
1 

Затем вы можете добавить карты в список используемых карт:

# use the card somehow 
used_cards.append('AS') 

При добавлении счет, если карта туз и оценка - 21, уменьшает счет на 10, что фактически делает туза == 1. Это также изменит только значение одного туза, если в руке 2:

for ele in hand: 
    score += cards[ele] 
    if score > 21 and ele in ('AS', 'AC', 'AH', 'AD'): 
     score -= 10 
+0

Это не работает, потому что туз забит либо как 11, либо 1 в зависимости от того, в какой руке он находится. Если для сопоставления имени карты использовался словарь забить, снять костюм, поэтому словарь содержит только 13 предметов вместо 52. – IceArdor

+0

OP сказал в комментарии, что 'A = 1'. Он не подразумевал, что он будет равен 1 или 11 в зависимости от контекста. – IanAuld

+0

Извините, я должен был упомянуть, что он может использоваться как 1 или 11: S – user3593343

0
value_dict = dict(zip("23456789TJQKA",[2,3,4,5,6,7,8,9,10,10,10,10,11])) 
p1_hand = ["AS","KS"] 
p1_values = [value_dict[val[0]] for val in p1_hand] 

или даже лучше использовать классы

5

Другой подход заключается в создании Card класс:

class Card: 
    def __init__(self, name): 
     self.name = name 

    def face_value(self): 
     return #insert face value computation here 

добавить дополнительные методы (например: __str__, suit и т.д.) по мере необходимости.

И тогда в вашем первоначальном наборе карт, сделать что-то вроде:

unused_cards1 = map(Card, ['AS', '2S', '3S', '4S', '5S', '6S', '7S', '8S', ...]) 

unused_cards1 тогда будет список Card объектов, а не только строки.

+0

bah Я просто собирал свой ответ, чтобы добавить это. .. –

+0

см. Http://stackoverflow.com/questions/23643122/how-to-make-a-blackjack-game-on-python-with-dictionaries/23664589#23664589 Алгоритм 'Hand.score'. Оценка карты зависит от руки, в которой она находится. – IceArdor

+0

@IceArdor, но это не очень важно здесь ... но да, вы правы, речь идет о реализации карты, которая имеет счет, в блэкджеке в зависимости от того, какую руку вы будете иметь отрегулировать ручную оценку для тузов ... но насколько карта идет, она не знает руки, поэтому она имеет сдержанное значение –

0

Мое предложение было бы класс:

class Card(object): 

    FACES = {1: 'Ace', 11: 'Jack', 12: 'Queen', 13: 'King'} 
    SUITS = {'S': 'Spades', 'D': 'Diamonds', 'C': 'Clubs', 'H': 'Hearts'} 

    def __init__(self, suit, face): 
     self.suit = suit 
     self.face = face 

    # Logic for how the Card is displayed: 
    def __str__(self): 
     return "{0} of {1}".format(self.FACES.get(self.face, self.face), 
            self.SUITS[self.suit]) 

    # Logic for how the Card compares to others: 
    def __eq__(self, other): 
     return self.face == other.face 

    def __lt__(self, other): 
     return self.face < other.face 

    # Logic for creating Card from string: 
    @classmethod 
    def from_string(cls, s): 
     faces = {'A': 1, 'J': 11, 'Q': 12, 'K': 13} 
     face, suit = s[:-1], s[-1] 
     try: 
      face = int(face) 
     except ValueError: 
      face = faces[face] 
     return cls(suit, face) 

Они теперь могут быть использованы как:

>>> card1 = Card.from_string("AS") 
>>> card2 = Card.from_string("10D") 
>>> str(card1) 
'Ace of Spades' 
>>> str(card2) 
'10 of Diamonds' 
>>> card1 < card2 
True 
Смежные вопросы