🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1159閲覧

【Python】教本通りにCard gameを作成したもののAttribute Errorが出てしまう

ka1989

総合スコア2

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/01/04 02:15

編集2021/01/04 02:16

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/01/04 02:21

Gameクラスの __init__ が __int__ になってますよ
ka1989

2021/01/04 02:28

すいません、原因はそれでした。ありがとうございます!
guest

回答1

0

自己解決

Gameクラスの initint になっていました。
kichirb3さん、ありがとうございました!

投稿2021/01/04 02:31

ka1989

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問