###前提・実現したいこと
pythonでトランプゲームを作りたいです。(以前質問をさせていただいたことの続きです)。
Judge関数のCard.NUMBER.index(str(player_card[0])[-1])で末尾の数字を取得した後、player,cpuがカードを1枚選択して
カードの大小をタプルの場所で比較したいです。
###発生している問題・エラーメッセージ
勝敗の結果が表示されません。
3回目トライではリストやタプルに変換しようとしましたが
Traceback (most recent call last):
File "C:\Users\eiji\Desktop\pythonmemo\ワンポーカー(勝利条件・チップ).py", line 171, in <module>
Judge()
File "C:\Users\eiji\Desktop\pythonmemo\ワンポーカー(勝利条件・チップ).py", line 113, in Judge
TypeError:descriptor 'index' for 'tuple' objects doesn't apply to a 'int' object(タプルで試したとき)
となってしまいました。
###該当のソースコード
python3.8.2
1import random 2a="" 3class Card: 4 MARK="♠(スペード)","♣(クラブ)","♥(ハート)","♦(ダイヤ)" 5 RANKS=range(1,14) 6 NUMBER="2","3","4","5","6","7","8","9","T","J","Q","K","A" 7 8 9 def __init__(self,mark,rank): 10 self.mark=mark 11 self.rank=rank 12 self.index=mark+self.NUMBER[rank-self.RANKS[0]] 13 14 def __repr__(self): 15 return self.index 16 17class Deck: 18 def __init__(self): 19 self.cards=[Card(mark,rank) 20 for mark in Card.MARK 21 for rank in Card.RANKS] 22 a=self.cards 23 #print(a) 24 random.shuffle(self.cards) 25 26 def draw(self,n): 27 cards=self.cards[:n] 28 del self.cards[:n] 29 return cards 30 31 32deck=Deck() 33player_card=deck.draw(2) 34cpu_card=deck.draw(2) 35print("--- プレイヤーのカード ---") 36print(player_card) 37 38print("--- CPUのカード ---") 39print(cpu_card) 40print("[-XXX,XXX-]") 41 42#print("抜き出されたもの以外のカード") 43#print(deck.cards) 44print("抜かれてないカード枚数") 45x=deck.cards#deck_cardはplayer_cardとcpu_cardからそれぞれ抜いた値となる。 46print(len(x)) 47#print(type(player_card[0])) 48#print(type(Card.MARK)) 49#print(type(Card.NUMBER)) 50#(2~7を「down」,8~K,Aを「up」と表示させる。認識させたい数字や記号があるときにup or downと表示させたい) 51 52def Judge(): 53 #プレイヤーのカード 54 print("プレイヤーのカード") 55 if Card.NUMBER.index(str(player_card[0])[-1])<6: 56 print("DOWN") 57 else: 58 print("UP") 59 60 if Card.NUMBER.index(str(player_card[1])[-1])<6: 61 print("DOWN") 62 else: 63 print("UP") 64 65 #CPUカード 66 print("CPUのカード") 67 if Card.NUMBER.index(str(cpu_card[0])[-1])<6: 68 print("DOWN") 69 else: 70 print("UP") 71 72 if Card.NUMBER.index(str(cpu_card[1])[-1])<6: 73 print("DOWN") 74 else: 75 print("UP") 76 77 78 i=int(input("どちらを提出するか?(1:左、2:右)")) 79 80 if i==1: 81 ia=player_card[0] 82 elif i==2: 83 ia=player_card[1] 84 print("プレイヤーは{}を提出".format(ia)) 85 86 c=random.choice(cpu_card) 87 #print(cpu_card)#cpuカードが同じかどうか確認 88 print("対戦相手は{}を提出".format(c)) 89 90 #判定を行う(Card.NUMBER.index…と書くのもめんどいので変数にした。) 91 #変数PA,PB及びCA,CBはplayer_card,cpu_cardの最後の1文字である 92 93 94 95#def Match(): 96 PA=Card.NUMBER.index(str(player_card[0])[-1]) 97 PB=Card.NUMBER.index(str(player_card[1])[-1]) 98 CA=Card.NUMBER.index(str(cpu_card[0])[-1]) 99 CB=Card.NUMBER.index(str(cpu_card[1])[-1]) 100 #if CA==Judge(c):#def Judge(c)としてみた 101 #print("同じ") -->Judge() missing 1 required positional argument: 'c' 102 print(CA) 103 print(c) 104 #if PA==index(ia): 105 #print("seikai") 106 107 """3回目トライ 108ここではCA又はCBのどっちかとcが同じシーケンス型データの位置にあるか確認 109 ーー>descriptor 'index' for 'tuple' objects doesn't apply to a 'int' object 110 (ここではなくi=int(input("どちらを提出するか?(1:左、2:右)"))でエラーが起きているみたい。) 111 if c==list.index(CA): 112 print("OK") 113 elif c==list.index(CB): 114 print("SOSO") 115 else: 116 print("NO")""" 117 118#2回目トライ 119 if c==CA: 120 if ia==PA: 121 if len(ia)>len(c): 122 print("プレイヤーの勝ちです") 123 print("ライフを回収") 124 elif len(ia)==len(c): 125 print("引き分けになりました") 126 else: 127 print("プレイヤーの負けです") 128 print("ライフを回収") 129 if c==CB: 130 if ia==PA: 131 if len(ia)>len(c): 132 print("プレイヤーの勝ちです") 133 print("ライフを回収") 134 elif len(ia)==len(c): 135 print("引き分けになりました") 136 else: 137 print("プレイヤーの負けです") 138 print("ライフを回収") 139 if c==CA: 140 if ia==PB: 141 if len(ia)>len(c): 142 print("プレイヤーの勝ちです") 143 print("ライフを回収") 144 elif len(ia)==len(c): 145 print("引き分けになりました") 146 else: 147 print("プレイヤーの負けです") 148 print("ライフを回収") 149 150 if c==CB: 151 if ia==PB: 152 if len(ia)>len(c): 153 print("プレイヤーの勝ちです") 154 print("ライフを回収") 155 elif len(ia)==len(c): 156 print("引き分けになりました") 157 else: 158 print("プレイヤーの負けです") 159 print("ライフを回収") 160 """#1回目トライ 161 if len(ia)>len(c):#文字列も混ざる為、リスト化した。 162 print("プレイヤーの勝ち") 163 print("ライフを回収") 164 165 elif ia==c: 166 print("引き分け") 167 else: 168 print("プレイヤーの負け") 169 print("ライフを回収")""" 170Judge() 171#Match()
###試したこと
・iaとcを使ってタプルの場所をlen()関数を使って数値で表して大小で比較しようとしました。(1回目トライ・2回目トライ・3回目トライ)
iaはplayer_card[0]or player_card[1],cはcpu_card[0]or cpu_card[1]を基にしています。
iaにplayer_card[0]かplayer_card[1]があるときにcに選択されたほう(cpu_card[0]かcpu_card[1])と要素の場所を比較したかったのですが
そもそもcはクラス型でCA(=Card.NUMBER.index(str(cpu_card[0])[-1]))はint型なので型が合わないから比較できないと思いました。
###補足情報(FW/ツールのバージョンなど)
Python 3.8.2
IDLE
win32
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/17 15:13
退会済みユーザー
2020/08/18 09:24 編集
2020/08/18 16:39