下記の戦争ゲームのCardクラス内における”c2”の引数の値はどこから来るのでしょうか?
考えてもピンと来なかったので解説をよろしくお願いいたします。
python3
1 2from random import shuffle 3 4 5class Card: 6 suits = ["spades", 7 "hearts", 8 "diamonds", 9 "clubs"] 10 11 values = [None, None,"2", "3", 12 "4", "5", "6", "7", 13 "8", "9", "10", 14 "Jack", "Queen", 15 "King", "Ace"] 16 17 def __init__(self, v, s): 18 """suit + value are ints""" 19 self.value = v 20 self.suit = s 21 22 def __lt__(self, **c2**): 23 if self.value < c2.value: 24 return True 25 if self.value == c2.value: 26 if self.suit < c2.suit: 27 return True 28 else: 29 return False 30 return False 31 32 def __gt__(self, c2): 33 if self.value > c2.value: 34 return True 35 if self.value == c2.value: 36 if self.suit > c2.suit: 37 return True 38 else: 39 return False 40 return False 41 42 def __repr__(self): 43 v = self.values[self.value] +\ 44 " of " + \ 45 self.suits[self.suit] 46 return v 47 48 49class Deck: 50 def __init__(self): 51 self.cards = [] 52 for i in range(2, 15): 53 for j in range(4): 54 self.cards\ 55 .append(Card(i, 56 j)) 57 shuffle(self.cards) 58 59 def rm_card(self): 60 if len(self.cards) == 0: 61 return 62 return self.cards.pop() 63 64 65class Player: 66 def __init__(self, name): 67 self.wins = 0 68 self.card = None 69 self.name = name 70 71 72class Game: 73 def __init__(self): 74 name1 = input("p1 name ") 75 name2 = input("p2 name ") 76 self.deck = Deck() 77 self.p1 = Player(name1) 78 self.p2 = Player(name2) 79 80 def wins(self, winner): 81 w = "{} wins this round" 82 w = w.format(winner) 83 print(w) 84 85 def draw(self, p1n, p1c, p2n, p2c): 86 d = "{} drew {} {} drew {}" 87 d = d.format(p1n, 88 p1c, 89 p2n, 90 p2c) 91 print(d) 92 93 def play_game(self): 94 cards = self.deck.cards 95 print("beginning War!") 96 while len(cards) >= 2: 97 m = "q to quit. Any " + \ 98 "key to play:" 99 response = input(m) 100 if response == 'q': 101 break 102 p1c = self.deck.rm_card() 103 p2c = self.deck.rm_card() 104 p1n = self.p1.name 105 p2n = self.p2.name 106 self.draw(p1n, 107 p1c, 108 p2n, 109 p2c) 110 if p1c > p2c: 111 self.p1.wins += 1 112 self.wins(self.p1.name) 113 else: 114 self.p2.wins += 1 115 self.wins(self.p2.name) 116 117 win = self.winner(self.p1, 118 self.p2) 119 print("War is over.{} wins" 120 .format(win)) 121 122 def winner(self, p1, p2): 123 if p1.wins > p2.wins: 124 return p1.name 125 if p1.wins < p2.wins: 126 return p2.name 127 return "It was a tie!" 128 129game = Game() 130game.play_game() 131
** という記号は強調するために追加したものでしょうか?このままではSyntaxErrorになります。
実際の動作するコードを提示してください。
「考えてもピンと来なかった」とのことですが、調べてみたのでしょうか。
気になっている。 c2 という変数を含んでいる関数は、`__lt__`と`_gt__`という特殊なメソッド(関数) ですが、これらの意味を調べていますか。
matherさん
修正依頼ありがとうございます。修正させていただきました。
TkakaiYさん
ご指摘ありがとうございます。
特殊メソッドがかかわっているのだろうと思って1度調べたのですが。
お恥ずかしい話、つながりがよくわからないため他の要因かと思ったので質問させていただきました。
matherさんにご指摘していただいたので、現在再度理解をするために調べています。
回答2件