Python - Ayuda en este código

 
Vista:

Ayuda en este código

Publicado por Javier (2 intervenciones) el 11/04/2015 15:24:51
Hola buenas, estoy empezando en python y decidí hacer un 3 en raya con la consola, conseguí hacer el código de abajo, pero me da 2 errores, el primero de ellos, linea 89 File "C:/Users/javier/Desktop/3rayao.py", line 91, in <module>
while not decidir_ganador(tablero):
no sé ni que me quiere decir y el segundo File "C:/Users/javier/Desktop/3rayao.py", line 27, in decidir_ganador
if table[terna[0]] == table[terna[1]] == table[terna[3]] != " ":
IndexError: tuple index out of range
no sé soluccionarlo. os dejo el código aquí abajo. Gracias de antemano por la ayuda.
Creo que las tabulaciones no se han copiado, pero estan bien puestas...
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
################VARIABLES##############
 
ordenador = "O"
jugador = "X"
empate = "T"
turno = "X"
tablero = []
 
#################FUNCIONES#################
 
def pedir_numero(pregunta, minimo, maximo):
    respuesta = None
    while respuesta not in range(minimo, maximo):
        respuesta = int(input(pregunta))
        return respuesta
 
def mostrar_tablero():
    print("\n\t",tablero[0], "|" , tablero[1], "|", tablero[2])
    print("\t", "---------")
    print("\t",tablero[3], "|" , tablero[4], "|", tablero[5])
    print("\t", "---------")
    print("\t",tablero[6], "|" , tablero[7], "|", tablero[8], "\n")
 
def decidir_ganador(table):
    Formas_De_Ganar = ((0, 1, 2),(3, 4, 5),(6, 7, 8),(0, 3, 6),(1, 4, 7),(2, 5, 8),(0, 4, 8),(2, 4, 6))
    for terna in Formas_De_Ganar:
        if table[terna[0]] == table[terna[1]] == table[terna[3]] != " ":
            vence = table[terna[0]]
            return vence
    if " " not in table:
        return empate
    return None
 
def movimientos_permitidos(table):
    movper = []
    for i in range(9):
        if table[i] == " ":
            movper.append(i)
    return movper
 
def jugador_mueve():
    legal = movimientos_permitidos(tablero)
    mov = None
    while mov not in legal:
        mov = pedir_numero("Elige una posicion ( 0-8):", 0 ,9)
        if mov not in legal:
            print("\nEsa esta ocupada. Elige otra.\n")
    print("Bien...")
    return mov
 
def ordenador_mueve():
    copiatablero = tablero[:]
    Mejores_Movimientos = (4, 0, 2, 6, 8, 1, 3, 5, 7)
    print("Elegiré la posición número: ", end=" ")
    for mov in movimientos_permitidos(copiatablero):
        copiatablero[mov] = ordenador
        if decidir_ganador(copiatablero) == ordenador:
            print(mov)
            return mov
        copiatablero[mov] = " "
    for mov in movimientos_permitidos(copiatablero):
        copiatablero[mov] = jugador
        if decidir_ganador(copiatablero) == jugador:
            print(mov)
            return mov
        copiatablero[mov] = " "
    for mov in Mejores_Movimientos:
        if mov in movimientos_permitidos(copiatablero):
            print(mov)
            return mov
 
##############PROGRAMA###################
print("""
Bienvenido al 3 en raya.

    0 | 1 | 2
    ---------
    3 | 4 | 5
    ---------
    6 | 7 | 8

Para realizar un movimiento tendras que introducir un numero del 0 al 8
Correspondiendo a una de las posiciones del tablero de arriba.
""")
 
for i in range(9):
    tablero.append(" ")
 
mostrar_tablero()
 
while not decidir_ganador(tablero):
    if turno == jugador_mueve():
        tablero[movimiento] = jugador
    else:
        movimiento = ordenador_mueve()
        tablero[movimiento] = ordenador
    mostrar_tablero()
    if turno == jugador:
        turno = ordenador
    else:
        turno = jugador
 
ganador = decidir_ganador(tablero)
 
if ganador == ordenador:
    print("Gané pringao")
elif ganador == jugador:
    print("GANASTE PUTO")
else:
    print("tablas tete, me aburro")
 
input("\n\nPulsa enter para salir")
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
1
Responder
sin imagen de perfil

Ayuda en este código

Publicado por Antonio Heriberto (5 intervenciones) el 11/04/2015 17:11:10
Tu error es simplemente en la linea 27 ya que el rango de tu tablero es de 0 a 2, por que tienes solo 3 renglones
if table[terna[0]] == table[terna[1]] == table[terna[3]] != " ":

el correcto seria este:

if table[terna[0]] == table[terna[1]] == table[terna[2]] != " ":
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Ayuda en este código

Publicado por Javier (2 intervenciones) el 11/04/2015 19:40:04
Cierto, fallo tonto, muchas gracias, no lo veia XD
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar