-
Notifications
You must be signed in to change notification settings - Fork 0
/
tic_tac_toe.py
88 lines (71 loc) · 2.43 KB
/
tic_tac_toe.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
def print_field():
print(f"---------\n"
f"| {field[0][0]} {field[0][1]} {field[0][2]} |\n"
f"| {field[1][0]} {field[1][1]} {field[1][2]} |\n"
f"| {field[2][0]} {field[2][1]} {field[2][2]} |\n"
f"---------")
def validate_coordinates(inputs):
"""
Validates coordinates entered by a user
:param inputs: coordinates
"""
is_valid = True
if not (inputs[0].isdigit() and inputs[1].isdigit()):
print("You should enter numbers!")
is_valid = False
elif not (1 <= int(inputs[0]) <= 3 and 1 <= int(inputs[1]) <= 3):
print("Coordinates should be from 1 to 3!")
is_valid = False
elif field[int(inputs[0]) - 1][int(inputs[1]) - 1] != " ":
print("This cell is occupied! Choose another one!")
is_valid = False
return is_valid
def check_winnings():
"""
Checking all the possible winning combinations.
:return: 'n' no one, 'X' and 'O' usual meanings
"""
winning_player = 'n' # i for impossible, n no one, X and O usual meanings
for i in range(len(field)): # vertical win
if field[0][i] == field[1][i] == field[2][i]:
winning_player = field[0][i]
for i in range(len(field)): # horizontal win
if field[i][0] == field[i][1] == field[i][2]:
winning_player = field[i][0]
if field[0][0] == field[1][1] == field[2][2]: # Diagonal win
winning_player = field[1][1]
if field[0][2] == field[1][1] == field[2][0]: # Diagonal win
winning_player = field[1][1]
return 'n' if winning_player == ' ' else winning_player
def get_input(current_player):
"""
Get current user input
:param current_player: sign of the palyer
"""
while True:
global field
coordinates = input("Enter the coordinates: ").split()
if validate_coordinates(coordinates):
field[int(coordinates[0]) - 1][int(coordinates[1]) - 1] = current_player
break
def initialise_field():
"""
Initialise empty field.
"""
chars = [" " for _ in range(9)]
return [chars[i:i + 3] for i in range(0, 9, 3)]
# initialising the field
field = initialise_field()
print_field()
turn = 0
while check_winnings() == 'n' and turn < 9:
player = "X" if turn % 2 == 0 else "O"
get_input(player)
print_field()
turn += 1
else:
winner = check_winnings()
if winner == 'n':
print("Draw")
else:
print(f"{winner} wins")