列表中的可更改变量



我正在尝试创建一个简单的浮桥游戏(类似于二十一点(,并且我制作了一个卡片列表作为一副牌。如果我给 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 工作呢?

您不更改变量的值,而是调整求和函数:

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

可以通过将 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)

最新更新