cadenas de caracteres
Mikel Larreategi
larreategi en eibar.org
Dom Ago 24 19:06:42 CEST 2003
Se me ha olvidado antes decirte por que no funciona tu programa :)
25/08/03-n Sonia-(e)k idatzi du:
El lunes, 25 de agosto de 2003 Sonia escribió:
> #1º escribir una funcion q, dado un contorno, indique si
> #se trata de un contorno cerrado, es decir, si el ultimo
> #punto coincide con el punto inicial.
> def contorno_cerrado(ptox,ptoy,mov):
> #mov='EEESSSOOOEE'
> mov=[]
> contN=0
> contS=0
> contE=0
> contO=0
> for i in range(0,len(mov)):
> if mov[i]=='E':
> contE=contE+1
> if mov[i]=='O':
> contO=contO+1
> if mov[i]=='N':
> contN=contN+1
> if mov[i]=='S':
> contS=contS+1
> if contE==contO and contN==contS:
> if contE+contO == contN+contS:
Esta condicion no tiene por que cumplirse, la tienes que quitar
para que funcioneyo puedo ir 5 veces hacia el norte y 5 al sur, y
no moverme hacia el este y el oeste, y estoy en el mismo sitio que
al comienzo.
> print 'Contorno cerrado'
> else:
> print 'Contorno abierto'
Aqui te falta un else de la primera condicion, si no son iguales
sera un contorno abierto.
> x=3
> y=6
> movimientos1=['EEESSSOOOOONNNEE'] #cerrado
> movimientos2=['NNNNNNNEESSSSEESSSOOSSOONN'] #cerrado
> movimientos3=['NNEEESSSOO'] #abierto
El otro problema esta aqui:
Lo que tienes en movimientos es una lista con un unico elemento que
es una cadena. Si haces
print movimientos1[0]
conseguimos:
EEESSSOOOOONNNEE
Se considera la cadena de caracteres como lista de caracteres. Si
pones
movimientos1='EEESSSOOOOONNNEE'
Tu programa funciona.
Si movimientos tiene que ser como tu pones, entonces las
comprobaciones las tendrias que hacer tal que asi:
mov[0][i]
Si utilizas esto, en el for tienes que poner esto:
for i in range(0,len(mov[0])):
> contorno_cerrado(x,y,movimientos1)
> contorno_cerrado(x,y,movimientos2)
> contorno_cerrado(x,y,movimientos2)
Saludos,
Mikel Larreategi
Estudiante Ingenieria Informatica
UPV-EHU
http://usuarios.lycos.es/erral
PGP Key ID: 0x597B543C
Más información sobre la lista de distribución Python-es