Python - contar las letras que son iguales y quedan juntas

 
Vista:
sin imagen de perfil

contar las letras que son iguales y quedan juntas

Publicado por anonymous (38 intervenciones) el 09/06/2021 02:45:57
1
2
3
4
5
6
7
8
9
10
11
12
13
14
letra_anterior = ""
 
for i in range(len(ratatouille)):
 
    if i == letra_anterior:
 
        letras_mixtas = str(i)
        letras_mixtas = letra_anterior
 
    elif i != letra_anterior:
 
        letras_mixtas += "-" + letras_mixtas
 
        return(letras_mixtas)

Buenas noches, tengo este codigo en donde el input vendría siendo una cadena tal como BBTZBZZTZTT, en el cual debo contar las letras que son iguales y quedan juntas BB_TZB_ZZ_TZ_TT para que quede asi, si alguien me pudiera ayudar se lo agradeceria demasiado
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
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

contar las letras que son iguales y quedan juntas

Publicado por tincopasan (858 intervenciones) el 09/06/2021 07:18:44
partamos de la base que eso no es un código, es la parte de un código, hay un return y nunca se ve la declaración de la función. Además usas una variable nunca declarada ¿ratatouille? o sos cocinero o ves muchas películas. En fin, es muy fácil y el partido que estoy viendo es muy aburrido:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#-*- coding: utf -8 -*-
 
def contador(cadena):
    cant_rep = 0
    temp=""
    for letra, letra_siguiente in zip(cadena, cadena[1:]):
        if letra != letra_siguiente:
            if letra != temp[-2]:
                temp += letra
        else:
            temp+="_"+letra+letra+"_"
            cant_rep+=1
    return temp[1:-1],cant_rep
 
cadena= input("Ingrese una cadena: ")
final,cantidad=contador(cadena)
print(f"hay {cantidad} repeticiones y separada quedaría: {final}")

si lo ejecutas da como resultado:

1
2
Ingrese una cadena: BBTZBZZTZTT
hay 3 repeticiones y separada quedaría: BB_TZB_ZZ_TZ_TT
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

contar las letras que son iguales y quedan juntas

Publicado por anonymous (38 intervenciones) el 09/06/2021 11:04:39
De verdad muchas gracias, y como se haría cuando el código es mas corto por ejemplo TZ o BBZTB??
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
sin imagen de perfil

contar las letras que son iguales y quedan juntas

Publicado por anonymous (38 intervenciones) el 09/06/2021 11:29:01
porque en inputs mas cortos no saldría out of range?
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 joel
Val: 3.475
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

contar las letras que son iguales y quedan juntas

Publicado por joel (903 intervenciones) el 09/06/2021 11:54:56
Hola Hernan, he modificado un poco el código de tincospan... haber si te sirve...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#-*- coding: utf -8 -*-
 
def contador(cadena):
    result=cadena[0]
    cantidad=0
    for i in range(1, len(cadena)):
        if cadena[i]==cadena[i-1]:
            cantidad+=1
            if len(result)<2:
                result+=cadena[i]+"_"
            else:
                result=result[:-1]+"_"+cadena[i]+cadena[i]+"_"
        else:
            result+=cadena[i]
    return result[0:-1] if result[-1]=="_" else result, cantidad
 
cadena= input("Ingrese una cadena: ")
final,cantidad=contador(cadena)
print(f"hay {cantidad} repeticiones y separada quedaría: {final}")
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

contar las letras que son iguales y quedan juntas

Publicado por anonymous (38 intervenciones) el 09/06/2021 12:02:01
Hola Joel, sii ahora ya no me sale out of range,muchas gracias, pero por ejemplo si pongo en input BZBTBTBBTBZZZTTBB

el output es ('BZBTBT_BB_TB_ZZ_ZZ__TT__BB', 5) y sale esa Z extra, como se podria solucionar?,
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 joel
Val: 3.475
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

contar las letras que son iguales y quedan juntas

Publicado por joel (903 intervenciones) el 09/06/2021 12:09:57
Muy buena Hernan... haber ahora:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#-*- coding: utf -8 -*-
 
def contador(cadena):
    result=cadena[0]
    cantidad=0
    for i in range(1, len(cadena)):
        if cadena[i]==cadena[i-1] and result[-1]!="_":
            cantidad+=1
            if len(result)<2:
                result+=cadena[i]+"_"
            elif result[-2]=="_":
                result=result[:-1]+cadena[i]+cadena[i]+"_"
            else:
                result=result[:-1]+"_"+cadena[i]+cadena[i]+"_"
        else:
            result+=cadena[i]
    return result[0:-1] if result[-1]=="_" else result, cantidad
 
#cadena= input("Ingrese una cadena: ")
cadena="BZBTBTBBTBZZZTTBB"
final,cantidad=contador(cadena)
print(f"hay {cantidad} repeticiones y separada quedaría: {final}")
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

contar las letras que son iguales y quedan juntas

Publicado por anonymous (38 intervenciones) el 09/06/2021 16:21:02
Joel de verdad disculpas por tanta molestia, pero si en input fuese BBZZTTTTZTBTBBBBZZZBBTZTBZBZZT

returnaria este output ('BB_ZZ_TT_TT_ZTBT_BB_BB_ZZ_Z_BB_TZTBZB_ZZ_T', 9)

pero no deberia en realidad asi ('BB_ZZ_TT_TT_ZTBT_BBBB_ZZZ_BB_TZTBZB_ZZ_T', 19)??? de verdad muchas gracias
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 joel
Val: 3.475
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

contar las letras que son iguales y quedan juntas

Publicado por joel (903 intervenciones) el 09/06/2021 18:46:43
Hola Hernan, no es correcto... devuelve: BB_ZZ_TT_TT_ZTBT_BB_BB_ZZ_Z_BB_TZTBZB_ZZ_T

Esto es lo que tiene que devolver, 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
sin imagen de perfil

contar las letras que son iguales y quedan juntas

Publicado por anonymous (38 intervenciones) el 09/06/2021 18:52:41
Hola Joel, a mi parecer debería devolver

('BB_ZZ_TTTT_ZTBT_BBBB_ZZZ_BB_TZTBZB_ZZ_T')

Y contar todos los “bloques” en donde se repite una misma letra por ejemplo BB ZZ TTTT BBBB ZZZ BB ZZ que eso es igual a 19 letras, si me pudieses ayudar con esto te le agradecería mil
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 joel
Val: 3.475
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

contar las letras que son iguales y quedan juntas

Publicado por joel (903 intervenciones) el 09/06/2021 19:38:34
Hernan he tenido que cambiarlo un poco... haber ahora!!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
def contador(cadena):
    result=[]
    block=""
    igual=""
    for i in range(0, len(cadena)):
        if cadena[i]==cadena[i-1]:
            if igual==False and len(block)>1:
                tmp=block[-1]
                result.append(block[:-1])
                block=tmp
            igual=True
            block+=cadena[i]
        else:
            if igual==True and len(block)>1:
                result.append(block)
                block=""
            igual=False
            block+=cadena[i]
    result.append(block)
 
    return "_".join(result), len(result)
 
cadena= input("Ingrese una cadena: ")
#cadena="BBZZTTTTZTBTBBBBZZZBBTZTBZBZZT"
final,cantidad=contador(cadena)
print(f"hay {cantidad} repeticiones y separada quedaría: {final}")
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
sin imagen de perfil

contar las letras que son iguales y quedan juntas

Publicado por anonymous (38 intervenciones) el 09/06/2021 19:47:19
Joel, pero en este caso no se contaría la ultima Z?? porque por lo que entiendo esta no se repite, por ejemplo en este caso: TZ quedaría T_Z, por lo que debería quedar en result el número 2 porque son 2 letras distintas y no existe un bloque, pero retorna un 1
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
sin imagen de perfil

contar las letras que son iguales y quedan juntas

Publicado por anonymous (38 intervenciones) el 09/06/2021 21:51:53
Ese creo que es lo unico que esta fallando
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