Foros del Web » Programando para Internet » Python »

varias funciones en un programa

Estas en el tema de varias funciones en un programa en el foro de Python en Foros del Web. Buenos días! Aquí vuelvo con otro problema a la hora de ejecutar un programa muy sencillo en Python. El programa es el siguiente: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); ...
  #1 (permalink)  
Antiguo 16/02/2012, 06:20
 
Fecha de Ingreso: octubre-2011
Mensajes: 8
Antigüedad: 13 años, 2 meses
Puntos: 0
Pregunta varias funciones en un programa

Buenos días!

Aquí vuelvo con otro problema a la hora de ejecutar un programa muy sencillo en Python.

El programa es el siguiente:

Código Python:
Ver original
  1. def diccionario(fichero):
  2.     d=dict()
  3.     for linea in fichero:
  4.         for palabra in linea.split():
  5.             d[palabra]=d.get(palabra,0)+1
  6.     return d
  7.  
  8. def lista(fichero):
  9.     l=list()
  10.     for linea in fichero:
  11.         for palabra in linea.split():
  12.             i=0
  13.             while i<(len(l)):
  14.                 if l[i][0]==palabra:
  15.                     break
  16.                 i+=1
  17.             if i==len(l):
  18.                 l.append((palabra,1))
  19.             else:
  20.                 l[i]=(palabra,l[i][1]+1)
  21.     return l
  22.  
  23.  
  24. fichero=open(input("Introducir el nombre del fichero: "),"r")
  25.  
  26. l=lista(fichero)
  27.  
  28. d=diccionario(fichero)
  29.  
  30. print (d,l)

Hasta este punto el programa simplemente tendría que abrir un fichero y devolver dos histogramas. Uno en modo de lista y otro a modo de diccionario.

El problema es que solo me imprime el histograma de la función que se ejecuta primero, en ese caso lista(fichero). Me devuelve un diccionario vacío y el histograma completo a modo de lista.

He probado a hacer que se ejecute primero diccionario(fichero) y después lista(fichero) y lo que ocurre es que me devuelve el histograma a modo de diccionario y una lista vacía.

¿Por qué solo se ejecuta correctamente la primera función en ser corrida?

Un saludo y gracias de antemano.
  #2 (permalink)  
Antiguo 16/02/2012, 06:30
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: varias funciones en un programa

buenas,
no he probado el codigo y tampoco domino mucho python, pero lo primero que me viene a la mente es que el puntero de lecutra del archivo esta al final cuando uno de los procesos termina. por tanto, el segundo proceso inicia desde el final del archivo. tienes que mover el puntero al inicio del archivo para que pueda volver a leer linea por linea.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 16/02/2012, 06:39
 
Fecha de Ingreso: octubre-2011
Mensajes: 8
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: varias funciones en un programa

Cita:
Iniciado por zerokilled Ver Mensaje
buenas,
no he probado el codigo y tampoco domino mucho python, pero lo primero que me viene a la mente es que el puntero de lecutra del archivo esta al final cuando uno de los procesos termina. por tanto, el segundo proceso inicia desde el final del archivo. tienes que mover el puntero al inicio del archivo para que pueda volver a leer linea por linea.
Gracias por la idea.

Es lo que yo había pensado, pero no sabía si eso podía suceder.
¿Y como puedo hacer para que el cursor vuelva al inicio del archivo? Lo único que se me ocurre el volver a abrir el archivo de texto.
  #4 (permalink)  
Antiguo 16/02/2012, 06:55
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: varias funciones en un programa

invoca el metodo seek de los objetos file pasando como parametro la posicion donde quieres que se ubique. es decir, 0 para que vuelva al inicio.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #5 (permalink)  
Antiguo 16/02/2012, 07:01
 
Fecha de Ingreso: octubre-2011
Mensajes: 8
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: varias funciones en un programa

Cita:
Iniciado por zerokilled Ver Mensaje
invoca el metodo seek de los objetos file pasando como parametro la posicion donde quieres que se ubique. es decir, 0 para que vuelva al inicio.
Muchas gracias, era tan simple como agregar un fichero.seek(0) entre las dos funciones. Pero ni sabia que existiese este comando.

Ahora voy a ver como hago para que eso no me influya a la hora de contar los tiempos de esas dos funciones.
  #6 (permalink)  
Antiguo 16/02/2012, 14:51
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 6 meses
Puntos: 310
Mensaje Respuesta: varias funciones en un programa

Como apunte, en realidad las funciones diccionario y lista devuelven cosas muy parecidas, por lo que te sirve con "trabajar" sólo en una. Imagina que te quieres quedar sólo con el código de diccionario. Entonces:
Código Python:
Ver original
  1. def lista(fichero):
  2.    d = diccionario(fichero)
  3.    return zip(d.keys(), d.values())
Si quisieras hacerlo al revés y dejar el código de lista (aunque es más largo y ~confuso)
Código Python:
Ver original
  1. def diccionario(fichero):
  2.     return dict(lista(fichero))
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red

Etiquetas: diccionario, funcion, histograma, lista, programa
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 00:46.