Foros del Web » Programando para Internet » Python »

ayuda con for

Estas en el tema de ayuda con for en el foro de Python en Foros del Web. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Python: Ver original def palindromo ( palabra ) :     n = len ( palabra )     k = list ...
  #1 (permalink)  
Antiguo 13/03/2011, 10:59
 
Fecha de Ingreso: noviembre-2010
Mensajes: 54
Antigüedad: 14 años
Puntos: 1
ayuda con for

Código Python:
Ver original
  1. def palindromo(palabra):
  2.     n=len(palabra)
  3.     k=list(palabra)
  4.     for i in range(n):
  5.         print(i)
  6.         if k[i]==k[-i]:
  7.             return True
  8.      
  9.  
  10. h=input('palabra')
  11. print(palindromo(h))

porque ese for solo me devuelve el numero 0?

gracias
  #2 (permalink)  
Antiguo 13/03/2011, 13:09
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: ayuda con for

Cita:
Iniciado por sanfermin67 Ver Mensaje
Código Python:
Ver original
  1. def palindromo(palabra):
  2.     n=len(palabra)
  3.     k=list(palabra)
  4.     for i in range(n):
  5.         print(i)
  6.         if k[i]==k[-i]:
  7.             return True
  8.      
  9.  
  10. h=input('palabra')
  11. print(palindromo(h))

porque ese for solo me devuelve el numero 0?

gracias
Código Python:
Ver original
  1. def palindromo(palabra):
  2.     n = len(palabra) #Longitud de la palabra
  3.     k = list(palabra) #Lo conviertes en una lista
  4.     for i in range(n): #Iteras sobre la lista [0, 1, .., n-1]
  5.         print(i) #Imprimir indice, aqui imprime 0, 1, .., n-1
  6.         if k[i] == k[-i]: #Checho si k[i] es igual a k[-i]
  7.             return True #Si algun caracter cumple la condicion anterior regreso true
  8.     #Si ningun caracter coincide simetricamente hablando entonces regreso false
  9.     #Si n es par siempre regresara true
  10.  
  11. h = input('palabra')
  12. print(palindromo(h))

Casos de prueba:
abcda
abcd
  #3 (permalink)  
Antiguo 14/03/2011, 05:27
 
Fecha de Ingreso: noviembre-2010
Mensajes: 54
Antigüedad: 14 años
Puntos: 1
Respuesta: ayuda con for

pero explicame q es lo que hago mal porque yo sigo sin ver el fallo...
  #4 (permalink)  
Antiguo 14/03/2011, 08:13
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: ayuda con for

Bueno para mi lo veo tan claro como el agua. Mira un palindromo es aquella palabra que se lee igual de izquierda a derecha que de derecha a izquierda. Ejemplos:
Código:
Palabra -> Es palindromo?
Ana     -> Si
Anita   -> No
abcba   -> Si
aa      -> Si
ab      -> No
abcda   -> No
El caso es que tu código se detiene a la primera coincidencia, por que 0 == -0 ejemplo:
Código:
cadena = 'abcda'
if cadena[0] == cadena[-0]: #esto siempre es verdadero, siempre regresa True
Lo mas simple que se me ocurre que es revertir la cadena y checar si es igual a la original. No del todo eficiente, pero es lo mas fácil de hacer.
  #5 (permalink)  
Antiguo 15/03/2011, 10:28
 
Fecha de Ingreso: noviembre-2010
Mensajes: 54
Antigüedad: 14 años
Puntos: 1
Respuesta: ayuda con for

Código Python:
Ver original
  1. def palindromo(palabra):
  2.     n=len(palabra)
  3.     k=list(palabra)
  4.     i=0
  5.     j=n-1
  6.     while k[i]==k[j]:
  7.         i+=1
  8.         j-=1
  9.         return True
  10.     return False
  11.      
  12.  
  13. h=input('palabra')
  14. print(palindromo(h))

he echo esta funcion pero me sigue ocurriendo lo mismo...

Última edición por sanfermin67; 15/03/2011 a las 11:26
  #6 (permalink)  
Antiguo 15/03/2011, 11:31
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: ayuda con for

Tu programa no esta ni siquiera remotamente solucionado.
Prueba con "abca" como vez no es un palíndromo y de todas formas lo acepta!!!
  #7 (permalink)  
Antiguo 15/03/2011, 11:53
 
Fecha de Ingreso: noviembre-2010
Mensajes: 54
Antigüedad: 14 años
Puntos: 1
Respuesta: ayuda con for

Código Python:
Ver original
  1. def palindromo(palabra):
  2.     k=list(palabra)
  3.     q=[]
  4.     n=len(palabra)
  5.     for l in range(1,n+1):
  6.         q.append(k[-l])

he conseguido crear 2 listas una revertida de la otra para hacer lo que me has dicho pero ahora al intentarlo con el while me sale mal otra vez...
  #8 (permalink)  
Antiguo 15/03/2011, 12:44
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: ayuda con for

al final de tu función haz un:
Código Python:
Ver original
  1. print(k)
  2. print(q)
  3. print(k == q)
  #9 (permalink)  
Antiguo 15/03/2011, 13:13
 
Fecha de Ingreso: noviembre-2010
Mensajes: 54
Antigüedad: 14 años
Puntos: 1
Respuesta: ayuda con for

y que gano con eso???
  #10 (permalink)  
Antiguo 15/03/2011, 13:28
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: ayuda con for

Te ayuda a pensar
  #11 (permalink)  
Antiguo 15/03/2011, 16:27
 
Fecha de Ingreso: noviembre-2010
Mensajes: 54
Antigüedad: 14 años
Puntos: 1
Respuesta: ayuda con for

[h,o,l,a]
[a,l,o,h]

pero que debo utilizar? un for un while...esq ambos me crean lo mismo...
  #12 (permalink)  
Antiguo 15/03/2011, 17:24
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: ayuda con for

Te falto el tercer print (y probablemente el mas importante).

Código Python:
Ver original
  1. def palindromo(palabra):
  2.     k=list(palabra)
  3.     q=[]
  4.     n=len(palabra)
  5.     for l in range(1,n+1):
  6.         q.append(k[-l])
  7.     print(q)
  8.     print(k)
  9.     print(q == k)
  10. h = input('palabra')
  11. palindromo(h)

Ahora prueba con varias palabras.

Da lo mismo si quieres utilizar un while o un for.
  #13 (permalink)  
Antiguo 16/03/2011, 02:49
 
Fecha de Ingreso: noviembre-2010
Mensajes: 54
Antigüedad: 14 años
Puntos: 1
Respuesta: ayuda con for

Código Python:
Ver original
  1. def palindromo(palabra):
  2.     k=list(palabra)
  3.     q=[]
  4.     n=len(palabra)
  5.     for l in range(1,n+1):
  6.         q.append(k[-l])
  7.     if k==q:
  8.         print('es palindromo')
  9.     else:
  10.         print('no es palindromo')
  11. h = input('palabra')
  12. palindromo(h)

Gracias
  #14 (permalink)  
Antiguo 16/03/2011, 03:16
 
Fecha de Ingreso: noviembre-2010
Mensajes: 54
Antigüedad: 14 años
Puntos: 1
Respuesta: ayuda con for

y una ultima pregunta si quiero crear una funcion que me diga que una palabra es la contraria de la otra, por ejemplo: hola y aloh son contrarias

Código Python:
Ver original
  1. def contrarios(palabra1,palabra2):
  2.     k=list(palabra1)
  3.     q=list(palabra2)
  4.     n=len(palabra1)
  5.     for m in range(0,n,1):
  6.         for l in range(0,n,-1):
  7.             print(k[m]==k[l])
  8.  
  9. h1=input('palabra1')
  10. h2=input('palabra2')
  11. contrarios(h1,h2)

que debo hacer??

gracias
  #15 (permalink)  
Antiguo 16/03/2011, 14:46
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: ayuda con for

:-| ¿Como puede ser que pasaste de mal a peor?

Requiere un cambio mínimo al programa del palíndromo, para que funcione como tu lo pides.

Te recomiendo leer python para todos y hacer los ejemplos para que te vayas acostumbrando. Puedes empezar desde la pagina 24 para que pierdas en introducciones.

Edito:
Ademas mi código para saber si una palabra es palindromo.
Código Python:
Ver original
  1. def esPalindromo(palabra):
  2.     return palabra == palabra[::-1]
  #16 (permalink)  
Antiguo 23/03/2011, 08:42
 
Fecha de Ingreso: febrero-2011
Mensajes: 32
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: ayuda con for

Buenas, dejo otra solución al problema original, por si a alguien le sirve.
Código Python:
Ver original
  1. def palindrome():
  2.     print "Ingresa el texto: "
  3.     frase = raw_input()                       #guardo en una variable la palabra a verificar
  4.     i = 0
  5.     while i <= (len(frase)//2):              #creo un bucle que verifica hasta la mitad de la palabra.
  6.         if frase[i] != frase[-i-1]:             #comparo el elemento 0 con el -1, el 1 con el -2, etc...
  7.             print "La palabra no es palindrome."
  8.             break                                     #si alguna comparación da False salgo y aviso que la cadena no es palindrome
  9.         else:
  10.             i += 1                                    
  11.     if (i-1) == len(frase)//2:                  #Esto sólo se cumple si todas las comparaciones fueron True, por lo que sólo ingresará si efectivamente la palabra es un palindromo.
  12.         print "La palabra es palindrome."
  13.         print "Bye."
  14.     else:
  15.         print "Bye."                                 #Ingresará siempre que haya salido del break, antes de llegar a comparar todas las letras, ya que i-1 < len(frase)//2.

Última edición por cipos; 23/03/2011 a las 15:11

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 10:33.