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

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

engel lex

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]
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Joe Fraddy

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

Eleкtro

#3
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 PM
Código (python,3) [Seleccionar]
import random

tablero = []

...

Saludos.








Joe Fraddy

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)

Eleкtro

Algo relacionado con problemas de codificación y su solución ya se te explicó aquí:
Problema en python [alguno me ayuda??

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í

Código (python) [Seleccionar]
# encoding=utf8  
import sys  

reload(sys)  
sys.setdefaultencoding('utf8')


saludos








Joe Fraddy

No parece que ese no es problema, me manda un error al correrlo:

CitarUnknown Error: O O O O O

engel lex

aprende a usar un debugger :P

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Joe Fraddy

Cita de: engel lex en 28 Enero 2015, 23:01 PM
aprende a usar un debugger :P

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

engel lex

para tu ejercicio corre bien ;)

y hasta ahora los codigos que he probado funcionan :P

intentalo
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.