Python - un poco liado con las funciones...

   
Vista:

un poco liado con las funciones...

Publicado por Keldar (10 intervenciones) el 05/03/2014 09:35:27
bueno sigo con el libro...

Como ejercicio, encapsule este código en una función llamada cuentaLetras, y generalicela de forma que acepte la cadena y la letra como parámetros.

uan vez hecho:

1
2
3
4
5
6
7
def cuentaLetras(cadena,letra):
    fruta = cadena
    cuenta = 0
    for car in fruta:
        if car == "letra":
            cuenta = cuenta + 1
    print cuenta

el problema viene aqui:

Como un segundo ejercicio, reescriba esta función para que en lugar de recorrer la cadena, use la versión de tres parámetros de encuentra del anterior.
Funcion encuentra:

1
2
3
4
5
6
7
def encuentra(cad, c, y):
    indice = y
    while indice < len(cad):
        if cad[indice] == c:
            return indice
        indice = indice + 1
    return -1

entiendo yo que habría que llamar a la función encuentra dentro de cuentaLetras en un bucle while pero ni idea de como hacerlo...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

un poco liado con las funciones...

Publicado por xve (1229 intervenciones) el 05/03/2014 11:46:16
Hola keldar, puede ser que la función cuentaLetras() este mal? no tendria que ser algo así:
1
2
3
4
5
6
7
8
9
def cuentaLetras(cadena,letra):
    fruta = cadena
    cuenta = 0
    for car in fruta:
        if car == letra:
            cuenta = cuenta + 1
    print cuenta
 
cuentaLetras("la casa azul", "a")

Sobre el segundo código, haber que te parece así:
1
2
3
4
5
6
7
8
9
def encuentra(cadena, c, indice):
    cuenta=0
    while indice < len(cadena):
        if cadena[indice] == c:
            cuenta+=1
        indice+=1
    return cuenta
 
print encuentra("la casa azul", "a", 3)

Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

un poco liado con las funciones...

Publicado por Keldar (10 intervenciones) el 05/03/2014 12:07:03
pues si que estaba mal ... pero vamos que eso era un descuido, yo no preguntaba por los trozos de codigo que he puesto, porque en principio funcionaban (bueno cuentaLetras() no, no se en que momento lo modifique y la inutilice...)
El problema es que tengo que modificar cuentaLetras() para que en vez de usar el ciclo for use la funcion encuentra():

"Como un segundo ejercicio, reescriba esta función para que en lugar de recorrer la cadena, use la versión de tres parámetros de encuentra del anterior."

yo leyendo entiendo que la funcion encuentra() no hay que modificarla, es una funcion que te da el libro a la que solo le he añadido el tercer parametro (en un ejercicio anterior)

supongo que habrá que hacer un ciclo while dentro de cuentaLetras() que llame a la funcion encuentra()...
ahí esta el problema que no se como hacer esto! a ver si ahora me he explicado mejor
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

un poco liado con las funciones...

Publicado por xve (1229 intervenciones) el 05/03/2014 13:14:17
Hola Keldar, si te fijas, te he modificado por completo tu función encuentra() para que sea haga lo mismo que la función cuentaLetras() utilizando los tres parámetros... Si cambias el nombre de la función ya estaría, no?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

un poco liado con las funciones...

Publicado por Keldar (10 intervenciones) el 05/03/2014 14:18:00
a ver que igual es que yo no lo entiendo bien, porke al principio yo kreia ke era eso, hacer una mezcla de las 2 por decirlo de alguna manera, pero luego me pareció entender ke sin modificar encuentra() y modificando cuentaLetras() para que llame a encuentra() y lleve el conteono se como se podría hacer eso...

1
2
3
4
5
6
7
8
9
10
11
12
def encuentra(cad, c, y):
    indice = y
    while indice < len(cad):
        if cad[indice] == c:
            return indice
        indice = indice + 1
    return -1
 
def cuentaLetras(cadena,letra):
    cuenta = 0
    while _________
        encuentra(cadena,letra,0):

Algo así quiero decir, y que lleve la cuenta de las veces que se ejecuta encuentra() no se como hacerlo ni si se puede . Pero entiendo que es eso lo que pide, igual es que lo he entendido mal.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

un poco liado con las funciones...

Publicado por xve (1229 intervenciones) el 05/03/2014 15:25:01
Haber keldar, intento explicarme...

Este función (encuentra) no cuenta letras!!! da únicamente la posición de la primera letra después de la posición "y":
1
2
3
4
5
6
7
def encuentra(cad, c, y):
    indice = y
    while indice < len(cad):
        if cad[indice] == c:
            return indice
        indice = indice + 1
    return -1
Por lo tanto no te sirve para contar letras. Para contar letras tienes que modificar-la.


Haber si es esto lo que quieres... o yo no he entendido bien lo que hay que hacer...:
1
2
3
4
5
6
7
8
9
10
11
12
def cuentaLetras(cadena,letra):
    return encuentra(cadena,letra,0)
 
def encuentra(cadena, c, indice):
    cuenta=0
    while indice < len(cadena):
        if cadena[indice] == c:
            cuenta+=1
        indice+=1
    return cuenta
 
print cuentaLetras("la casa azul", "a")
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

un poco liado con las funciones...

Publicado por Keldar (10 intervenciones) el 05/03/2014 18:23:23
Ya se que no cuenta letras pero me preguntaba si podría hacer que cuentaLetras() llevase la cuenta de las veces que encuentra() devuelve un valor. a ver si me explico en el ejemplo que tu has puesto:
1
cuentaLetras("la casa azul", "a")
si llamasemos encuentra() dentro de un bucle while:
1
2
3
4
def cuentaLetras(cadena,letra):
    cuenta = 0
    while ______
        encuentra(cadena,letra,0):
Devolvería el valor 1 la a de la, no? pues me gustaría saber si se puede hacer que cuentaLetras() cada vez que retorne un valor encuentra le añada 1 a cuenta, así llevaríamos la cuenta de las aes.
luego habría que hacer que la siguiente vez que llame a encuentra() el parametro "y" tome como argumento la posición que retorno antes.
1
2
3
4
5
encuentra(cadena,letra,0):            #devolveria 1
#llamariamos a encuentra con el valor que retorno...
encuentra(cadena,letra,1):            #devolveria 4
encuentra(cadena,letra,4):            #devolveria 6
encuentra(cadena,letra,6):            #etcetcetc
y mientras tanto hacer algo dentro de la funcion cuentaLetras() para que lleve la cuenta de las veces que retorna algo encuentra() que ni se si se puede hacer algo así eh! creo que ahora me he explicado mejor, eso es lo que pretendía decir todo el rato
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

un poco liado con las funciones...

Publicado por Keldar (10 intervenciones) el 06/03/2014 02:08:22
algo así podría ser:se que se ejecuta infinitamente pero bueno algo así...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def encuentra(cad, c, y):
    indice = y
    while indice < len(cad):
        if cad[indice] == c:
            return indice
        indice = indice + 1
    return -1
def cuentaLetras(cadena, letra):
    cuenta = 1
    retorno = encuentra(cadena, letra, 0) + 1
    while retorno < len(cadena):
        encuentra(cadena, letra, retorno)
        cuenta += 1
        retorno = encuentra(cadena, letra, retorno)
    return cuenta
print cuentaLetras("esta es una cadena de prueba", "a")
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

un poco liado con las funciones...

Publicado por Keldar (10 intervenciones) el 06/03/2014 02:38:01
por fin...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def encuentra(cad, c, y):
    indice = y
    while indice < len(cad):
        if cad[indice] == c:
            return indice
        indice = indice + 1
    return -1
def cuentaLetras(cadena, letra):
    cuenta = 0
    retorno = 0
    while retorno < len(cadena):
        if encuentra(cadena, letra, retorno) != -1:
            cuenta += 1
            retorno = encuentra(cadena, letra, retorno) + 1
        else:
             return "error"
    return cuenta
print cuentaLetras("esta es una cadena de prueba", "a")
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

un poco liado con las funciones...

Publicado por xve (1229 intervenciones) el 06/03/2014 09:05:42
Hola keldar... muchas gracias por compartirlo!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar