Batalla naval Python!!! [RESUELTO]

Iniciado por Joe Fraddy, 28 Enero 2015, 18:54 PM

0 Miembros y 1 Visitante están viendo este tema.

Joe Fraddy

#10
Ya, creo que el error 38 era por un acento que tenia, pero ahora en la linea 31 tengo un error y no se que esta mal, este es el código:

elif  tablero[adivina_fila][adivina_columna] == "X":

tablero es una lista bacía y los dos argumentos son dos variables de entrada que almacenan dos strings.

Eleкtro

#11
Cita de: Joe Fraddy en 29 Enero 2015, 16:36 PMen la linea 31 tengo un error y no se que esta mal

¿Y cual es el mensaje de error?, no somos adivinos.




Cita de: Joe Fraddy en 29 Enero 2015, 16:36 PMelif  tablero[adivina_fila][adivina_columna] == "X":
tablero es una lista bacía

Creo que tú mismo lo has resuelto sin darte cuenta: Estás intentando acceder a un elemento inexistente, por que la lista está vacía, así pues dará un error de índice fuera de rango.

Solo debes inicializar la lista antes de intentar usarla en la condicional que has mostrado.

Ejemplo funcional:
Código (python) [Seleccionar]
matrix = [
          ["A0","B0"],
          ["A1","B1"]
        ]

if matrix[1][1] == 'A1':
   pass; # Do Nothing.

elif matrix[1][1] == 'B1':
   print "Felicitaciones, Hundiste mi barco!"


Si tienes otro tipo de error, especifíca el mensaje de error.

Saludos!








Joe Fraddy

Saben cual era el error???

el mensaje:

había escrito:

print 'Ya dijiste esa'

y era:

print 'Ya dijiste esa.'

Era el (.) Punto lo que no me dejaba concluir el ejercicio y como no detectaba el error del interprete ps no sabía, pero de todos modos aprendí!!! eso es lo importante xD

Joe Fraddy

Bueno, gracias por su ayuda, les dejo el ejercicio terminado, quizá mas adelante le pueda servir a alguien:

Código (python) [Seleccionar]
import random

tablero = []

for x in range(0,5):
  tablero.append(["O"] * 5)

def print_tablero(tablero):
  for fila in tablero:
    print " ".join(fila)

print "Juguemos as la batalla naval!"
print_tablero(tablero)

def fila_aleatoria(tablero):
  return random.randint(0,len(tablero)-1)

def columna_aleatoria(tablero):
  return random.randint(0,len(tablero[0])-1)

barco_fila = fila_aleatoria(tablero)
barco_columna = columna_aleatoria(tablero)
print barco_fila
print barco_columna

for turn in range(4):
    adivina_fila = input("Adivina fila: ")
    adivina_columna = input("Adivina columna: ")

    if adivina_fila == barco_fila and adivina_columna == barco_columna:
      print "Felicitaciones! Hundiste mi barco!"
    else:
      if (adivina_fila < 0 or adivina_fila > 4) or (adivina_columna < 0 or adivina_columna > 4):
        print "Huy, eso ni siquiera esta en el oceano."
      elif(tablero[adivina_fila][adivina_columna] == "X"):
        print "Ya dijiste esa."
      else:
      print "No tocaste mi barco!"
      tablero[adivina_fila][adivina_columna] = "X"

    if turn == 3:
        print 'Fin del juego'
        break
    print_tablero(tablero)
    print 'Turno', turn+1