Hola amigos, ahora estoy en un ejercicio de elaborar un juego llamado batalla naval, y no he entendido lo que se me pide hacer (se supone que vamos haciendo el código paso a paso).
Las instrucciones son estas:
Citar01. Agregá una sentencia elif que verifique si la ubicación ya tiene una 'X'.
02. Si la tiene, mostrá "Ya dijiste esa."
Este es mi código:
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_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)
adivina_fila = input("Adivina fila:")
adivina_columna = input("Adivina columna:")
print barco_fila
print barco_columna
# escribí tu código a continuación.
if adivina_fila == barco_fila:
print "Felicitaciones, Hundiste mi barco!"
else:
print "Agua, no tocaste mi barco"
if adivina_fila not in range(5) or adivina_columna not in range(5):
print "Huy, eso ni siquiera esta en el oceano"
else:
print "Aquí no ha pasado nada"
elif board[adivina_fila][adivina_columna] == 'X':
print "Ya dijiste esa"
Parece que lo que esta mal es la última parte:
elif board[adivina_fila][adivina_columna] == 'X':
print "Ya dijiste esa"
El error del interprete es:
File "python", line 37
elif board[adivina_fila][adivina_columna] == 'X':
^
SyntaxError: invalid syntax
la sintaxis está mala, primero debe ir elif que else...
es decir... lo tuyo se interpreta algo como
el compilador llega al primer if y lo salta porque no cumple, como hay else ejecuta automáticamente eso... luego se consigue con un elif que no pertenece a nadie porque no hay condiciones if sin resolverse
el doeen siempre debe ser IF -> [ELIF ]-> [ELSE]
Si, ya me había percatado de eso, y he reacomodado el código:
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_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)
adivina_fila = input("Adivina fila:")
adivina_columna = input("Adivina columna:")
print barco_fila
print barco_columna
if adivina_fila == barco_fila:
print "Felicitaciones, Hundiste mi barco!"
# Codigo reacomodado
elif board[adivina_fila][adivina_columna] == 'X':
print "Ya dijiste esa"
else:
print "Agua, no tocaste mi barco"
if adivina_fila not in range(5) or adivina_columna not in range(5):
print "Huy, eso ni siquiera esta en el oceano"
else:
print "Aquí no ha pasado nada"
pero creo que tengo problemas con el módulo, eso es lo que me dice el interprete:
CitarTraceback (most recent call last):
File "python", line 31, in <module>
NameError: name 'board' is not defined
Citarpero creo que tengo problemas con el módulo, eso es lo que me dice el interprete:
CitarTraceback (most recent call last):
File "python", line 31, in <module>
NameError: name 'board' is not defined
El error se está explicando por si mismo. No existe ningún miembro deifnido en el código con el nombre '
board', quizás quisiste decir '
tablero', que es como se llama tu lista:
Cita de: Joe Fraddy en 28 Enero 2015, 20:40 PMimport random
tablero = []
...
Saludos.
Si, efectivamente tenia que poner tablero, en vez de board, pensé que board era alguna función de random.
Pero ahora creo que hay un problema de conversión, que no logro entender, el depurador me saca esto:
Traceback (most recent call last):
File "python", line 38, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 3: ordinal not in range(128)
Algo relacionado con problemas de codificación y su solución ya se te explicó aquí:
Problema en python [alguno me ayuda?? (http://foro.elhacker.net/buscador-t428107.0.html)
vuelve a leer atentamente :P
Pero en esta ocasión el error parece tener que ver con la codificación de la shell (no como en la otra pregunta), prueba así
# encoding=utf8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
saludos
No parece que ese no es problema, me manda un error al correrlo:
CitarUnknown Error: O O O O O
aprende a usar un debugger :P
http://www.pythontutor.com/visualize.html (http://www.pythontutor.com/visualize.html)
más fácil que eso no hay jejeje
ahí deberias ver las fallas de codigo mejor que nada
Cita de: engel lex en 28 Enero 2015, 23:01 PM
aprende a usar un debugger :P
http://www.pythontutor.com/visualize.html (http://www.pythontutor.com/visualize.html)
más fácil que eso no hay jejeje
ahí deberias ver las fallas de codigo mejor que nada
Es que el problema es que este es un interprete html y creo que no va con el código real, lo que hago son ejercicios, que a veces esta bien, pero simplemente no corren porque esta hecho en web
para tu ejercicio corre bien ;)
y hasta ahora los codigos que he probado funcionan :P
intentalo
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.
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:
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!
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
Bueno, gracias por su ayuda, les dejo el ejercicio terminado, quizá mas adelante le pueda servir a alguien:
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