-
Notifications
You must be signed in to change notification settings - Fork 0
/
Poker_Hand_Analyser.py
132 lines (85 loc) · 3.02 KB
/
Poker_Hand_Analyser.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
import sys
print('(Hearts = 1\n Diamonds = 2\n Spades = 3\n Clubs = 4)\n')
print('(Ace = 1,\n 2 = 2,\n ..........,\n Jack = 11,\n Queen = 12,\n King = 13)\n')
print('Example Input:\n"1,1,2,1,13,4,6,2,3,4" = Ace-Hearts, Two-Hearts, King-Clubs, Six-Diamonds, Three-Clubs\n')
print('\nType out the cards in your hand:\n')
possible_hands = ['a royal flush', 'a straight flush', 'four of a kind',
'a full house', 'a flush', 'a straight', 'three of a kind',
'two pairs', 'one pair', 'nothing']
def repeat(cards):
repeat = []
for i in range(len(cards)):
for j in range(len(cards)):
if cards[i] == cards[j] and i != j:
repeat.append(cards[i])
return len(repeat)
def royal_flush(suits, cards):
royals = [1, 13, 12, 11, 10]
top_cards = []
if flush(suits):
for c in cards:
if int(c) in royals:
top_cards.append(int(c))
else:
return False
return sorted(top_cards) == sorted(royals)
def straight_flush(suits, cards):
return straight(cards) and flush(suits)
def four_of_a_kind(cards):
return repeat(cards) >= 12
def full_house(cards):
return repeat(cards) == 8
def flush(suits):
i = 1
while i < len(suits) and suits[i] == suits[i - 1]:
i = i + 1
return i == len(suits)
def straight(cards):
smallest = int(cards[0])
cards_wanted = ''
for c in cards:
if int(c) < int(smallest):
smallest = int(c)
for i in range(5):
cards_wanted = cards_wanted + str(smallest + i)
for c in cards:
if c in cards_wanted:
cards_wanted = cards_wanted.replace(c, '')
else:
return False
return not cards_wanted
def three_of_a_kind(cards):
return repeat(cards) == 6
def two_pairs(cards):
return repeat(cards) == 4
def one_pair(cards):
return repeat(cards) == 2
def call_functions(suits, cards):
if royal_flush(suits, cards):
print('This hand is {}'.format(possible_hands[0]))
elif straight_flush(suits, cards):
print('This hand is {}'.format(possible_hands[1]))
elif four_of_a_kind(cards):
print('This hand is {}'.format(possible_hands[2]))
elif full_house(cards):
print('This hand is {}'.format(possible_hands[3]))
elif flush(suits):
print('This hand is {}'.format(possible_hands[4]))
elif straight(cards):
print('This hand is {}'.format(possible_hands[5]))
elif three_of_a_kind(cards):
print('This hand is {}'.format(possible_hands[6]))
elif two_pairs(cards):
print('This hand is {}'.format(possible_hands[7]))
elif one_pair(cards):
print('This hand is {}'.format(possible_hands[8]))
else:
print('This hand is {}'.format(possible_hands[9]))
def main():
for line in sys.stdin:
line = line.strip().split(',')
suits = line[::2]
cards = line[1::2]
call_functions(suits, cards)
if __name__ == '__main__':
main()