gpt4 book ai didi

python - 如何使用类方法创建新实例

转载 作者:太空宇宙 更新时间:2023-11-04 04:23:27 25 4
gpt4 key购买 nike

我正在尝试为一个类编写一个方法,该方法将创建一个已经存在的类实例的新实例。问题是当我尝试 new_handname 时无法访问控制台中的新实例。

这是为了在 python 中创建二十一点游戏。代码的想法是当手被拆分时,将创建一个新实例来创建一个新手

import random


class Card(object):
def __init__(self, value, suit,nvalue):
self.value = value
self.suit = suit
self.nvalue = nvalue

suit = ['Hearts','Spades','Clubs','Diamonds']
value = ['2','3','4','5','6','7','8','9','10','J','Q','K','A']
nvalue = [2,3,4,5,6,7,8,9,10,10,10,10,11]


class Hand(object):
def __init__(self,current_hand):
self.current_hand = current_hand

def hand_total(self):
current_sum = 0
for i in range(0,len(self.current_hand)):
current_sum += self.current_hand[i].nvalue
return current_sum

def hand_type(self):
if self.current_hand[0].value == self.current_hand[1].value:
return('pair')
elif self.current_hand[0].value == 'A' or self.current_hand[1].value == 'A':
return('soft')
else:
return('hard')

def append(self,current_hand,some_card):
self.current_hand = self.current_hand + some_card

def hit(self):
self.current_hand.append(deck[0])
deck.pop(0)

def double(self,new_handname):
new_handname = Hand(self)


def deal_start_hand():
player_hand.append(deck[0])
deck.pop(0)
dealer_hand.append(deck[0])
deck.pop(0)
player_hand.append(deck[0]) #### player gets two cards ### assuming europe no hole card rules
deck.pop(0)

def gen_deck():
for v,n in zip(value,nvalue):
for s in suit:
deck.append(Card(v,s,n))


### variable initiation ###

deck = []
player_hand = []
dealer_hand = []


##program start ##

gen_deck()
random.shuffle(deck)
deal_start_hand()

p1 = Hand(player_hand)
p1.double('p2')
p2 ### I expect p2 to return an instance but does not

>>> p1
<__main__.Hand object at 0x00000006A80F0898>
>>> p2
Traceback (most recent call last):
File "<pyshell#182>", line 1, in <module>
p2
NameError: name 'p2' is not defined

注意:current_hand 是卡片对象的列表。

我希望 p2 返回类的一个实例,但是变量 p2 没有定义

最佳答案

您的 split 例程可能如下所示,其中返回了该类的新实例:

class Hand(object):
def __init__(self, current_hand):
self.current_hand = current_hand

def split(self):
return Hand(self.current_hand)

简单地创建一个实例,然后拆分它:

# You need to define "some_default" somewhere
myhand = Hand(some_default)
second_hand = myhand.split()

但是,您的 split 例程需要考虑哪些牌已经打出,哪些牌仍在牌组中,而您的代码不会考虑这些。我可能建议绘制出游戏的“状态”(将其视为状态机),将其绘制在纸上,然后考虑如何编写每个状态和转换的代码。像这样的纸牌游戏编码起来比乍看起来要复杂得多。

关于python - 如何使用类方法创建新实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53982478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com