Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: py.cba en 4 Noviembre 2016, 02:24



Título: programa en python
Publicado por: py.cba en 4 Noviembre 2016, 02:24
Hola, estoy recién empezando en esto asique sepan disculpar mis errores. Necesito ayuda para armar un programa basico de python antes del sabado y dice asi:
Realice una función de nombre palabra_mas_repetida() que reciba como argumento una cadena cualquiera que representa un texto y devuelva la primera palabra que más veces aparece en el mismo (no debe diferenciar mayúsculas de minúsculas). La palabra debe devolverse siempre en minúscula.
Por favor alguien me puede ayudar??
hice este programa pero obviamente algo esta mal
Código
  1. def palabra_mas_repetida(s):
  2.  cont = []
  3.  palabras = s.split()
  4.  for palabra in palabras:
  5.    palabra = palabra.lower()
  6.    if palabra in cont:
  7.      cont[palabra] += 1
  8.    else:
  9.      cont[palabra] = 1
  10.  return

MOD: Etiquetas GeSHi.


Título: Re: programa en python
Publicado por: MCKSys Argentina en 4 Noviembre 2016, 05:40
Estás usando una lista cuando quieres usar un diccionario.
El código sería algo así (seguro puedes mejorarlo):

Código
  1. def palabra_mas_repetida(s):
  2.    cont = {} #diccionario vacio
  3.    palabras = s.lower().split(" ")
  4.    for palabra in palabras:
  5.        if cont.has_key(palabra):
  6.          cont[palabra] += 1
  7.        else:
  8.          cont[palabra] = 1
  9.    maxcount = sorted(cont.values())[-1] # maxcount = ultimo elemento de la lista ordenada (de menos a mayor) de los valores del dict
  10.    for clave, valor in cont.iteritems():
  11.        if valor == maxcount:
  12.            return clave
  13.  

Por ejemplo, si usas:
Código
  1. print palabra_mas_repetida("hola hola hola si si no no no no hola no no no")
  2.  

se imprimirá "no".

Espero te sirva.

Saludos!


Título: Re: programa en python
Publicado por: tincopasan en 4 Noviembre 2016, 08:32
hay muchas formas de hacerlo, depende de que te dejen usar! otra forma sería:
Código
  1. #-*- coding: utf -8 -*-
  2. from collections import Counter
  3. def palabra_mas_repetida(s):
  4.    palabras = s.split()
  5.    cuenta_palabras =Counter(palabras)
  6.    mas_usada= str(cuenta_palabras.most_common(1)[0][0]).lower()
  7.    print(mas_usada)
  8.  
  9. palabra_mas_repetida("hola ESTE es un texto de forma que ESTE está en mayúsculas" )
  10.  
  11.  


Título: Re: programa en python
Publicado por: py.cba en 4 Noviembre 2016, 15:17
Si el problema es que me piden que sea un programa sencillo sin tener que importar nada. por ejemplo:
 maxcount = sorted(cont.values())[-1]
no me dejan usar "sorted"


Título: Re: programa en python
Publicado por: MCKSys Argentina en 4 Noviembre 2016, 17:50
Si el problema es que me piden que sea un programa sencillo sin tener que importar nada. por ejemplo:
 maxcount = sorted(cont.values())[-1]
no me dejan usar "sorted"

Sorted es solo para que ordene el listado de valores del diccionario (devuelve una lista).
Si no lo quieres usar, puedes usar el for clave, valor in cont.iteritems(): para ir comparando los valores y tomar el mayor.

Por supuesto, de esa forma vas a necesitar recorrer todo el diccionario; pero te quedara un codigo simple y facil de entender.

Saludos!


Título: Re: programa en python
Publicado por: Once en 5 Noviembre 2016, 03:52
Hola, algo simple se me ocurre:

Código
  1. palabras = "hola soy yo hola"
  2.  
  3. lista = list(map(lambda x: palabras.count(x), palabras.split()))
  4. print(palabras.split()[lista.index(max(lista))])
  5.  
  6.  

Saludos!