前提・実現したいこと
プログラミング初心者です。
pythonでポーカーを作るプログラムを作成中です。
ポーカーの役であるストレートの判定を行うために手札(HANDS)のタプルの整列を121行目で行おうとした際にエラーメッセージが発生しました。
発生している問題・エラーメッセージ
Aさん の所持しているカード: Traceback (most recent call last): File "a.py", line 129, in <module> Poker() File "a.py", line 118, in Poker Player1.OPEN_CARD() File "a.py", line 62, in OPEN_CARD print(self.NAME,"の所持しているカード:",self.HANDS) File "a.py", line 25, in __repr__ return str(self.mark,'の',self.rank) TypeError: decoding str is not supported
該当のソースコード
python
1 2from random import shuffle 3 4#START 12/11 5#END 12/ 6 7#カードクラスを宣言 8class Card: 9 10 MARK = 'ダイヤ','ハート','スペード','クローバー' 11 #使用するカードのマーク 12 RANK = 'A','J', 'Q', 'K' 13 #使用するカード 14 15 def __init__(self, mark, rank): 16 #メソッド1:コンストラクタ(インスタンス初期化のための関数)を(マークと範囲)に設定 17 #コンストラクタ=__init__(self,...) 18 #メソッドはclassの中にある関数 19 self.mark = mark 20 #(mark)にスペード、クローバー、ハート、ダイヤ 21 self.rank = rank 22 #(rank)に使用するカードのマークor数字を 23 24 def __repr__(self): 25 #呼び出されたときに↓の値を返して処理を終了する 26 return str(self.mark,'の',self.rank) 27 28#デッキクラスを宣言 29class Deck: 30 def __init__(self): 31 #コンストラクタ(デッキをリセットする) 32 self.HANDS = [Card(mark, rank) 33 #カードを生成する カードを使う時はHANDSを使用する 34 for mark in Card.MARK 35 #マークの分だけループする 36 for rank in Card.RANK 37 #使用するカードの分だけループする 38 ] 39 shuffle(self.HANDS) 40 #デッキをシャッフルする 41 42 def DRAW(self): 43 #カードドロー関数 44 return self.HANDS.pop() 45 46 47#SixteenPokerプレイヤークラスを宣言 48class SPPlayer: 49 def __init__(self,NAME): 50 #インスタンス(カードと合計値は初期化する) 51 self.NAME = NAME 52 self.HANDS = [] 53 #プレイヤーはポーカーのカードリストを持つ 54 55 def HAND_CARD(self,CARD): 56 #初期手札関数 57 self.HANDS.append(CARD) 58 #手札にカードを追加する 59 60 def OPEN_CARD(self): 61 #手札公開関数 62 print() 63 print(self.NAME,"の所持しているカード:",self.HANDS) 64 65 def DRAW_CARD(self,CARD): 66 #ドロー関数 67 self.HANDS.append(CARD) 68 #手札にカードを追加する 69 70 #def DIS_CARD(self,CARD): 71 #手札破棄関数 72 #self.HANDS.remove(CARD) 73 #手札のカードを削除する 74 75 76#ディーラークラス宣言 77class Dealer: 78 79 def __init__(self,DECK): 80 #デッキリセット関数 81 self.DECK = DECK 82 83 def DEAL(self,SPPlayer): 84 #カード配る関数 85 SPPlayer.DRAW_CARD(self.DECK.DRAW()) 86 87MATCH_M = 0 88#マークの一致関数 89def FLUSH(self): 90 for a in range(4): 91 if self.HANDS[0].mark == self.HANDS[a+1].mark: 92 global MATCH_M 93 MATCH_M += 1 94 95 if MATCH_M == 4: 96 print('フラッシュです') 97 98#def STRAIGHT(self): 99 #sorted(list) 100 101 102 103#ポーカー関数 104def Poker(): 105 print('ゲームスタート') 106 print('-------------------------------------') 107 108 DEALER = Dealer(Deck()) 109 #ディーラーにデッキを持たせる 110 Player1 = SPPlayer('Aさん') 111 Player2 = SPPlayer('Bさん') 112 #プレイヤー 113 114 115 for i in range(5): 116 DEALER.DEAL(Player1) 117 DEALER.DEAL(Player2) 118 119 Player1.OPEN_CARD() 120 Player2.OPEN_CARD() 121 122 sorted(Player2.HANDS,key=lambda Card:Card.rank) 123 print(Player2.HANDS) 124 125 FLUSH(Player2) 126 #STRAIGHT(Player2) 127 128 129if __name__ == '__main__': 130 Poker()
試したこと
エラー文をgoogleで検索してみたところ24行目のreturnか14行目以降に何かが必要なんだと思ったのですが、どこをどう変えればよいかわかりません…
補足情報(FW/ツールのバージョンなど)
> 手札(HANDS)のタプルの整列を121行目で行おうとした際にエラーメッセージが発生しました。
エラー発生行のコードを提示してください。(エラーメッセージは抜粋せずにユーザー名等を除く全文を掲載ください)
File "\a.py", line 129, in <module>
Poker()
File "\a.py", line 118, in Poker
Player1.OPEN_CARD()
File "\a.py", line 62, in OPEN_CARD
print(self.NAME,"の所持しているカード:",self.HANDS)
File "\a.py", line 25, in __repr__
return str(self.mark,'の',self.rank)
TypeError: decoding str is not supported
Aさん の所持しているカード: Traceback (most recent call last):
File "\a.py", line 129, in <module>
Poker()
File "\a.py", line 118, in Poker
Player1.OPEN_CARD()
File "\a.py", line 62, in OPEN_CARD
print(self.NAME,"の所持しているカード:",self.HANDS)
File "\a.py", line 25, in __repr__
return str(self.mark,'の',self.rank)
TypeError: decoding str is not supported
ーーーーーーーーーーーーーーーーーーーーーーー
お待たせしました。こちらで大丈夫ですか?
> こちらで大丈夫ですか?
結構ですが、この欄では多くの回答者の方の目には触れないので質問に追記された方が良いと思います。
質問の追記を行いました。丁寧にありがとうございます。
回答2件
あなたの回答
tips
プレビュー