programa en python

Iniciado por py.cba, 4 Noviembre 2016, 02:24 AM

0 Miembros y 1 Visitante están viendo este tema.

py.cba

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 (python) [Seleccionar]
def palabra_mas_repetida(s):
  cont = []
  palabras = s.split()
  for palabra in palabras:
    palabra = palabra.lower()
    if palabra in cont:
      cont[palabra] += 1
    else:
      cont[palabra] = 1
  return


MOD: Etiquetas GeSHi.

MCKSys Argentina

Estás usando una lista cuando quieres usar un diccionario.
El código sería algo así (seguro puedes mejorarlo):

Código (python) [Seleccionar]

def palabra_mas_repetida(s):
    cont = {} #diccionario vacio
    palabras = s.lower().split(" ")
    for palabra in palabras:
        if cont.has_key(palabra):
          cont[palabra] += 1
        else:
          cont[palabra] = 1
    maxcount = sorted(cont.values())[-1] # maxcount = ultimo elemento de la lista ordenada (de menos a mayor) de los valores del dict
    for clave, valor in cont.iteritems():
        if valor == maxcount:
            return clave


Por ejemplo, si usas:
Código (python) [Seleccionar]

print palabra_mas_repetida("hola hola hola si si no no no no hola no no no")


se imprimirá "no".

Espero te sirva.

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


tincopasan

hay muchas formas de hacerlo, depende de que te dejen usar! otra forma sería:
Código (python) [Seleccionar]

#-*- coding: utf -8 -*-
from collections import Counter
def palabra_mas_repetida(s):
    palabras = s.split()
    cuenta_palabras =Counter(palabras)
    mas_usada= str(cuenta_palabras.most_common(1)[0][0]).lower()
    print(mas_usada)

palabra_mas_repetida("hola ESTE es un texto de forma que ESTE está en mayúsculas" )


py.cba

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"

MCKSys Argentina

Cita de: py.cba en  4 Noviembre 2016, 15:17 PM
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!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


Once

#5
Hola, algo simple se me ocurre:

Código (python) [Seleccionar]

palabras = "hola soy yo hola"

lista = list(map(lambda x: palabras.count(x), palabras.split()))
print(palabras.split()[lista.index(max(lista))])



Saludos!