質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
87.20%
Python

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

受付中

手札の整列ができない…

shosinn
shosinn

総合スコア0

Python

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

1回答

0評価

0クリップ

367閲覧

投稿2020/12/16 06:09

前提・実現したいこと

122行でplayer2.HANDのソートをrankを基準に行いたいです。
rankには現在文字のみ記載していますがいずれ2~10までの数字も追加する予定です。
(処理の結果がわかりやすくなるかと思ったので現在のようにしています。)

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

エラー文なし sorted(Player2.HANDS,key=lambda Card:Card.rank)でソートを行っても何も変更されずに Player2.HANDSが表示される。

該当のソースコード

python

from random import shuffle #START 12/11 #END 12/ #カードクラスを宣言 class Card: MARK = 'ダイヤ','ハート','スペード','クローバー' #使用するカードのマーク RANK = 'A','J', 'Q', 'K' #使用するカード def __init__(self, mark, rank): #メソッド1:コンストラクタ(インスタンス初期化のための関数)を(マークと範囲)に設定 #コンストラクタ=__init__(self,...) #メソッドはclassの中にある関数 self.mark = mark #(mark)にスペード、クローバー、ハート、ダイヤ self.rank = rank #(rank)に使用するカードのマークor数字を def __repr__(self): #呼び出されたときに↓の値を返して処理を終了する return self.mark + 'の' + self.rank #デッキクラスを宣言 class Deck: def __init__(self): #コンストラクタ(デッキをリセットする) self.HANDS = [Card(mark, rank) #カードを生成する カードを使う時はHANDSを使用する for mark in Card.MARK #マークの分だけループする for rank in Card.RANK #使用するカードの分だけループする ] shuffle(self.HANDS) #デッキをシャッフルする def DRAW(self): #カードドロー関数 return self.HANDS.pop() #SixteenPokerプレイヤークラスを宣言 class SPPlayer: def __init__(self,NAME): #インスタンス(カードと合計値は初期化する) self.NAME = NAME self.HANDS = [] #プレイヤーはポーカーのカードリストを持つ def HAND_CARD(self,CARD): #初期手札関数 self.HANDS.append(CARD) #手札にカードを追加する def OPEN_CARD(self): #手札公開関数 print() print(self.NAME,"の所持しているカード:",self.HANDS) def DRAW_CARD(self,CARD): #ドロー関数 self.HANDS.append(CARD) #手札にカードを追加する #def DIS_CARD(self,CARD): #手札破棄関数 #self.HANDS.remove(CARD) #手札のカードを削除する #ディーラークラス宣言 class Dealer: def __init__(self,DECK): #デッキリセット関数 self.DECK = DECK def DEAL(self,SPPlayer): #カード配る関数 SPPlayer.DRAW_CARD(self.DECK.DRAW()) MATCH_M = 0 #マークの一致関数 def FLUSH(self): for a in range(4): if self.HANDS[0].mark == self.HANDS[a+1].mark: global MATCH_M MATCH_M += 1 if MATCH_M == 4: print('フラッシュです') #def STRAIGHT(self): #sorted(list) #ポーカー関数 def Poker(): print('ゲームスタート') print('-------------------------------------') DEALER = Dealer(Deck()) #ディーラーにデッキを持たせる Player1 = SPPlayer('Aさん') Player2 = SPPlayer('Bさん') #プレイヤー for i in range(5): DEALER.DEAL(Player1) DEALER.DEAL(Player2) Player1.OPEN_CARD() Player2.OPEN_CARD() sorted(Player2.HANDS,key=lambda Card:Card.rank) print(Player2.HANDS) FLUSH(Player2) #STRAIGHT(Player2) if __name__ == '__main__': Poker()

試したこと

前回に同じような質問を行いましたが、その時はエラー文を治すだけで終わってしまったので
質問の内容はほぼ前回と同じで、プログラムの内容は前回質問時に発生していたエラーを治した後の文となっています。

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

visual studio code で python を使用しています

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Python

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