Iterar cadenas

# ─────────────────────────────────────────────
# BLOQUE 1: Contar cuántas veces aparece la letra 'a' en una cadena
# ─────────────────────────────────────────────

# La cadena está en mayúsculas. Si buscamos solo "a" minúscula,
# no encontraríamos nada porque "A" y "a" son caracteres distintos para Python.
cadena="HOLA QUE TAL?"

# El contador acumulador empieza en 0 antes del bucle.
# Cada vez que encontremos una 'a' (en cualquier forma) sumaremos 1.
contador =0

# El for recorre la cadena carácter a carácter.
# En cada vuelta, letra toma el valor del siguiente carácter.
for letra in cadena:

    # letra.lower() convierte la letra actual a minúscula SOLO para la comparación,
    # no modifica la cadena original. Así podemos comparar siempre con "a" minúscula
    # sin importar si en la cadena original era "A" o "a".
    # Ejemplos:
    #   "A".lower() → "a"    "H".lower() → "h"    "a".lower() → "a"
    if letra.lower()=="a":
        contador+=1  # encontramos una 'a' (en cualquier forma), sumamos 1

# El print está fuera del bucle: muestra el total al terminar.
print(contador)
# Resultado: 2  (la 'A' de "HOLA" y la 'A' de "TAL")
#
# Alternativa sin bucle usando el método count():
#   total = cadena.lower().count("a")
#   print(total)
# Pero hacerlo con el bucle a mano ayuda a entender cómo funciona count() por dentro.


# ─────────────────────────────────────────────
# BLOQUE 2: Recorrer una cadena con letras y números mezclados
# ─────────────────────────────────────────────

# Una cadena puede contener cualquier tipo de carácter: letras, números, símbolos.
# El for los recorre todos sin distinción, uno a uno.
cadena="DX450"

# En cada vuelta, caracter toma el valor: "D", luego "X", luego "4", "5", "0"
for caracter in cadena:
    print(caracter)

# Resultado:
#   D
#   X
#   4
#   5
#   0
#
# Fíjate en que "4", "5" y "0" son caracteres de texto, no números enteros.
# Para operar matemáticamente con ellos habría que convertirlos con int("4") = 4.


# ─────────────────────────────────────────────
# BLOQUE 3: Invertir una cadena letra a letra
# ─────────────────────────────────────────────

cadena="hola"

# La cadena invertida empieza vacía. La iremos construyendo dentro del bucle.
# Es un acumulador de texto en lugar de un acumulador numérico.
cadena_invertida=""

# El truco está en el orden en que pegamos cada letra nueva.
# En vez de añadir la letra al FINAL (como haríamos normalmente),
# la ponemos al PRINCIPIO: letra + cadena_invertida
# Así cada letra nueva empuja a las anteriores hacia la derecha.
for letra in cadena:
    cadena_invertida=letra+cadena_invertida
    # Traza paso a paso:
    # Vuelta 1: letra="h"  →  cadena_invertida = "h"  + ""    = "h"
    # Vuelta 2: letra="o"  →  cadena_invertida = "o"  + "h"   = "oh"
    # Vuelta 3: letra="l"  →  cadena_invertida = "l"  + "oh"  = "loh"
    # Vuelta 4: letra="a"  →  cadena_invertida = "a"  + "loh" = "aloh"

print(cadena_invertida)
# Resultado: aloh
#
# Alternativa con slicing (atajo de Python para invertir cadenas):
#   print(cadena[::-1])
# El [::-1] significa: recorre la cadena de atrás hacia adelante con paso -1.
# Pero construirlo con el bucle enseña el concepto de concatenación acumulativa.


# ─────────────────────────────────────────────
# BLOQUE 4: Sumar solo los dígitos numéricos de una cadena mixta
# ─────────────────────────────────────────────

# La cadena mezcla letras y números. Solo queremos sumar los dígitos.
cadena="2026J"

# Acumulador numérico que irá sumando los dígitos encontrados.
total=0

for letra in cadena:

    # Los caracteres en Python tienen un orden (orden ASCII/Unicode).
    # Los dígitos "0" al "9" están ordenados consecutivamente en ese sistema,
    # por lo que comparar letra>="0" and letra<="9" es una forma válida de
    # comprobar si un carácter es un dígito numérico.
    # Ejemplos:
    #   "2" >= "0" and "2" <= "9"  →  True   (es un dígito)
    #   "J" >= "0" and "J" <= "9"  →  False  (es una letra)
    #   "6" >= "0" and "6" <= "9"  →  True   (es un dígito)
    if letra>="0" and letra<="9":

        # int(letra) convierte el carácter "2" en el número entero 2.
        # Sin esta conversión estaríamos sumando texto y daría error.
        # Ejemplo: int("2") = 2    int("0") = 0    int("6") = 6
        total=total+int(letra)
        # Traza paso a paso:
        # Vuelta 1: letra="2"  →  es dígito  →  total = 0 + 2 = 2
        # Vuelta 2: letra="0"  →  es dígito  →  total = 2 + 0 = 2
        # Vuelta 3: letra="2"  →  es dígito  →  total = 2 + 2 = 4  (segundo 2 del "2026")
        # Vuelta 4: letra="6"  →  es dígito  →  total = 4 + 6 = 10
        # Vuelta 5: letra="J"  →  NO es dígito → no entra en el if, total no cambia

print(total)
# Resultado: 10  (2 + 0 + 2 + 6 = 10)
#
# Alternativa usando el método isdigit():
#   if letra.isdigit():
#       total = total + int(letra)
# isdigit() devuelve True si el carácter es un dígito, False si no lo es.
# Es más legible que comparar con "0" y "9", pero ambas formas son correctas.


# ─────────────────────────────────────────────
# BLOQUE 5: Separar letras y números de una cadena mixta
# ─────────────────────────────────────────────

# La cadena mezcla letras y números sin ningún orden fijo.
cadena="23GH123JOP"

# Dos acumuladores de texto, uno para letras y otro para números.
# Ambos empiezan vacíos y se irán llenando dentro del bucle.
letras=""
numeros=""

# El for recorre todos los caracteres uno a uno.
for letra in cadena:

    # Usamos la misma comparación del bloque anterior para detectar dígitos.
    # Si el carácter está entre "0" y "9" es un número, si no es una letra.
    if letra>="0" and letra<="9":
        numeros=numeros+letra  # pegamos el dígito al final de la cadena de números
    else:
        letras=letras+letra    # pegamos la letra al final de la cadena de letras

    # Traza paso a paso:
    # Vuelta 1:  letra="2"  →  es dígito  →  numeros="2",      letras=""
    # Vuelta 2:  letra="3"  →  es dígito  →  numeros="23",     letras=""
    # Vuelta 3:  letra="G"  →  NO dígito  →  numeros="23",     letras="G"
    # Vuelta 4:  letra="H"  →  NO dígito  →  numeros="23",     letras="GH"
    # Vuelta 5:  letra="1"  →  es dígito  →  numeros="231",    letras="GH"
    # Vuelta 6:  letra="2"  →  es dígito  →  numeros="2312",   letras="GH"
    # Vuelta 7:  letra="3"  →  es dígito  →  numeros="23123",  letras="GH"
    # Vuelta 8:  letra="J"  →  NO dígito  →  numeros="23123",  letras="GHJ"
    # Vuelta 9:  letra="O"  →  NO dígito  →  numeros="23123",  letras="GHJO"
    # Vuelta 10: letra="P"  →  NO dígito  →  numeros="23123",  letras="GHJOP"

# Ambos print están fuera del bucle: muestran los resultados finales.
print(letras)   # Resultado: GHJOP
print(numeros)  # Resultado: 23123
#
# Fíjate en que los números se guardan como texto ("23123"), no como un entero.
# Si quisiéramos el valor numérico tendríamos que convertirlo: int(numeros) = 23123.
# Si quisiéramos SUMAR los dígitos en lugar de concatenarlos, usaríamos
# total = total + int(letra) como en el bloque anterior.

Publicado por

Juan Pablo Fuentes

Formador de programación y bases de datos