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

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

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

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

Q&A

解決済

2回答

975閲覧

タプルの整列ができない…

shosinn

総合スコア1

Python

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

0グッド

0クリップ

投稿2020/12/16 03:08

編集2020/12/16 04:35

前提・実現したいこと

プログラミング初心者です。
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/ツールのバージョンなど)

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

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

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

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

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

meg_

2020/12/16 03:11

> 手札(HANDS)のタプルの整列を121行目で行おうとした際にエラーメッセージが発生しました。 エラー発生行のコードを提示してください。(エラーメッセージは抜粋せずにユーザー名等を除く全文を掲載ください)
shosinn

2020/12/16 03:20

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
shosinn

2020/12/16 03:22

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 ーーーーーーーーーーーーーーーーーーーーーーー お待たせしました。こちらで大丈夫ですか?
meg_

2020/12/16 03:47

> こちらで大丈夫ですか? 結構ですが、この欄では多くの回答者の方の目には触れないので質問に追記された方が良いと思います。
shosinn

2020/12/16 04:36

質問の追記を行いました。丁寧にありがとうございます。
guest

回答2

0

ベストアンサー

Cardクラスのdef __repr__を修正すれば良いです。strの使い方が間違っています。

<修正前>

python

1def __repr__(self): 2 #呼び出されたときに↓の値を返して処理を終了する 3 return str(self.mark,'の',self.rank)

<修正後>

Python

1def __repr__(self): 2 #呼び出されたときに↓の値を返して処理を終了する 3 return str(self.mark+'の'+self.rank)

現状ではself.markself.rankは文字列のためstr()は不要で、return return self.mark+'の'+self.rankでも良いです。

投稿2020/12/16 03:57

meg_

総合スコア10760

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

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

shosinn

2020/12/16 04:39

解説もしていただきありがとうございます。教えていただいた通りにしてみたらエラーなく実行できました。
guest

0

diff

1- return str(self.mark,'の',self.rank) 2+ return self.mark + 'の' + self.rank

これでいいのでは?

投稿2020/12/16 03:45

ozwk

総合スコア13553

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

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

shosinn

2020/12/16 04:40

修正を行ったらエラーなく実行することができました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問