Foros del Web » Programando para Internet » Python »

ayuda con un ejercicio de phyton!!gracias

Estas en el tema de ayuda con un ejercicio de phyton!!gracias en el foro de Python en Foros del Web. tengo que hacer un problema sobre archivos pero como las horas lectivas no nos ha dado tiempo a que nos lo expliquen lo se por ...

  #1 (permalink)  
Antiguo 23/12/2010, 12:22
 
Fecha de Ingreso: diciembre-2010
Mensajes: 6
Antigüedad: 13 años, 10 meses
Puntos: 0
ayuda con un ejercicio de phyton!!gracias

tengo que hacer un problema sobre archivos pero como las horas lectivas no nos ha dado tiempo a que nos lo expliquen lo se por donde empezar si pudierais ayudar o recomendarm algo me seria de gran ayuda porque aunque me leido el manual de python lo me aclaro muy. bien.muchas gracias.
aqui os lo dejo:
Se propone construir un programa en Python que acceda a un fichero de texto e imprima la línea
más parecida a un conjunto de términos de búsqueda. Los términos de búsqueda serán especificados
en una única cadena q, utilizando el espacio en blanco como separador. La línea seleccionada podría
contener todos o tan sólo algunos de los términos de búsqueda. El fichero de texto objeto de las
búsquedas (noticias.txt) se adjunta a este enunciado. En todo caso, el programa debería funcionar
sobre cualquier fichero de texto
  #2 (permalink)  
Antiguo 23/12/2010, 12:41
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 un ejercicio de phyton!!gracias

1.- Para archivos lee las FAQ's
2.- Para buscar una subcadena dentro de un texto puedes usar el operador in

Básicamente es todo lo que necesitas.
  #3 (permalink)  
Antiguo 27/12/2010, 20:36
Avatar de ARICARRARO  
Fecha de Ingreso: diciembre-2010
Ubicación: México
Mensajes: 227
Antigüedad: 13 años, 10 meses
Puntos: 10
Respuesta: ayuda con un ejercicio de phyton!!gracias

Puedes buscar las funciones write() y close() de Python par ficheros.

Una sugerencia puedes hacer primer el algoritmo del probelma para que se te pueda ayudar.

Ejemplo

f=open("Fichero.dat","w")
f.write('Escribir en fichero')
f.close()


'''
para leer
'''
f=open("Fichero.dat","r")
f.read()
f.close()

0_o
  #4 (permalink)  
Antiguo 30/12/2010, 13:37
 
Fecha de Ingreso: noviembre-2010
Mensajes: 54
Antigüedad: 14 años
Puntos: 1
Respuesta: ayuda con un ejercicio de phyton!!gracias

me ha interesado bastante este problema ya que yo tambien estoy con ejercicios de este tipo: en un principio he creado una funcion que quiero que me responda si una cadena de palabras esta dentro del texto:

Código Python:
Ver original
  1. f=open("noticias.txt","r")
  2. f.read()
  3. a=str(input('dime las palabras: '))
  4. def funcion():
  5.     if a in f:
  6.         print("si")
  7.     else:
  8.         print("no")
  9.  
  10. print(funcion())

el caso es que no me contesta ni si ni no XD

¿que creeis que esta mal?
  #5 (permalink)  
Antiguo 30/12/2010, 13:50
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 un ejercicio de phyton!!gracias

Casi nada. Solo te falta entender los conceptos de manejos de archivos.

No hace falta que pongas str a input.

Dime que hace f.read y que devuelve? Que contiene f?

Lo estas haciendo para una palabra o para varias?
  #6 (permalink)  
Antiguo 30/12/2010, 16:16
 
Fecha de Ingreso: diciembre-2010
Mensajes: 9
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: ayuda con un ejercicio de phyton!!gracias

Hola a todos!
Un novato mas buscando la solución al mismo problema! xD
Llevo varios días mirando por aquí y por allá, y mira por donde al final me he registrado! Espero aportar algo de utilidad
Razpeitia, f contiene el valor que le hemos dado antes, vamos el texto txt si no me equivoco y con read lo abrimos para leerlo. Y si, es para varias palabras porque yo también tengo que hacer lo mismo :P
Mi duda viene para cuando tienes mas de una palabra para buscar, porque yo creo que lo hago todo deprisa y me sale mal. Yo había pensado, que con el input que recoges las palabras, meterlas a una lista y tenerlas en una lista. Y tal y como yo pensaba, solo sería recorrer esa lista y compararla con cada linea del texto que queramos.
Te pongo lo que he echo hasta ahora:
Código Python:
Ver original
  1. buscar=input('Bilatu nahi duzuna: ')
  2. limite=' ' #no hace falta creo, pero por si acaso
  3. q=buscar.split(limite)
  4. file=open('berriak_txikia.txt') #<-----Diferente archivo porque soy del otro grupo!
  5. t=[]
  6. for linea in file:
  7.     lerroa=linea.strip()
  8.     t.append(lerroa)
  9.    #con esto pretendo hacer otra lista con el texto, separando las lineas

Hasta aquí creo que todo iría bien, solo que en el siguiente paso, no se si con los while me lío un poco....

Código Python:
Ver original
  1. kont,i=0,0
  2. while i < len(q):
  3.     x=t[i].split()
  4.     if q[i] in x:
  5.         i+=1
  6.     kont+=1
  7.     print (kont)

Tengo otras versiones de esto, pero creo que esta es la buena....aun así, miraré un poco lo que tengo para ver si se entiende mejor.

Lo siento por el post largo que he escrito y por alguna palabra que dejo en euskera (que es como lo estoy estudiando). Si no se entiende algo, explicaré lo que haga falta! :)
Un saludo a todos!
  #7 (permalink)  
Antiguo 30/12/2010, 18:56
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 un ejercicio de phyton!!gracias

Cita:
Iniciado por perconte
Razpeitia, f contiene el valor que le hemos dado antes, vamos el texto txt si no me equivoco
Si y no.
Si por que si contiene el archivo.
Pero no por que cuando iteras sobre el iteras linea por linea. Osea no tiene texto a secas, si no que es una lista de cadenas separas por lineas.
Para mas información haz un:
Código:
print list(f)
Cita:
Iniciado por perconte
si no me equivoco y con read lo abrimos para leerlo
No, con open lo abres para leerlo. Y con read lees todo el archivo en una sola cadena.

Cita:
Iniciado por perconte
Mi duda viene para cuando tienes mas de una palabra para buscar, porque yo creo que lo hago todo deprisa y me sale mal. Yo había pensado, que con el input que recoges las palabras, meterlas a una lista y tenerlas en una lista. Y tal y como yo pensaba, solo sería recorrer esa lista y compararla con cada linea del texto que queramos.
Así es, por eso pregunte si era para una palabra o una lista de palabras. En este caso efectivamente guardarías las palabras en una lista. Pueden ser palabras separadas por comas, por espacios, por enter, por algún signo de puntuación, por lo que sea (casi).

Bueno ya que dejas tu versión te dejo la mía. Mejor les dejo tips o pistas.

Código:
archivo = ["linea 1\n", "linea2\n", "linea3 razpeitia", "hola linea4\n", "linea python 5\n"]
palabras = ["hola", "razpeitia", "python"]
for linea in archivo:
    for palabra in palabras:
        if palabra in linea:
            print palabra, "esta en", linea
  #8 (permalink)  
Antiguo 31/12/2010, 09:00
 
Fecha de Ingreso: diciembre-2010
Mensajes: 9
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: ayuda con un ejercicio de phyton!!gracias

Gracias por contestar!
Una pequeña duda, antes de empezar con lo otro, yo he echo una nueva lista con cada linea del texto pero eso con el read directamente se hace? Quiero decir, no hace falta hacer lo que yo he echo después? O eso se hace porque has puesto list()?

Código Python:
Ver original
  1. file=open('berriak_txikia.txt')
  2. print (list(file))#probando lo que has dicho
  3.  
  4. t=[]
  5. for linea in file:
  6.     lerroa=linea.strip()
  7.     t.append(lerroa)

Bueno, al tema, yo quería hacer algo como lo que has echo ahí solo que al final, me lío con los for y los while....
Voy a probarlo ahora a ver si me sale algo...
Un saludo!
  #9 (permalink)  
Antiguo 31/12/2010, 09:31
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: ayuda con un ejercicio de phyton!!gracias

perconte, dale otra leída a lo que escribió razpeitia antes.
No es necesario que hagas una lista nueva, ya que podés usar for para leer el archivo línea por línea:
Código Python:
Ver original
  1. for linea in open("miarchivo.txt"):
  2.      ....
o usar la función readlines(), que devuelve una lista de líneas:
Código Python:
Ver original
  1. lineas = open("miarchivo.txt").readlines()

El uso de list() era solamente un ejemplo para que vieras un poco más sobre cómo funciona el manejo de archivos, no es necesario.

Saludos.
  #10 (permalink)  
Antiguo 31/12/2010, 10:24
 
Fecha de Ingreso: diciembre-2010
Mensajes: 9
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: ayuda con un ejercicio de phyton!!gracias

Gracias Alvaro por responder!
Ya me imaginaba que se podría hacer así y no como lo he echo yo, pero como es un trabajo para entregar, a no ser que entorpezca al programa en general, mejor que la profesora vea que tengo algo de idea! ;)
Aun así, gracias por decirlo ya que nunca viene mal saber algo más!

He estado probando tu codigo razpeitia y sale bien, el único problema es que no busco exactamente si está en esa linea o no la palabra buscada (ni imprimir eso), si no que me devuelva que linea es la que más veces tiene la palabra buscada.
Por ahora me he quedado aquí:

Código Python:
Ver original
  1. def bilatu(bilatzeko,textua):
  2.     a=[]
  3.     for linea in textua:
  4.         for palabra in bilatzeko:
  5.             if bilatzeko in textua:
  6.                 a.append(linea)
  7.                 return a

Se que falta el final y el principio, pero doy por echo que ya sabemos lo que habría que poner o lo que tenemos de antes...
Llevo un rato probando cosas con esto y no se como hacer para que me devuelva algo que no sea None o [].....
El caso es que yo en principio quería que me devolviese el indice en el que estaría la supuesta linea que tuviese lo que buscamos, pero ya me ha dicho el python que no con un bonito error....
Entonces he pensado que podría hacer una nueva lista con las lineas nuevas encontradas y usarlas después para ver cual de ellas es mejor...
Pero creo que este no es el buen camino...o me complico yo solo o no se, pero seguro que hay otra forma mas sencilla xD
En fin, sea lo que sea, gracias por vuestra ayuda de antemano razpeitia y AlvaroG y feliz año! Ahora me voy, pero mañana volveré a ver que me recomendáis hacer...
  #11 (permalink)  
Antiguo 31/12/2010, 12:06
 
Fecha de Ingreso: noviembre-2010
Mensajes: 54
Antigüedad: 14 años
Puntos: 1
Respuesta: ayuda con un ejercicio de phyton!!gracias

Antes que nada yo no estoy en ningun curso solo que tengo ejercicios bastante parecidos con archivos y asi, y me gustaria ir pillando el truquillo

bien siguiendo los pasos de Razpeitia:

Código Python:
Ver original
  1. f=open("noticias.txt","r")
  2. palabras=(input('dime las palabras: '))
  3. for linea in f:
  4.     if palabras in linea:
  5.         print(linea)

he creado una funcion que me devuelve los parrafos en donde aparecen las palabras que yo le diga,pero el problema es que tienen que estar todas las palabras,si no no me devuelve ningun parrafo.

siguiendo tus pasos he creado el siguiente:

Código Python:
Ver original
  1. f=open("noticias.txt","r")
  2. a=(input('dime las palabras: '))
  3. def busca(a,f):
  4.     b=[]
  5.     for l in f:
  6.         for p in a:
  7.             if p in f:
  8.                 b.append(l)
  9.                 return b
  10. print(busca(a,f))

y me sle lo mismo que a ti que es None pero pienso que el ' if p in f' esta mal.

Saludos!!
  #12 (permalink)  
Antiguo 31/12/2010, 13:11
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: ayuda con un ejercicio de phyton!!gracias

sanfermin67, creo que el último "if p in f" debería ser "if p in l" (es decir, si la palabra está en la línea).
Tu código tiene el problema de que si la línea contiene a más de una de las palabras buscadas, se agregará a b tantas veces como palabras contenga.

Además hay otro detalle: la posición en donde está el return indica que la función terminará luego de encontrar la primera línea que contenga a alguna de las palabras. El return debería estar fuera del for.

Se me ocurre un sistema de "puntajes". Cada línea arranca en 0, y por cada vez que se encuentre cada palabra buscada, se incrementa en 1 su puntaje. Luego simplemente se selecciona la línea cuyo puntaje sea el más alto.

El cálculo puede ser algo así:

Código Python:
Ver original
  1. for linea in archivo:
  2.     for palabra in lista_de_palabras_buscadas:
  3.         puntaje[linea] += linea.count(palabra)

http://docs.python.org/library/stdtypes.html#str.count

Les dejo a ustedes pensar lo que falta:
- cómo inicializar el vector puntaje con todas sus entradas en 0
- cómo seleccionar al final el mayor puntaje y a partir de allí obtener la línea correspondiente
- cómo decicir en caso de empate

una forma simple puede ser leer el archivo con readlines(), crear el vector puntaje de tamaño len(lineas_del_archivo), ¡y ya no les digo más porque hay que pensarlo!


Saludos.
  #13 (permalink)  
Antiguo 31/12/2010, 15:29
 
Fecha de Ingreso: noviembre-2010
Mensajes: 54
Antigüedad: 14 años
Puntos: 1
Respuesta: ayuda con un ejercicio de phyton!!gracias

¿ok pero puedo seguir posteando lo que vaya construyendo?

porcierto

Feliz año nuevo.
  #14 (permalink)  
Antiguo 01/01/2011, 09:06
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: ayuda con un ejercicio de phyton!!gracias

¡Claro que sí! con gusto seguiré contestando y ayudando en lo que pueda
  #15 (permalink)  
Antiguo 01/01/2011, 10:05
 
Fecha de Ingreso: diciembre-2010
Mensajes: 9
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: ayuda con un ejercicio de phyton!!gracias

Feliz año nuevo a todos!! Urte berri on!
Sanfermin67 no se si vas a mi clase o a la clase de al lado, ni si estas en un curso o no, pero pythona90 a puesto el enunciado tal cual lo tengo yo también....sin más, da igual pero me hizo gracia :)

AlvaroG no te he entendido muy bien lo que has dicho del puntaje, porque yo intenté hacer algo así pero me daba error....Entiendo lo que hace el count y yo intenté hacer también que llevara una cuenta, pero en el momento de poner [ ] para indicarle un determinado indice...me daba error

Tampoco entiendo lo de "crear vector de puntaje de tamaño len(lineas archivo)"
Yo en principio empecé a hacer con while, pero me salían errores de todos los colores y tipos jaja a si que desistí de hacerlo con while y ahora estoy con el for...
A ver si hoy a la tarde me sale algo de provecho...

Un saludo y gracias por la ayuda!

EDITO: He pensado que igual, para guardar cuantas veces se repite la palabra buscada en la linea se podría usar listas pero en plan diccionarios, por ejemplo: diccionario={linea1:3,linea2:0,....} y luego con ordenar ese diccionario se podría sacar la linea que más coincidencias tiene.....

Última edición por perconte; 01/01/2011 a las 10:19
  #16 (permalink)  
Antiguo 01/01/2011, 13:07
 
Fecha de Ingreso: noviembre-2010
Mensajes: 54
Antigüedad: 14 años
Puntos: 1
Respuesta: ayuda con un ejercicio de phyton!!gracias

lo siento perconte no estoy en ningun grupo ya que yo soy autodidacta por que mi primo que es programador me engancho y me recomendo este programa para empezar.


gracias por lo de antes AlvaroG he construido lo siguiente pero me devuelve None

Código Python:
Ver original
  1. f=open("noticias.txt").readlines()
  2. a=(input('dime las palabras: '))
  3. def puntaje(a,f):
  4.     k=0
  5.     for l in f:
  6.         for p in a:
  7.             k+=l.count(p)
  8. print (puntaje(a,f))

fijo que es un fallo bastante tonto pero no lo veo XD

saludos.
  #17 (permalink)  
Antiguo 01/01/2011, 13:54
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: ayuda con un ejercicio de phyton!!gracias

jeje eso sucede porque tu función no devuelve nada (no usas return)
Ten en cuenta además, que tal y como está ahora la variable k acumula los puntajes de cada palabra para cada línea del archivo.


Saludos.
  #18 (permalink)  
Antiguo 01/01/2011, 14:42
 
Fecha de Ingreso: noviembre-2010
Mensajes: 54
Antigüedad: 14 años
Puntos: 1
Respuesta: ayuda con un ejercicio de phyton!!gracias

vale ya he puesto lo del return

explicame mejor lo otro es que no te entiendo,¿que quieres decir?¿que no me lo separa por lineas?.
  #19 (permalink)  
Antiguo 01/01/2011, 14:47
 
Fecha de Ingreso: diciembre-2010
Mensajes: 6
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: ayuda con un ejercicio de phyton!!gracias

Algo asi valdria?¿?¿?

Código Python:
Ver original
  1. archivo=open('noticias.txt',"r")
  2. terminos=(str)(raw_input('dime las palabras: '))
  3.  
  4. def buscar(a,f):
  5.     mejor = ""
  6.     puntos_mejor = 0
  7.     for linea in archivo:
  8.         puntos_actual = 0
  9.         #contamos el numero de apariciones de cada termino de búsqueda en la linea
  10.         for termino in a:
  11.             puntos_actual += linea.count(termino)
  12.         if puntos_actual > puntos_mejor:
  13.             mejor = linea
  14.             puntos_mejor = puntos_actual
  15.        
  16.     return mejor
  17.  
  18.  
  19. print(buscar(terminos, archivo))
  #20 (permalink)  
Antiguo 01/01/2011, 14:55
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: ayuda con un ejercicio de phyton!!gracias

Cita:
Iniciado por phytona90 Ver Mensaje
Algo asi valdria?¿?¿?
yo creo que sí.
  #21 (permalink)  
Antiguo 01/01/2011, 15:25
 
Fecha de Ingreso: diciembre-2010
Mensajes: 6
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: ayuda con un ejercicio de phyton!!gracias

LA COSA ES QUE YO INTRIDUZCO ESTE ARCHIVO DE PRUEBA EN LUGAR DE HACER LO QUE YO QUERIA ME IMPRIME EL TEXTO QUE YO HE ESCRITO , POR ESO CREO Q ALGO ESTA MAL PEREO NOMVEO EL ERROR .yA SIENTO DAROS LA TABARRA PERO LA VERDAD ES QUE EN ESTA PAGINA ME AYUDAIS BASTANTE.MUCHAS GRACIAS Y FELIZ AÑOO!!
Código Python:
Ver original
  1. fiche=open('noticias.txt','w')
  2. linea1="la ONU adelantó ayer que la partida económica para ayudar a las víctimas del maremoto en el sur de Asia ascenderá a dos mil millones de dólares una cantidad que intentará atajar la grave situación que se vive en la zona donde los muertos pueden superar los ciento sesenta"
  3. fiche.write(linea1)
  4. linea2="la incertidumbre volvía a cernirse ayer sobre el primer ministro israelí Ariel Sharon que sigue sin lograr formar una coalición de gobierno que le permita llevar a cabo su plan de desconexión de la franja de Gaza"
  5. fiche.write(linea2)
  6. fiche.close()
  7.  
  8. def buscar(terminos,archivo):
  9.     mejor= ""
  10.     puntos_mejor=0
  11.     for linea in archivo:
  12.         puntos_actual=0
  13.         for termino in linea:
  14.             puntos_actual +=linea.count(termino)
  15.             if puntos_actual> puntos_mejor:
  16.                 mejor=linea
  17.                 puntos_mejor=puntos_actual
  18.     return(mejor)
  19.  
  20. archivo=open('noticias.txt','r')
  21. terminos=str(input("Introduce las palabras que quieres buscar:"))
  22. print(buscar(terminos,archivo))
  #22 (permalink)  
Antiguo 01/01/2011, 17:21
 
Fecha de Ingreso: diciembre-2010
Mensajes: 9
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: ayuda con un ejercicio de phyton!!gracias

Cuidado con el bloq mayus, que no está muy bien visto por aquí (ni en los foros , en general) ...
He usado lo que has puesto y si, no devuelve bien porque a mi por lo menos, me devuelve siempre la primera linea, sea lo que sea que busque....
No se si habrá más fallos, pero yo creo que tienes que poner esto:

Código Python:
Ver original
  1. for termino in linea:
  2.             puntos_actual +=linea.count(terminos)

Porque si te fijas, si pones sólo termino, no hará nada pero con terminos ya coge los terminos que tu quieres buscar
Lo he probado y ahora funciona bien, el problema es que nada más encontrar la coincidiencia la imprime sin comparar las otras que pueden tener más
A si que, otro fallo más por lo menos hay xD
Ahora miraré un poco más a ver si encuentro el fallo...
Saludos!

EDITO: Ahora creo que me sale bien, el problema que tenía yo era de tabulador que lo tenía mal puesto, que no te lo copié bien ;)
Ahora creo que sale bien, aunque no he probado con mas de una palabra para buscar, yo creo que así está bien!!

Última edición por perconte; 01/01/2011 a las 17:33
  #23 (permalink)  
Antiguo 01/01/2011, 18:47
 
Fecha de Ingreso: noviembre-2010
Mensajes: 54
Antigüedad: 14 años
Puntos: 1
Respuesta: ayuda con un ejercicio de phyton!!gracias

lo siento mucho pero me estais liando...ninguno de ellos dos cuenta cuantas veces aparece el caracter en cada una de las lineas.Solo imprime un parrafo.
  #24 (permalink)  
Antiguo 02/01/2011, 05:37
 
Fecha de Ingreso: diciembre-2010
Mensajes: 9
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: ayuda con un ejercicio de phyton!!gracias

En realidad si que cuenta, solo que lo suma al contador (en nuestro caso, puntos_actual) lo que encuentra con linea.count(terminos).
Ese count es el que cuenta cuantas veces se repite el termino buscado en nuestra linea. Si quieres saber cuantas veces se repite en la linea, con imprimir eso yo creo que valdría...
Lo que yo busco es que me imprima la linea donde más veces se repita lo que buscamos, por eso yo creo que me vale tal y como está.
Espero haberte ayudado.
Un saludo!
  #25 (permalink)  
Antiguo 02/01/2011, 06:08
 
Fecha de Ingreso: noviembre-2010
Mensajes: 54
Antigüedad: 14 años
Puntos: 1
Respuesta: ayuda con un ejercicio de phyton!!gracias

¿podrias ponerme tu funcion perconte? es que ami no me devuelve nada, y fijo que es algo en lo que me he equivocado...

Código Python:
Ver original
  1. archivo=open('noticias.txt',"r")
  2. terminos=(input('dime las palabras: '))
  3.  
  4. def buscar(a,f):
  5.     mejor = ""
  6.     puntos_mejor = 0
  7.     for linea in archivo:
  8.         puntos_actual = 0
  9.         for termino in linea:
  10.             puntos_actual += linea.count(terminos)
  11.             if puntos_actual > puntos_mejor:
  12.                 mejor = linea
  13.                 puntos_mejor = puntos_actual
  14.     return mejor
  15.        
  16.  
  17.  
  18. print(buscar(terminos, archivo))
  #26 (permalink)  
Antiguo 02/01/2011, 07:38
 
Fecha de Ingreso: diciembre-2010
Mensajes: 9
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: ayuda con un ejercicio de phyton!!gracias

Pues no se, pero a mi con tu funcion me sale lo mismo, es decir, busco una palabra en el texto y me devuelve la linea donde más veces se repite esa palabra.
No te pongo aquí la mía porque es lo mismo que tú tienes, pero fíjate a ver si es problema de la versión de pyhton o algún error ortográfico.
Saludos!
  #27 (permalink)  
Antiguo 03/01/2011, 13:25
 
Fecha de Ingreso: noviembre-2010
Mensajes: 54
Antigüedad: 14 años
Puntos: 1
Respuesta: ayuda con un ejercicio de phyton!!gracias

acabo de arreglar lo que estaba mal pero aun asi no nos da lo que queremos...
he probado con diferentes textos y palabras por ejemplo yo le doy la palabra 'mejor' y me devuelve un texto con las palabras como 'mejor','mejorara','mejorado'...y si por ejemplo escribes 'un dia atras' y no encuentra 'atras' no devuelve nada. Y recordar que lo que queremos es

Los términos de búsqueda serán especificados
en una única cadena q, utilizando el espacio en blanco como separador. La línea seleccionada podría
contener todos o tan sólo algunos de los términos de búsqueda.


me gustaria probar una cosa, ¿hay alguna manera de que al darle unos carecteres,como por ejemplo 'un dia atras',coja cada caracter separado y no todo junto? porque asi de esa manera te puede devolver una linea en la que esten las palabras 'un' y 'dia'

me gustaria que especialmente AlvaroG y razpeitia me dieran su opinion.

gracias
  #28 (permalink)  
Antiguo 03/01/2011, 13:46
 
Fecha de Ingreso: diciembre-2010
Mensajes: 9
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: ayuda con un ejercicio de phyton!!gracias

Si, yo también quiero eso, pero voy a probar de otra manera, definiendo las funciones una a una. Cuando acabe las pondré aquí para que veáis y comentéis que os parece.
Un saludo!
  #29 (permalink)  
Antiguo 03/01/2011, 17:21
 
Fecha de Ingreso: noviembre-2010
Mensajes: 54
Antigüedad: 14 años
Puntos: 1
Respuesta: ayuda con un ejercicio de phyton!!gracias

he pensado en que en vez de utilizar 'input', usar una lista '[ ]',¿que se te ocurre perconte?

editado:alvaroG y razpeitia por favor respondan.

Última edición por sanfermin67; 04/01/2011 a las 07:13
  #30 (permalink)  
Antiguo 04/01/2011, 15:59
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: ayuda con un ejercicio de phyton!!gracias

Punto 1:
Código Python:
Ver original
  1. for termino in linea:
??? ¿para cada término de la línea? ¿No será "para cada término de la lista de términos"?

Punto 2:
No hay separación entre las líneas, usen \n para generar un salto de línea en el texto o de lo contrario estarán leyendo una sola línea del archivo.

Punto 3:
Código Python:
Ver original
  1. if puntos_actual > puntos_mejor:
Este if debería estar sangrado un nivel menos, al mismo nivel del for en vez de dentro de él. Piensen por qué.

Punto 4:
están pasando la variable "terminos" como una cadena, por lo que al hacer "for termino in terminos" están iterando por cada caracter de la misma. Deben usar split() para separar la cadena de términos por espacios e iterar por palabras.


En cuanto a considerar solamente palabras completas, una solución posible es partir también la cadena a analizar con split(), para eliminar los espacios y obtener las palabras, pudiendo luego comparar cada palabra con cada término y utilizar eso para sumar puntos.

Aquí les dejo una versión arreglada con los detalles que les mencioné antes:

Código Python:
Ver original
  1. def buscar(terminos, archivo):
  2.     mejor = ""
  3.     puntos_mejor =0
  4.     for linea in archivo:
  5.         puntos_actual = 0
  6.         for termino in terminos:
  7.             print "_BUSCANDO_", termino, "_EN_", linea
  8.             puntos = linea.count(termino)
  9.             print "_", str(puntos), "PUNTOS_"
  10.             puntos_actual += puntos
  11.         if puntos_actual > puntos_mejor:
  12.             mejor = linea
  13.             puntos_mejor = puntos_actual
  14.  
  15.     return mejor
  16.  
  17.  
  18. a = open("noticias.txt")
  19. terminos = ["ayer", "la"]
  20. r = buscar(terminos, a)
  21. print "RESULTADO: ", r
  22. a.close()

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




La zona horaria es GMT -6. Ahora son las 07:36.