### Week 18

posted Mar 24, 2017, 8:04 AM by Attila Lengyel   [ updated Mar 24, 2017, 10:09 AM ]
 import randomdef drawBoard(board):  print("    |   |   ")  print(" ",board[0],"|",board[1],"|",board[2])  print("    |   |   ")    print("-------------")  print("    |   |   ")  print(" ",board[3],"|",board[4],"|",board[5])  print("    |   |   ")    print("-------------")  print("    |   |   ")  print(" ",board[6],"|",board[7],"|",board[8])  print("    |   |   ")  def win(board, player):  if board[0] == player and board[1] == player and board[2] == player:    return True  if board[3] == player and board[4] == player and board[5] == player:    return True  if board[6] == player and board[7] == player and board[8] == player:    return True  if board[0] == player and board[3] == player and board[6] == player:    return True  if board[1] == player and board[4] == player and board[7] == player:    return True  if board[2] == player and board[5] == player and board[8] == player:    return True  if board[0] == player and board[4] == player and board[8] == player:    return True  if board[2] == player and board[4] == player and board[6] == player:    return True    return False############## Get computer mark ############def opponent(sUser):  if sUser == "O":    return "X"  return "O"############## Strategy to move random ############def randommove(board, sUser):  emptystep = []  for x in range(0,9):    if board[x] == " ":      emptystep.append(x)    move = random.randint(0,len(emptystep)-1)  move = emptystep[move]  return move############## Strategy to win or block ############def nextMoveWin(board, sUser):  for x in range(0,9):    if board[x] == " ":      board[x] = sUser      isWin = win(board, sUser)      board[x] = " "      if isWin:        return x  return -1    ############## Move center ##################def moveCenter(board):  if board[4] == " ":    return 4  return -1############## Move Corner ##################def moveCorner(board):  if board[1] == " " and board[3] == " " and board[0] == " ":    return 0  if board[1] == " " and board[5] == " " and board[2] == " ":    return 2  if board[5] == " " and board[7] == " " and board[8] == " ":    return 8  if board[3] == " " and board[7] == " " and board[6] == " ":    return 6    if board[0] == " ":    return 0      if board[2] == " ":    return 2  if board[6] == " ":    return 6  if board[8] == " ":    return 8  return -1############## Check for tie ##################def checktie(board):  isTie = True  for x in range(0,9):    if board[x] == " ":      isTie = False    return isTie############## Head or Tail ######################def headtail():  bet = input("Head or Tail:")  flip = random.randint(0,1)  if flip == 0:    coin = "Head"  else:    coin = "Tail"    if bet == coin:    return True    return False############## User move ##################def usermove(board, user):  move = input("Make your move (1~9):")  if board[int(move) - 1] != " ":    print("You lost your move!!!")  else:    board[int(move) - 1] = user    drawBoard(board)    if win(board, user):    print("The user ", user, "won!!!")    return True    if checktie(board):    print("It is a tie")    return True      return False  ############## Computer move ##################def computermove(board, user):    movetype = ""    move = nextMoveWin(board, opponent(user))  if move == -1:    move = nextMoveWin(board, user)  else:    if movetype == "": movetype = "Computer moves to win!"  if move == -1:    move = moveCenter(board)  else:    if movetype == "": movetype = "Computer blocks your win!"  if move == -1:    move = moveCorner(board)  else:    if movetype == "": movetype = "Computer moves center!"  if move == -1:    move = randommove(board,opponent(user))  else:    if movetype == "": movetype = "Computer moves corner!"  if movetype == "": movetype = "Computer moves random!"  print(movetype)  board[move] = opponent(user)  print("Computer moves", move + 1)    drawBoard(board)    if win(board, opponent(user)):    print("The computer", opponent(user), "won!!!")    return True    if checktie(board):    print("It is a tie!")    return True    return False################## Main Program ##################tttBoard = [" "] * 9drawBoard(tttBoard)if headtail():  print("You won, you will be X")  user = "X"else:  print("You lost, you will be O")  user = "O"print("The computer is", opponent(user))while(True):    if user == "X":    if usermove(tttBoard, user):break    if computermove(tttBoard, user): break  else:    if computermove(tttBoard, user):break    if usermove(tttBoard, user):break