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

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

詳細はこちら
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

851閲覧

Python 3.Xでトランプのゲームを作成しています。

yuuki_2211

総合スコア1

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2021/03/01 14:09

前提・実現したいこと

Python3.Xでクラスにある配列の検索方法で質問があります。
トランプゲームを作成しており、クラスに「記号(ハートやダイヤなど)と数字(1~13)」の変数をあたえています。
また、cardsというリストを宣言して、その中に作成したクラスを52個いれています。

質問で二つの変数を与えて、その変数がcardリストにある「記号と数字」と一致していればTrueを返してほしいです。
また、なければFalseを返す方法などあるでしょうか。
例1 変数1 = "ハート" 変数2 = 1 の場合 True
例2 変数1 = "ハート" 変数2 = 14 の場合 False
例3 変数1 = "あ" 変数2 = 1 の場合 True

cards = []

class Card:  ←Cardのクラスを作成
def init(self, mark, number):
self.mark = mark
self.number = number

cards.append =Card["ハート",1] ←これを52個作成

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/03/01 14:17 編集

[ 2021/03/01 23:09時点の投稿に対する言及] 例3でTrueになる理由を教えてください。
guest

回答2

0

ベストアンサー

ソースコードは教えない方がいいという考え方もありますが、最初は真似から始めるものだと思いますし、クラスを使おうという意欲を買って回答します。

cardsというリストを宣言して、その中に作成したクラスを52個いれています。

cardsに入っているのは、クラスではなくインスタンスです。

cards.append =Card["ハート",1]

これは間違いなので実行時エラーになります。

初心者向けの関数

python

1def check0(変数1, 変数2, cards): 2 for card in cards: 3 if 変数1 == card.mark and 変数2 == card.number: 4 return True 5 return False

実行結果は以下です。

python

1>>> 変数1 = "ハート" 2>>> 変数2 = 1 3>>> check0(変数1, 変数2, cards) 4True 5>>> 変数1 = "ハート" 6>>> 変数2 = 14 7>>> check0(変数1, 変数2, cards) 8False

中級者向けの関数

ただし、この場合は初心者向けより遅いので迷うところです。

python

1def check1(変数1, 変数2, cards): 2 if [card for card in cards if (変数1 == card.mark and 変数2 == card.number)]: 3 return True 4 else: 5 return False

実行結果は以下です。

python

1>>> 変数1 = "ハート" 2>>> 変数2 = 1 3>>> check1(変数1, 変数2, cards) 4True 5>>> 変数1 = "ハート" 6>>> 変数2 = 14 7>>> check1(変数1, 変数2, cards) 8False

上級者向け

上級者は、クラス定義に気をつかいます。

python

1class Card: 2 def __init__(self, mark, number): 3 self.mark = mark 4 self.number = number 5 def __eq__(self, anotherCard): 6 if type(anotherCard) != Card: 7 return False 8 elif self.mark == anotherCard.mark and self.number == anotherCard.number: 9 return True 10 else: 11 return False 12 def __str__(self): 13 return f'{self.mark}{self.number}' 14 15cards = [Card(mark, number) for mark in ["スペード", "ハート", "ダイヤ", "クラブ"] for number in range(1,14)]

実行結果は以下です。

python

1>>> 変数1 = "ハート" 2>>> 変数2 = 1 3>>> check2(変数1, 変数2, cards) 4True 5>>> 変数1 = "ハート" 6>>> 変数2 = 14 7>>> check2(変数1, 変数2, cards) 8False

投稿2021/03/02 02:14

ppaul

総合スコア24670

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

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

0

リストに入っているの全てのクラスについて条件に合致しているかどうか確認して、1つでも合致していればTrueを返し、合致するものが無ければFalseを返すような関数を作成すればいいと思います。

投稿2021/03/01 14:55

編集2021/03/01 14:56
TakaiY

総合スコア13765

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問