Pythonの教本「独学プログラマー」で紹介されていた以下のコードを、本の通りに記述し実行してみましたがどうしてもAttribute Errorが出てしまいます。使用しているIDLEのせいかと思い、PyCharmでも実行してみましたがまったく同じエラーメッセージが表示されました。
もし、原因がわかりましたらご教示いただければ幸いです。
Python
1from random import shuffle 2 3class Card: 4 suits = ["spades", "hearts", "diamonds", "clubs"] 5 6 values = [None, None, "2", "3", "4", "5", "6", "7", "8", "9", "10", 7 "Jack", "Queen", "King", "Ace"] 8 9 def __init__(self, v, s): 10 self.value = v 11 self.suit = s 12 13 def __lt__(self, c2): 14 if self.value < c2.value: 15 return True 16 17 if self.value == c2.value: 18 if self.suit < c2.suit: 19 return True 20 else: 21 return False 22 23 return False 24 25 def __gt__(self, c2): 26 if self.value > c2.value: 27 return True 28 if self.value == c2.value: 29 if self.suit > c2.suit: 30 return True 31 else: 32 return False 33 return False 34 35 def __repr__(self): 36 v = self.values[self.value] + " of " \ 37 + self.suits[self.suit] 38 return v 39 40 41class Deck: 42 def __init__(self): 43 self.cards = [] 44 for i in range(2, 15): 45 for j in range(4): 46 self.cards.append(Card(i, j)) 47 shuffle(self.cards) 48 49 def rm_card(self): 50 if len(self.cards) == 0: 51 return 52 return self.cards.pop() 53 54class Player: 55 def __init__(self, name): 56 self.wins = 0 57 self.card = None 58 self.name = name 59 60class Game: 61 def __int__(self): 62 name1 = input("プレーヤー1の名前") 63 name2 = input("プレーヤー2の名前") 64 self.deck = Deck() 65 self.p1 = Player(name1) 66 self.p2 = Player(name2) 67 68 69 def wins(self, winner): 70 w = "このラウンドは{}が勝ちました" 71 w = w.format(winner) 72 print(w) 73 74 def draw(self, p1n, p1c, p2n, p2c): 75 d = "{}は{}、{}は{}を引きました" 76 d = d.format(p1n, p1c, p2n, p2c) 77 print(d) 78 79 def play_game(self): 80 cards = self.deck.cards 81 print("戦争をはじめます!") 82 while len(cards) >= 2: 83 m = "qで終了、それ以外のキーでPlay:" 84 response = input(m) 85 if response == "q": 86 break 87 p1c = self.deck.rm_card() 88 p2c = self.deck.rm_card() 89 p1n = self.p1.name 90 p2n = self.p2.name 91 if p1c > p2c: 92 self.p1.wins += 1 93 self.wins(self.p1.name) 94 else: 95 self.p2.wins += 1 96 self.wins(self.p2.name) 97 98 win = self.winner(self.p1, self.p2) 99 print("ゲーム終了、{}の勝利です!".format(win)) 100 101 def winner(self, p1, p2): 102 if p1.wins > p2.wins: 103 return p1.name 104 if p1.wins < p2.wins: 105 return p2.name 106 return "引き分け!" 107 108 109game = Game() 110game.play_game()
エラーメッセージ
Traceback (most recent call last):
File "/Users/Kxxx/Documents/0102.py", line 110, in <module>
game.play_game()
File "/Users/Kxxx/Documents/0102.py", line 80, in play_game
cards = self.deck.cards
AttributeError: 'Game' object has no attribute 'deck'
環境
iOS, IDLE, Python 3.9.0
回答1件
あなたの回答
tips
プレビュー