Escuela de Ingeniería en Informática y Telecomunicaciones 01 / 35
{ }
EIT
Escuela de
Ingeniería en Informática y Telecomunicaciones
Ingeniería en Informática  ·  Analista en Programación
FPY-1101 Fundamentos de Programación
Taller de Fundamentos de Programación
Introducción
a Python

De PSeInt a Python: similitudes, diferencias, tipos, estructuras de control y buenas prácticas para tu primera evaluación

📐 Unidad 2
45 – 50 min
Primera evaluación Python
Docente
Prof. Carlos Martínez Sánchez
Asignatura
Fundamentos de Programación  FPY-1101
Periodo
Primer Año · 2026
FPY-1101 · Prof. Carlos Martínez Sánchez

¿Qué vamos a ver hoy?

Transición PSeInt → Python, con enfoque en tu primera evaluación

01PSeInt vs Python — similitudes y diferencias6 min
02Tipado dinámico y tipos de datos5 min
03Operadores aritméticos, lógicos y comparación5 min
04Tabla de verdad3 min
05input() y print() — con y sin formato5 min
06Conversión de tipos: int(), str(), float()4 min
07if / elif / else4 min
08while y for4 min
09Validación de entradas5 min
10Menú con loop principal + salida5 min
🏆
¡Puntos extra! Cada pregunta relámpago correcta vale +1.5 décimas. Máximo 3 décimas por clase. ¡Cualquiera puede ser preguntado!
PSeInt → Python

Lo que ya sabés sigue funcionando

Los conceptos de PSeInt se mapean directamente a Python. El qué no cambia, solo el cómo se escribe.

PSeInt
Python
Algoritmo Nombre
FinAlgoritmo
# sin estructura obligatoria
# código directo
Definir x Como Entero
x = 0  # sin declaración previa
x <- 5
x = 5
Leer x
x = input("...")
Escribir "Hola", x
print("Hola", x)
SiEntonces / SiNo / FinSi
if … : / elif / else:
MientrasHacer / FinMientras
while …:
Para i <- 1 Hasta n Hacer
for i in range(1, n+1):
PSeInt → Python

Las grandes diferencias

📐

Indentación obligatoria

En PSeInt usás FinSi, FinMientras para cerrar bloques. En Python los bloques se definen con 4 espacios de indentación. No hay palabras de cierre.

🔣

Sin operador ←

La asignación en Python usa = (no <-). La comparación de igualdad usa == (doble igual).

🔤

input() siempre retorna texto

En PSeInt Leer respeta el tipo de la variable. En Python input() siempre devuelve cadena, sin importar lo que el usuario escriba.

💬

Comentarios con #

En PSeInt se usa //. En Python el comentario de línea es con #. Los bloques de comentario usan """texto""".

⚠️ Regla de oro: en Python el error más común al venir de PSeInt es olvidar el : al final del if, while, for, y olvidar indentar el bloque siguiente.
⚡ Pregunta Relámpago
Q1 Tema: PSeInt vs Python · Diferencias +1.5 décimas

¿Cuál de las siguientes afirmaciones describe una diferencia correcta entre PSeInt y Python?

A En Python los bloques se cierran con FinSi, igual que en PSeInt
B En Python el operador de asignación es <- y el de comparación es =
C En Python los bloques se definen con indentación de 4 espacios, sin palabras de cierre
D Python declara el tipo de cada variable antes de usarla, igual que PSeInt con Definir
Respuesta correcta: opción C
En Python la indentación de 4 espacios reemplaza a FinSi, FinMientras, etc. No existen palabras de cierre. Además la asignación usa = (no <-) y la comparación usa ==. Y Python tiene tipado dinámico: no se declara el tipo, la variable toma el tipo del valor asignado.
Python · Tipos

Python no es tipado — ¿qué significa?

En PSeInt debías declarar el tipo de cada variable antes de usarla (Definir x Como Entero). Python es de tipado dinámico: la variable toma el tipo del valor que se le asigna, y ese tipo puede cambiar durante la ejecución.
🚨 Peligro: el tipo puede cambiar en tiempo de ejecución sin advertencia, lo que puede causar errores inesperados. Por eso es crítico convertir explícitamente con int(), float(), str().
Tipo PythonEquivalente PSeIntEjemplo
intEnterox = 42
floatRealp = 3.14
strCadenan = "Ana"
boolLógicook = True
tipado_dinamico.pyx = 10          # x es int
print(type(x))  # <class 'int'>

x = "hola"      # ahora x es str !
print(type(x))  # <class 'str'>

# ⚠️ esto NO suma, concatena:
edad = input("Edad: ")
print(edad + 1)  # ❌ TypeError!

# ✅ correcto:
edad = int(input("Edad: "))
print(edad + 1)  # ✓ funciona
Python · Operadores

Operadores Aritméticos

Op.SignificadoEjemploResultado
+Suma7 + 310
-Resta7 - 34
*Multiplicación7 * 321
/División real7 / 23.5
//División entera7 // 23
%Módulo (resto)7 % 31
**Potencia2 ** 8256
🔎 Ojo con // vs /:
7 / 23.5 (float)
7 // 23 (int, trunca)
operadores.pya, b = 10, 3

print(a + b)    # 13
print(a / b)    # 3.333...
print(a // b)   # 3
print(a % b)    # 1
print(a ** 2)   # 100
# par/impar:
print(a % 2 == 0) # True → par
Python · Operadores

Comparación y Operadores Lógicos

🔵 Relacionales

PythonPSeIntSignificado
===Igual a
!=<>Distinto de
>>Mayor que
<<Menor que
>=>=Mayor o igual
<=<=Menor o igual

🟣 Lógicos

PythonPSeIntSignificado
andYAmbas verdaderas
orOAl menos una verdadera
notNOInvierte el valor
logicos.pyedad = 20
tiene_dni = True

# and: ambas deben ser True
if edad >= 18 and tiene_dni:
    print("Puede votar")

# or: basta una True
dia = "sabado"
if dia == "sabado" or dia == "domingo":
    print("Fin de semana")

# not: invierte
aprobado = False
if not aprobado:
    print("Debe rendir de nuevo")

# ⚠️ = asigna, == compara
x = 5          # asignación
print(x == 5)  # True
Python · Lógica

Tabla de Verdad

AND — ambas deben ser True

ABA and B
TrueTrueTrue
TrueFalseFalse
FalseTrueFalse
FalseFalseFalse

NOT — invierte

Anot A
TrueFalse
FalseTrue

OR — basta una True

ABA or B
TrueTrueTrue
TrueFalseTrue
FalseTrueTrue
FalseFalseFalse
💡 En Python True y False empiezan con mayúscula.
true o false en minúscula → ❌ NameError
⚡ Pregunta Relámpago
Q2 Tema: Tipado · Operadores · Tabla de verdad +1.5 décimas

¿Cuál es el resultado de ejecutar este código?
print(10 % 3 == 1 and not False)

A False
B True
C 1
D Error de sintaxis
Respuesta correcta: opción B — True
Paso a paso: 10 % 3 = 1 → 1 == 1 = True. Luego not False = True. Finalmente True and True = True. Python evalúa en orden: primero %, luego ==, luego not, luego and.
Python · E/S

input() y print()

📥 input() — siempre retorna str

Detiene el programa y espera que el usuario escriba algo. Siempre devuelve texto, sin importar si el usuario escribe números. El parámetro entre paréntesis es el mensaje que se muestra al usuario.

nombre = input("Tu nombre: ")
edad   = int(input("Tu edad: "))
nota   = float(input("Tu nota: "))

📤 print() — múltiples formas

Muestra información en pantalla. Acepta múltiples argumentos separados por coma, e imprime un salto de línea al final por defecto. Se puede cambiar con end= y el separador con sep=.

# concatenación con coma
print("Hola", nombre)

# f-string (más limpio)
print(f"Hola, {nombre}!")
print(f"Tenés {edad} años")

# format()
print("Nota: {:.2f}".format(nota))

# sin salto de línea
print("cargando...", end="")
entrada_salida.pynombre = input("Nombre: ")
edad   = int(input("Edad:   "))
nota   = float(input("Nota:   "))

# Salida simple
print("Alumno:", nombre)

# F-string con formato
print(f"{nombre} tiene {edad} años")

# Nota con 2 decimales
print(f"Nota: {nota:.2f}")

# Separador personalizado
print("A", "B", "C", sep="-")
# → A-B-C
✨ Los f-strings (f"…{variable}…") son la forma más moderna y legible de formatear texto en Python 3.
Python · Tipos

int() · float() · str()

int()

Convierte a número entero. Descarta decimales, no redondea.

float()

Convierte a número decimal. Acepta enteros o cadenas numéricas.

str()

Convierte cualquier valor a texto. Necesario para concatenar con +.

🚨 ValueError: si el texto no representa un número válido, int("hola") lanza error. Por eso validamos antes de convertir.
💡 int(3.9)3 — ¡No redondea! Trunca hacia abajo. Para redondear usá round(3.9)4
conversiones.py# str → int
edad = int("25")       # ✓ 25
x    = int("hola")     # ❌ ValueError
y    = int(3.9)       # ✓ 3 (trunca)

# str → float
nota = float("9.5")   # ✓ 9.5
p    = float("3,14")  # ❌ ValueError (coma!)

# int/float → str
s = str(42)            # "42"
msg = "Edad: " + str(edad)  # "Edad: 25"

# mejor con f-string:
msg = f"Edad: {edad}"    # ✓ más limpio
Python · Control de Flujo

if / elif / else

elif = "else if" = es el equivalente al SiNo Si anidado de PSeInt. Permite encadenar múltiples condiciones de forma limpia, sin el caos del anidamiento.
estructura.pyif condicion1:
    # bloque 1
elif condicion2:
    # bloque 2
elif condicion3:
    # bloque 3
else:
    # si ninguna aplica
⚠️ Indentación obligatoria: el bloque de cada rama debe tener exactamente 4 espacios (o 1 tab consistente). Sin indentación → SyntaxError o lógica incorrecta.
calificacion.pynota = float(input("Nota (0-10): "))

if nota >= 9:
    print("Sobresaliente")
elif nota >= 7:
    print("Bueno")
elif nota >= 6:
    print("Aprobado")
else:
    print("Reprobado")

# Con operador lógico:
if nota >= 6 and nota <= 10:
    print("Rango válido y aprobado")

# Equivalente más pythonico:
if 6 <= nota <= 10:
    print("Rango válido y aprobado")
⚡ Pregunta Relámpago
Q3 Tema: input() · Conversiones · if/elif/else +1.5 décimas

Un alumno escribe el siguiente código. ¿Qué imprime si el usuario ingresa 8.5?

nota = float(input("Nota: "))
if nota >= 9:
    print("Sobresaliente")
elif nota >= 7:
    print("Bueno")
elif nota >= 6:
    print("Aprobado")
else:
    print("Reprobado")
A Sobresaliente
B Bueno
C Aprobado
D Reprobado
Respuesta correcta: opción B — "Bueno"
8.5 no cumple nota >= 9 (primer elif, False). Sí cumple nota >= 7 (8.5 ≥ 7 = True) → imprime "Bueno" y no evalúa los elif siguientes. El if/elif se detiene en el primer caso verdadero.
Python · Bucles

Bucle while

Equivalente al Mientras … Hacer de PSeInt. Repite mientras la condición sea True. La condición se evalúa antes de entrar al bloque.
estructura.pywhile condicion:
    # bloque que se repite
    # debe haber algo que
    # haga la condición False
🚨 Si nada dentro del bucle cambia la condición → bucle infinito. Detenerlo con Ctrl+C.
💡 while True: crea un bucle infinito intencional. Se sale con break.
while_ejemplo.py# Tabla del 5
i = 1
while i <= 10:
    print(f"5 x {i} = {5*i}")
    i += 1   # i = i + 1

# Acumulador
suma = 0
n    = 1
while n <= 100:
    suma += n  # suma = suma + n
    n    += 1
print(f"Suma 1-100: {suma}")   # 5050

# while True + break
while True:
    resp = input("¿Salir? (s/n): ")
    if resp == "s":
        break
Python · Bucles

Bucle for y range()

Equivalente al Para … Hasta de PSeInt. range() genera la secuencia de números.
Uso de range()Genera
range(5)0, 1, 2, 3, 4
range(1, 6)1, 2, 3, 4, 5
range(1, 11, 2)1, 3, 5, 7, 9
range(10, 0, -1)10, 9, 8 … 1
⚠️ range(1, n) llega hasta n-1. Para incluir n: range(1, n+1)
for_range.py# Para i ← 1 Hasta 5 Hacer
for i in range(1, 6):
    print(i)           # 1 2 3 4 5

# Suma de N números
n    = int(input("N: "))
suma = 0
for i in range(1, n + 1):
    suma += i
print(f"Suma: {suma}")

# Cuenta regresiva
for i in range(10, 0, -1):
    print(i, end=" ")
# 10 9 8 7 6 5 4 3 2 1

# Pares del 2 al 20
for i in range(2, 21, 2):
    print(i, end=" ")
⚡ Pregunta Relámpago
Q4 Tema: while · for · range() +1.5 décimas

¿Cuántas veces se imprime "hola" al ejecutar este código?
for i in range(2, 10, 3): print("hola")

A 8 veces
B 2 veces
C 3 veces
D 4 veces
Respuesta correcta: opción C — 3 veces
range(2, 10, 3) genera los valores: 2, 5, 8 (empieza en 2, salta de 3 en 3, se detiene antes de llegar a 10). El valor 11 quedaría fuera. Son 3 valores → el cuerpo del for se ejecuta 3 veces.
Python · Validación

Validar que el dato sea un número

Como input() siempre retorna str, antes de convertir con int() debemos verificar que el texto efectivamente representa un número. Para eso usamos el método .isdigit() del string.

📌 str.isdigit()

Retorna True si todos los caracteres del string son dígitos (0-9). Retorna False si hay letras, espacios, puntos o signos.

"25".isdigit()    # True  ✓
"hola".isdigit()  # False ✗
"3.5".isdigit()   # False ✗ (tiene punto)
"-5".isdigit()    # False ✗ (tiene signo)
"007".isdigit()   # True  ✓
1

Leer con input() → str

El texto queda guardado como string

2

Verificar con .isdigit()

Si es False → avisar y repetir

3

Convertir con int()

Recién acá, porque ya sabemos que es número

4

Verificar regla de negocio

Rango válido, positivo, etc.

validar_numero.py# Pedir edad válida (0-120)
while True:
    texto = input("Edad (0-120): ")
    if not texto.isdigit():
        print("⚠ Ingresá solo números enteros")
    else:
        edad = int(texto)
        if 0 <= edad <= 120:
            break
        else:
            print("⚠ Debe estar entre 0 y 120")

print(f"Edad registrada: {edad}")

# ─── Validar clave de 4 dígitos ──────────
while True:
    texto = input("Clave (4 dígitos): ")
    if not texto.isdigit():
        print("⚠ Solo números, sin letras ni espacios")
    elif len(texto) != 4:
        print("⚠ Debe tener exactamente 4 dígitos")
    else:
        clave = int(texto)
        break

print(f"Clave aceptada: {clave}")
Python · Validación

Validaciones según regla de negocio

Una regla de negocio es una condición específica del problema: nota entre 1 y 7, porcentaje entre 0 y 100, opción de menú, etc.
cadenas.py# Validar que no esté vacío
while True:
    nombre = input("Nombre: ").strip()
    if nombre != "":
        break
    print("⚠ No puede estar vacío")

# Validar opción de menú
opciones = ["1", "2", "3"]
while True:
    op = input("Opción (1-3): ")
    if op in opciones:
        break
    print("⚠ Solo 1, 2 o 3")
Para enteros: .isdigit() verifica que todos los caracteres son dígitos, luego se convierte y se valida el rango.
val_entero.py# Nota entera (1-7)
while True:
    texto = input("Nota (1-7): ")
    if not texto.isdigit():
        print("⚠ Solo números enteros")
    else:
        nota = int(texto)
        if 1 <= nota <= 7:
            break
        else:
            print("⚠ Debe estar entre 1 y 7")

# Porcentaje entero (0-100)
while True:
    texto = input("Porcentaje (0-100): ")
    if not texto.isdigit():
        print("⚠ Solo números enteros")
    else:
        pct = int(texto)
        if 0 <= pct <= 100:
            break
        else:
            print("⚠ Debe estar entre 0 y 100")
Para decimales: .isdigit() falla con "3.5" porque el punto no es dígito. Truco: quitar un punto y luego verificar.
val_float.py# El truco: replace + isdigit
"3.5".replace(".","",1).isdigit()
# → "35"   → True  ✓
"3.5.1".replace(".","",1).isdigit()
# → "35.1" → False ✗
"hola".replace(".","",1).isdigit()
# → "hola" → False ✗

# Nota decimal (1.0 - 7.0)
while True:
    texto = input("Nota (1.0-7.0): ")
    if texto.replace(".","",1).isdigit():
        nota = float(texto)
        if 1.0 <= nota <= 7.0:
            break
        print("⚠ Fuera de rango")
    else:
        print("⚠ Decimal inválido")
Python · Patrones

Menú con loop principal + salida

El patrón más común en programas de consola: un while True externo que muestra el menú, ejecuta la opción elegida, y solo sale cuando el usuario elige "Salir". Toda la lógica del programa vive dentro de este loop.
1

while True:

Loop infinito intencional

2

Mostrar menú

print() de todas las opciones

3

Leer y validar opción

.isdigit() + verificar rango

4

if/elif para cada caso

Ejecutar la funcionalidad

5

break en opción salir

Rompe el while True

menu_principal.pywhile True:
    # ── Mostrar menú ──────────────
    print("\n=== MENÚ PRINCIPAL ===")
    print("1. Saludar")
    print("2. Calcular promedio")
    print("3. Verificar mayoría de edad")
    print("0. Salir")

    # ── Leer y validar opción ─────
    texto = input("Opción: ")
    if not texto.isdigit():
        print("⚠ Solo números")
        continue   # vuelve al inicio del while
    op = int(texto)

    # ── Ejecutar opción ───────────
    if op == 1:
        nombre = input("Tu nombre: ")
        print(f"¡Hola, {nombre}!")

    elif op == 2:
        a = int(input("Nota 1: "))
        b = int(input("Nota 2: "))
        print(f"Promedio: {(a+b)/2:.1f}")

    elif op == 3:
        texto = input("Edad: ")
        if texto.isdigit():
            edad = int(texto)
            print("Mayor" if edad >= 18 else "Menor")

    elif op == 0:
        print("¡Hasta luego!")
        break      # ← sale del while True

    else:
        print("⚠ Opción no válida (0-3)")
Python · Práctica

Todo junto: programa completo

🎯 Enunciado: Programa con menú que: (1) pide N notas validadas (1.0-7.0), calcula promedio e indica si aprueba. (2) calcula factorial de un número positivo. (0) sale.
integrador.pywhile True:
    print("\n══ MENÚ ══")
    print("1. Calcular promedio de notas")
    print("2. Calcular factorial")
    print("0. Salir")

    # Validar opción del menú
    texto = input("Opción: ")
    if not texto.isdigit():
        print("⚠ Solo números")
        continue
    op = int(texto)

    if op == 1:
        # Pedir N válido
        while True:
            txt = input("¿Cuántas notas? ")
            if txt.isdigit() and int(txt) > 0:
                n = int(txt)
                break
            print("⚠ Ingresá un entero mayor a 0")

        suma = 0
        for i in range(1, n + 1):
            while True:    # validar cada nota
                txt = input(f"Nota {i} (1-7): ")
                if txt.isdigit():
                    nota = int(txt)
                    if 1 <= nota <= 7:
                        break
                    print("⚠ Debe estar entre 1 y 7")
                else:
                    print("⚠ Solo números enteros")
            suma += nota

        prom = suma / n
        estado = "✅ Aprobado" if prom >= 4 else "❌ Reprobado"
        print(f"Promedio: {prom:.1f}{estado}")

    elif op == 2:
        while True:
            txt = input("Número (≥ 0): ")
            if txt.isdigit():
                num = int(txt)
                break
            print("⚠ Solo enteros positivos")

        fact = 1
        for i in range(1, num + 1):
            fact *= i
        print(f"{num}! = {fact}")

    elif op == 0:
        print("¡Hasta luego! 🐍"); break
    else:
        print("⚠ Opción inválida")
⚡ Pregunta Relámpago
Q5 Tema: Validación · .isdigit() · Menú +1.5 décimas

¿Cuál de los siguientes fragmentos valida correctamente que el usuario ingresó un número entero positivo antes de convertirlo?

A n = int(input("N: "))   if n > 0: break
B txt = input("N: ")   if txt.isdigit() and int(txt) > 0: n = int(txt); break
C n = input("N: ")   if n.isdigit(): break
D if input("N: ") > 0: break
Respuesta correcta: opción B
La opción B hace las dos comprobaciones necesarias: .isdigit() verifica que el string solo tiene dígitos (evita letras y símbolos), y luego int(txt) > 0 verifica la regla de negocio (positivo). Solo después convierte con int(). La opción A convierte sin verificar el tipo primero. La C no verifica el rango. La D compara un string con un número, lo que da error.
Python · Evaluación

Alcance del temario

✅ Entra en la evaluación
  • Variables, tipos básicos: int, float, str, bool
  • Conversión explícita: int(), float(), str()
  • Operadores aritméticos, de comparación y lógicos
  • Entrada y salida: input(), print(), f-strings
  • Estructuras de decisión: if, elif, else
  • Bucles: while, for, range()
  • Validación de entrada numérica con .isdigit() + if/else
  • Validaciones según regla de negocio (rango, positivo, etc.)
  • Menú principal con while True, break, continue
  • Contadores y acumuladores
🚫 NO entra — aún no se ha visto
  • Colecciones
    listas [], tuplas (), diccionarios {}, conjuntos set()
  • Funciones propias
    def nombre():, parámetros, return
  • Manejo de excepciones en profundidad
    try/except/else/finally, excepciones personalizadas, jerarquía de errores
⚠️ Para validar que un dato es numérico usamos .isdigit() — que es un método de string — no try/except. Las excepciones como concepto no entran en esta evaluación.
Python · Resumen

Lo que aprendimos hoy

🔀

Transición PSeInt→Python

Mismos conceptos, diferente sintaxis. Indentación reemplaza FinSi/FinMientras.

🔣

Tipado dinámico

Sin declarar tipos. Pero input() siempre es str — convertir con int()/float().

⚙️

Operadores

+, -, *, /, //, %, **. Comparación: ==, !=, >, <. Lógicos: and, or, not.

📤

print() e input()

F-strings para formato limpio. sep= y end= para controlar salida.

🛡️

Validación

try/except ValueError + while True + break. Robusto ante entradas incorrectas.

📋

Menú principal

while True → mostrar → leer → if/elif → break en salida.

FPY-1101 · Prof. Carlos Martínez Sánchez
🐍
¡A programar
en Python! 🐍

Ya tienen todo lo que necesitan para su primera evaluación. Practiquen validaciones, el menú con loop principal y la conversión de tipos. La programación se aprende haciendo.

🐍 python.org
📘 Practiquen a diario
❓ Pregunten sin miedo
⚠️ Recuerden el int(input())
👏 Fin de la clase · Prof. Carlos Martínez Sánchez
🎨 Tema
🔠 Tamaño de texto
100%
← → navegar  |  Ctrl +/− texto