I'm trying to develop a game of old in python, which receives a user who will play against the computer, the output should tell the winner of the game or if it got old. Almost everything is correct, except when the game gets old, because I get the following error:
File "C: \ Users \ Pedroh \ Desktop \ 0.py old game", line 244, in definePlay (board, computer, play)
File "C: \ Users \ Pedroh \ Desktop \ 0.py old game", line 99, in
define game space [move] = letter TypeError: list indices must be integers or slices, not NoneType
Here's my code:
import random
import sys
import time
Computador = str('Computador')
def sorteioPrimeiraJogada(lista):
sorteio=random.choice(lista)
return sorteio
def desenhoDoTabuleiro(espaco):
print(' | |')
print(' ' + str(espaco[0]) + ' | ' + str(espaco[1]) + ' | ' + str(espaco[2]))
print(' | |')
print('--------------------')
print(' | |')
print(' ' + str(espaco[10]) + ' | ' + str(espaco[11]) + ' | ' + str(espaco[12]))
print(' | |')
print('--------------------')
print(' | |')
print(' ' + str(espaco[20]) + ' | ' + str(espaco[21]) + ' | ' + str(espaco[22]))
print(' | |')
def posicaoTabuleiro():
print(' | |')
print(' ' '00' ' | ''01' ' | ' '02')
print(' | |')
print('--------------------')
print(' | |')
print(' ' '10' ' | ''11' ' | ' '12')
print(' | |')
print('--------------------')
print(' | |')
print(' ' '20' ' | ''21' ' | ' '22')
print(' | |')
print(' ')
print(' ')
def solicitaSimboloDoHumano ():
while True:
variavel=str(input('Com qual símbolo você prefere jogar(X ou O)? ')).upper()
if variavel== 'X' or variavel=='x' :
print('Você jogará contra o computador, que usará O.')
break
elif variavel== 'O' or variavel=='o':
print('Você jogará contra o computador, que usará X.')
break
else:
print('Você não digitou um símbolo válido.')
return variavel
def listaLetra():
global variavel
if variavel== 'X' or variavel=='x':
letra = ['X','O']
elif variavel== 'O' or variavel=='o' or variavel=='0':
letra= ['O','X']
return letra
def jogarNovamente():
print('Você quer jogar novamente?(sim ou não)')
jn=input().lower().startswith('s')
while not jn:
print('Volte Sempre!')
time.sleep(2)
sys.exit()
return False
return True
def defineJogada(espaco, letra, jogada):
espaco[jogada] = letra
def verificaVencedor(ep, var):
return ((ep[0] == var and ep[1] == var and ep[2] == var) or
(ep[10] == var and ep[11] == var and ep[12] == var) or
(ep[20] == var and ep[21] == var and ep[22] == var) or
(ep[0] == var and ep[10] == var and ep[20] == var) or
(ep[1] == var and ep[11] == var and ep[21] == var) or
(ep[2] == var and ep[12] == var and ep[22] == var) or
(ep[0] == var and ep[11] == var and ep[22] == var) or
(ep[2] == var and ep[11] == var and ep[20] == var))
def copiaTabuleiro(espaco):
copiaespaco = []
for i in espaco:
copiaespaco.append(i)
return copiaespaco
def temEspacoLivre(espaco,jogada):
return espaco[jogada] == ' '
def jogadaHumana():
print('Qual a sua jogada? (x e y[0,2])')
jogada=input()
return jogada
def validaJogada(espaco):
global jogada
while jogada not in '00 01 02 10 11 12 20 21 22'.split() or not temEspacoLivre(espaco,int(jogada)):
print('Você não digitou uma jogada válida.')
jogada = jogadaHumana()
return int(jogada)
def escolheJogadaAleatoriaDaLista(espaco, listaDeJogadas):
jogadasPossiveis = []
for i in listaDeJogadas:
if temEspacoLivre(espaco, i):
jogadasPossiveis.append(i)
if len(jogadasPossiveis) != 0:
return random.choice(jogadasPossiveis)
else:
return None
def jogadaComputador(espaco, computadorlet):
if computadorlet == 'X':
jogadorlet = 'O'
else:
jogadorlet = 'X'
for i in range(0, 23):
copia = copiaTabuleiro(espaco)
if temEspacoLivre(copia, i):
defineJogada(copia, computadorlet, i)
if verificaVencedor(copia, computadorlet):
return i
for i in range(0, 23):
copia = copiaTabuleiro(espaco)
if temEspacoLivre(copia, i):
defineJogada(copia, jogadorlet, i)
if verificaVencedor(copia, jogadorlet):
return i
jogada = escolheJogadaAleatoriaDaLista(espaco, [0, 2, 20, 22])
if jogada != None:
return jogada
if temEspacoLivre(espaco, 11):
return 11
return escolheJogadaAleatoriaDaLista(espaco, [21, 10, 12, 1])
def verificaVelha(espaco):
for i in range(0, 23):
if temEspacoLivre(espaco, i):
return False
return True
while True:
tabuleiro = [' ']*23
nome_ok = False
while nome_ok == False:
nome=input('Qual é o seu nome(ou apelido)? ')
if nome:
nome_ok = True
lista = [nome, Computador]
variavel = solicitaSimboloDoHumano()
jogadorlet, computadorlet = listaLetra()
vez = sorteioPrimeiraJogada(lista)
print ('A partida começará por %s.' %vez)
jogoAcontecendo = True
while jogoAcontecendo:
if vez == nome:
posicaoTabuleiro()
desenhoDoTabuleiro(tabuleiro)
jogada = jogadaHumana()
movimento = validaJogada(tabuleiro)
defineJogada(tabuleiro,jogadorlet,movimento)
if verificaVencedor(tabuleiro, jogadorlet):
posicaoTabuleiro()
desenhoDoTabuleiro(tabuleiro)
print('Vencedor: %s' %nome)
jogoAcontecendo = False
else:
if verificaVelha(tabuleiro):
desenhoDoTabuleiro(tabuleiro)
print('Deu velha!')
break
else:
vez = Computador
else:
jogada = jogadaComputador(tabuleiro, computadorlet)
defineJogada(tabuleiro, computadorlet, jogada)
if verificaVencedor(tabuleiro, computadorlet):
posicaoTabuleiro()
desenhoDoTabuleiro(tabuleiro)
print('Vencedor: Computador')
jogoAcontecendo = False
else:
if verificaVelha(tabuleiro):
desenhoDoTabuleiro(tabuleiro)
print('Deu velha!')
break
else:
vez = nome
if not jogarNovamente():
break
I would like someone to clarify what error I am getting, and how can I fix it.