Изменяемая переменная в списке - PullRequest
0 голосов
/ 27 мая 2018

Я пытаюсь создать простую игру Pontoon (похожую на блэкджек), и я составил список карт в виде колоды.Моя текущая сборка игры работает, если я задаю ACE значение 1 или 14, но мне нужно, чтобы оно имело оба значения, поэтому, если рука превышает 21, ACE возвращается к 1.

deck = [ACE, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, ACE, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, ACE, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, ACE, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]

Так чтов основном сбор карт происходит следующим образом:

while True:
    hand = []
    hand.extend(random.sample(deck, 1))    
    print(hand)
    while True:
        hit = input("new card? (k/e)")
        if hit == "k":
            hand.extend(random.sample(deck, 1))
            print("")
            print("HAND:")
            print(hand)
            a = sum(hand)
            print("")
            print("SUM:")
            print(a)
            if a > 21:
                print("")
                print("OVER")
                break
            elif a == 21:
                print("")
                print("Pontoon")
                break
            else:
                continue

Я пытался сделать ACE как функцию, но random.sample не работает с этим

def ACE():
    if a > 21:
        A = 1
    else:
        A = 14
    return int(A)

Так как мнезаставить ACE работать как 1 и 14?

Ответы [ 2 ]

0 голосов
/ 27 мая 2018

Вы можете сделать это, определив ACE как класс

class ACE():
    value = 1
    def set_value(self, value):
        self.value = value

И затем вы можете изменить значение элемента массива следующим образом

ace = ACE() # in this step you have ace value = 1
array = [ace, 1, 2, 3, ...]
for a in array:
    if type(a) == type(ACE):
        # Your desired conditions
        a.set_value(14)
0 голосов
/ 27 мая 2018

Вы не изменяете значение переменной, вы настраиваете свою функцию суммирования:

import random

ACE = 14
deck = [ACE, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 
        ACE, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 
        ACE, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 
        ACE, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]

import copy

def sumHand(hand):
    """ calculates the sum of cards in hand. if over 21 it will substitute
    14 with 1 as ACE can be both. If no 14 in hand or below 21 will return value"""

    k = hand.copy() # copy hand into k, so it will still show 14 but 
                    # you can sum up as few ACE as needed to be 1 wehn 
                    # calculating this sum

    # maybe change 14th to 1 if neeed be
    while sum(k) > 21 and ACE in k:
        k.remove(ACE) # remove  a 14
        k.append(1)   # replace by 1
    return sum(k)

while True:
    hand = [ACE,ACE] # start with 2 aces already for testing purposes
    hand.extend(random.sample(deck, 1))    
    print(hand)
    while True:
        hit = input("new card? (k/e)")
        if hit == "k":
            hand.extend(random.sample(deck, 1))
            print("")
            print("HAND:")
            print(hand)
            a = sumHand(hand)
            print("")
            print("SUM:")
            print(a)
            if a > 21:
                print("")
                print("OVER")
                break
            elif a == 21:
                print("")
                print("Pontoon")
                break
            else:
                continue

Выход:

[14, 14, 8]
new card? (k/e)
HAND:
[14, 14, 8, 7]

SUM:
17
new card? (k/e)
HAND:
[14, 14, 8, 7, 5]

SUM:
22

OVER
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...