1
I’m trying to develop an old game in python, which gets a user who will play against the computer, the output should say the winner of the game or got old. Almost everything is correct except when the game turns old, as I get the following error:
File "C: Users Pedroh Desktop 0.py old game", line 244, in define Game(board, computer, play)
File "C: Users Pedroh Desktop 0.py old game", line 99, in
defineJogada space[move] = letter Typeerror: list indices must be integers or Slices, not Nonetype
This is 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 explain to me what mistake I’m getting, and how I can fix it.
Good morning jsbueno, what would you recommend me to fill the return of the function with something that has the same craft as None? Because it is necessary to return None to check if the board is full, as well you must understand..
– João Artur