import random
import math
first = "○"
second = "×"
mark = {0 : "-", 1 : "", -1 : ""}
#1:プレイヤー、-1:コンピュータ
field = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
input_number = ["1", "2", "3", "4", "5", "6", "7", "8","9"]
def senkou_koukou():
print("先攻(○)後攻(×)を決めます。")
choice = int(input("0か1を入力してください。"))
first_attack = random.randint(0, 1)
print("先攻は " + str(first_attack) + "です。")
if choice == first_attack:
print("あなたは先攻です。")
mark[1] = first
mark[-1] = second
else:
print("あなたは後攻です。")
mark[1] = second
mark[-1] = first
print(mark)
def print_field():
str_line = ""
print("")
print("=====")
for i in range(3):
for j in range(3):
if field[i][j] == 0:
str_line += input_number[i * 3 + j]
else:
str_line += mark[field[i][j]]
if j < 2:
str_line += "|"
print(str_line)
str_line = ""
if i < 2:
print("-+-+-")
print("=====")
print("")
def input_player(turn):
print("表示されている番号のいずれかを入力してください。")
while (True):
input_str = input("")
if input_str.isdigit():
input_int = int(input_str)
if input_int >= 1 and input_int <= 9:
row = math.floor((input_int - 1) / 3)
col = (input_int - 1) % 3
if field[row][col] == 0:
field[row][col] = 1
break
print("")
print("もう一度、表示されている番号のいずれかを入力してください。")
def input_computer(turn):
while (True):
row = random.randint(0, 2)
col = random.randint(0, 2)
if field[row][col] == 0:
print("コンピュータは " + str(row * 3 + col + 1) + " を選びました。" )
field[row][col] = -1
break
def check_winner(player_number):
win = False
for i in range(3):
if sum(field[i]) == player_number * 3:
win = True
break
if win == False:
for j in range(3):
if field[0][j] + field[1][j] + field[2][j] == player_number * 3:
win = True
break
if win == False:
if field[0][0] + field[1][1] + field[2][2] == player_number * 3:
win = True
elif field[2][0] + field[1][1] + field[0][2] == player_number * 3:
win = True
return win
def field_full():
is_full = True
for i in range(3):
for j in range(3):
if field[i][j] == 0:
is_full = False
return is_full
senkou_koukou()
print_field()
finish = False
turn = first
while (finish == False):
if mark[1] == turn:
input_player(turn)
print_field()
if check_winner(1) == True:
print("あなたの勝ち")
finish = True
else:
input_computer(turn)
print_field()
if check_winner(-1):
print("あなたの負け")
finish = True
if finish == False and field_full() == True:
print("引き分け")
finish = True
if turn == first:
turn = second
else:
turn = first