나는 재미를 위해서 기본적인 카드 게임을 작성하려고하지만 가능한 한 많은 것을 미래의 카드 게임에 적용하려고합니다. 여기에는 제 코드가 있습니다.파이썬 : 함수 내부에서 인스턴스 속성에 추가하기
decks = [ ]
players = [ ]
class Player:
global players
def __init__(self, name):
self.hand = [ ]
self.name = ''
self.score = 0
self.name = 'playerX'
self.score = 0
players.append(name)
class Deck:
global decks
global players
def __init__(self, name):
self.SUITS = [ 'C', 'D', 'H', 'S' ]
self.RANKS = [ '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A' ]
self.deck = [ ]
for r in self.RANKS:
for s in self.SUITS:
self.deck.append((r, s))
decks.append(name)
def shuffle(self):
shuffle(self.deck)
def display(self):
for e in range(0, len(self.deck), 4):
for i in self.deck[e:e+4]:
print i,
print
def dealXtoOne(number, deck, player):
''' number of cards from a deck to named player'''
if len(deck.deck) >= number:
for n in range(0, number):
player.hand.append(deck.deck.pop())
print 'Player1 hand: ', p1.hand
else:
return 'Insufficient cards in the deck.'
def dealXtoEach(number, deck):
''' number of cards from a deck to each player'''
global players
print 'debug 0'
if len(deck.deck) >= number*len(players):
print 'debug 1'
for cards in range(0, number*len(players)):
print 'debug 2'
for player in players:
print 'debug 3'
print player
print player.hand
player.hand.append(deck.deck.pop())
print player.hand
else:
return 'Insufficient cards in the deck.'
def value(card):
if card[ 0 ] == 'J': return 11
elif card[ 0 ] == 'Q': return 12
elif card[ 0 ] == 'K': return 13
elif card[ 0 ] == 'A': return 14
else: return card[ 0 ]
def topCard(deck):
return deck.deck[ -1 ]
def color(card):
if card[ 1 ] in [ 'Diamonds', 'Hearts' ]:
return 'Red'
else:
return 'Black'
p1 = Player('p1')
p2 = Player('p2')
d = Deck('d')
d.display()
print p1.hand
dealXtoOne(3, d, p1)
d.display()
print p1.hand
dealXtoEach(3, d)
d.display()
나는 쓰레기라고 확신하며, 분명히 진행중인 작업이지만 프로그램을 가르치고 있습니다. 눈이 피 으면 미안해!
그래서 한 명에게 X 카드를 사용하면 문제가 없지만 N 명에게 X 카드를 사용하면 문제가 없습니다. 여기 내 출력 :
('2', 'C') ('2', 'D') ('2', 'H') ('2', 'S')
('3', 'C') ('3', 'D') ('3', 'H') ('3', 'S')
...
('K', 'C') ('K', 'D') ('K', 'H') ('K', 'S')
('A', 'C') ('A', 'D') ('A', 'H') ('A', 'S')
[]
Player1 hand: [('A', 'S')]
Player1 hand: [('A', 'S'), ('A', 'H')]
Player1 hand: [('A', 'S'), ('A', 'H'), ('A', 'D')]
('2', 'C') ('2', 'D') ('2', 'H') ('2', 'S')
...
('K', 'C') ('K', 'D') ('K', 'H') ('K', 'S')
('A', 'C')
[('A', 'S'), ('A', 'H'), ('A', 'D')]
debug 0
debug 1
debug 2
debug 3
p1
Traceback (most recent call last):
File "C:\Users\11583\Desktop\Personal\cardgame.py", line 94, in <module>
dealXtoEach(3, d)
File "C:\Users\11583\Desktop\Personal\cardgame.py", line 60, in dealXtoEach
print player.hand
AttributeError: 'str' object has no attribute 'hand'
나는 그것이 내가 선수 전역 변수에 문자열로 표현 플레이어의 인스턴스의 dealXtoEach 기능 내부 기준에 튜플을 추가하려고 것을 좋아하지 않는 것을 알 수 있습니다 . Sheesh, 나는 그것을 설명하는 것이 혼란 스럽다.
어떻게이 문제를 해결할 수 있습니까?
감사
"플레이어 목록 통과"란 무엇을 의미합니까? 전 세계적인 흉터가 싫어한다는 것을 압니다. – Clay
@ user1515663 :'dealXToEach (e, players) '의 코드 예제를 참조하십시오 -'players'에게 함수의 인수를 만듭니다. –
고맙습니다, 당신이하는 일을 이해하지 못했습니다. 그것은 내가 지금 원했던 것처럼 거의 작동합니다. – Clay