前提・実現したいこと
pythonでトランプゲームを作りたいです。
プレイヤー・CPUに2枚ずつカードを配り、配られたカードに対してトランプの特定の数値(2~7)の時、DOWN,残りの数値と記号(J,Q,K,A)をUPと表示(つまり4枚のカードの状態が確認できれば良いです)
発生している問題・エラーメッセージ
トランプの数値に関係なく「UP」と表示されます。(特定の文字以外をUPと表示させています)
該当のソースコード
import random a="" class Card: MARK="♠(スペード)","♣(クラブ)","♥(ハート)","♦(ダイヤ)" RANKS=range(1,14) NUMBER="2","3","4","5","6","7","8","9","10","J","Q","K","A" def __init__(self,mark,rank): self.mark=mark self.rank=rank self.index=mark+self.NUMBER[rank-self.RANKS[0]] def __repr__(self): return self.index class Deck: def __init__(self): self.cards=[Card(mark,rank) for mark in Card.MARK for rank in Card.RANKS] a=self.cards print(a) random.shuffle(self.cards) def draw(self,n): cards=self.cards[:n] del self.cards[:n] return cards deck=Deck() player_card=deck.draw(2) cpu_card=deck.draw(2) print("--- プレイヤーのカード ---") print(player_card) print("--- CPUのカード ---") print(cpu_card) print("抜き出されたもの以外のカード") print(deck.cards) print("抜かれてないカード枚数") x=deck.cards#deck_cardはplayer_cardとcpu_cardからそれぞれ抜いた値となる。 print(len(x)) #(2~7を「down」,8~K,Aを「up」と表示させる。認識させたい数字や記号があるときにup or downと表示させたい) def Judge(): #プレイヤーのカード if player_card[0]==Card.MARK and ("2"or"3"or"4"or"5"or"6"or"7"): print("DOWN") else: #elif player_card[0]==Card.MARK and ("8"or"9"or"10"or"J"or"Q"or"K"or"A"): print("UP") if player_card[1]==Card.MARK and ("2"or"3"or"4"or"5"or"6"or"7"): print("DOWN") #elif player_card[1]==Card.MARK and ("8"or"9"or"10"or"J"or"Q"or"K"or"A"): else: print("UP") #CPUカード if cpu_card[0]==Card.MARK and ("2"or"3"or"4"or"5"or"6"or"7"): print("DOWN") else: print("UP") if cpu_card[1]==Card.MARK and ("2"or"3"or"4"or"5"or"6"or"7"): print("DOWN") #elif cpu_card[1]==Card.MARK and ("8"or"9"or"10"or"J"or"Q"or"K"or"A"): else: print("UP") i=int(input("どちらを提出するか?(1:左、2:右)")) if i==1: ia=player_card[0] elif i==2: ia=player_card[1] print("{}を提出".format(ia)) c=random.choice(cpu_card) print(cpu_card)#cpuカードが同じかどうか確認 print("{}を提出".format(c)) Judge()
試したこと
NUMBERの開始がAではなく2からすることでDOWN、UPしたい部分の配列がごっちゃにならないかと思って変えてみた→変わらず
player_card[0]~cpu_card[1]のup条件をelif~ではなく、else(down「以外すべて」)としてみた→数が4つ表示された。
elifでは結果が出ないのに、elseでは4つともupなのでif文の
Card.MARK and ("2"or"3"or"4"or"5"or"6"or"7"):
が読み込まれてないから起こるエラーだと思いましたが、どうやったらトランプのマーク付きでも結果を正しく出せるか分からなかった為書かせていただきました。
補足情報(FW/ツールのバージョンなど)
Python 3.8.2
IDLE
win32
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/15 06:11
退会済みユーザー
2020/08/15 06:28
2020/08/15 08:12