es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo hacer un bucle a través de una concatenación?

Estoy intentando dividir una palabra con un ‘.’ después de cada letra, lo cual logré hacer exitosamente. Sin embargo, mi siguiente paso es dividir las palabras divididas actuales nuevamente, pero no quiero repetir variaciones.

Mi salida esperada es la siguiente:

Palabra de entrada: amaxa. El primer bucle dará como resultado: a.maxa, am.axa, ama.xa, amax.a.

Luego, la siguiente división debe dar como resultado: a.m.axa, a.ma.xa, a.max.a.

Básicamente, quiero obtener diferentes variaciones de la palabra con ‘.’ agregado cuando se ha completado un bucle completo. Sin embargo, mi problema principal era que tenía una ‘.’ apareciendo junto a otra, e intenté usar una declaración ‘continue’, pero no funcionó. A continuación se muestra mi código fuente:

print("Ingrese el correo electrónico sin @gmail.com")

palabra = input("Palabra: ")

len_palabra = len(palabra) - 1
lis = []

for i in range(0, len_palabra):
    slice_palabra = palabra[:1+i] + "." + palabra[1+i:]
    lis.append(slice_palabra)

print(slice_palabra)

for j in range(0, len_palabra):
    slices = slice_palabra[:1+j] + "." + slice_palabra[j+1:]

    if slices[i:] == slices[:]:
        continue
    print(slices)

El resultado dado es el siguiente:

Ingrese el correo electrónico sin @gmail.com
Palabra: amax
a.max
am.ax
a.m.ax
am..ax
am..ax
ama.x
a.ma.x
am.a.x
ama..x

Básicamente, quiero eliminar ‘am..ax’ y ‘ama..x’.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para evitar repeticiones de la palabra con puntos consecutivos, puedes hacer uso de una declaración condicional dentro del segundo bucle para saltar cualquier iteración que resulte en puntos dobles. Aquí hay una versión actualizada de tu código:

    print("ingresar palabra:")
    
    palabra = input("palabra: ")
    
    longituddepalabra = len(palabra) - 1
    lis = []
    
    for i in range(0,longituddepalabra):
        slicepalabra = palabra[:1+i] + "." + palabra[1+i:]
        lis.append(slicepalabra)
    
    for j in range(0,len(lis)):
        for k in range(0,longituddepalabra):
            slices = lis[j][:1+k] + "." + lis[j][1+k:]
            if ".." in slices: # saltar cualquier iteración con puntos dobles
                continue
            print(slices)
    

    Con este código, la salida que obtienes después de ingresar “amax” será:

    a.max
    am.ax
    a.m.ax
    amax.
    a.ma.x
    am.a.x
    

    que debería ser la salida esperada que buscabas.

Comments are closed.