Escuela de Ingeniería en Informática y Telecomunicaciones 01 / 20
{ }
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
Cerramos
con Python

Listas, diccionarios, matrices, funciones y control de versiones con Git & GitHub

📐 Unidad 3 · Módulo Final
45 – 50 min
🔀 Git & GitHub
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?

Último módulo: estructuras de datos, funciones y control de versiones

01Listas: creación y acceso4 min
02Listas: métodos y recorrido4 min
03Diccionarios: creación y acceso4 min
04Diccionarios: métodos y recorrido4 min
05Matrices: listas de listas5 min
06Listas de diccionarios · Diccionarios de listas5 min
07Funciones: definición y sintaxis4 min
08Funciones: ejemplo práctico4 min
09Git: control de versiones5 min
10GitHub: trabajo individual y colaborativo6 min
🏆
¡Puntos extra! Cada pregunta relámpago correcta vale +1.5 décimas. Máximo 3 décimas por clase. ¡Cualquiera puede ser preguntado!
Python · Listas

Listas — creación y acceso

Una lista es una colección ordenada y modificable de elementos. Se define con corchetes [ ] y cada elemento se accede por su índice, que comienza en 0.
"manzana"
[0]
"pera"
[1]
"uva"
[2] / [-1]
💡 El índice -1 accede al último elemento, -2 al anteúltimo, y así.
listas_basico.pyfrutas = ["manzana", "pera", "uva"]

print(frutas[0])     # manzana
print(frutas[-1])    # uva (último)
print(frutas[1:3])   # ['pera', 'uva']

frutas[1] = "kiwi"      # modificar
frutas.append("piña")  # agregar al final

print(frutas)
# ['manzana', 'kiwi', 'uva', 'piña']

print(len(frutas))   # 4
Python · Listas

Listas — métodos y recorrido

MétodoQué hace
.append(x)Agrega x al final
.insert(i, x)Inserta x en la posición i
.remove(x)Elimina la primera coincidencia de x
.pop(i)Elimina y retorna el elemento en i
.sort()Ordena la lista (de menor a mayor)
len(lista)Cantidad de elementos
x in listaTrue si x está en la lista
🔁 Para recorrer una lista usamos for. Si necesitamos el índice además del valor, usamos range(len(...)).
recorrer_listas.pynotas = [85, 90, 78, 95]

# Recorrido simple
for nota in notas:
    print(nota)

# Recorrido con índice
for i in range(len(notas)):
    print(i, "->", notas[i])

# Buscar y modificar
if 90 in notas:
    print("Está en la lista")

notas.sort()
print(notas)        # [78, 85, 90, 95]
Python · Diccionarios

Diccionarios — creación y acceso

Un diccionario almacena pares clave: valor. Se define con llaves { } y se accede por clave, no por posición numérica.
EstructuraAcceso
Listalista[0]  — por posición
Diccionariodic["clave"]  — por nombre
💡 Las claves suelen ser cadenas (str), y los valores pueden ser de cualquier tipo: número, texto, lista, incluso otro diccionario.
diccionarios_basico.pyalumno = {
    "nombre": "Ana",
    "edad": 20,
    "carrera": "Informática"
}

print(alumno["nombre"])   # Ana

alumno["edad"] = 21        # modificar
alumno["seccion"] = "A"    # agregar clave nueva

print(alumno)
# {'nombre': 'Ana', 'edad': 21,
#  'carrera': 'Informática', 'seccion': 'A'}
Python · Diccionarios

Diccionarios — métodos y recorrido

MétodoQué hace
.keys()Retorna todas las claves
.values()Retorna todos los valores
.items()Retorna pares (clave, valor)
.get(clave, x)Busca clave; si no existe, retorna x
🚨 diccionario["clave_inexistente"] lanza KeyError. Por eso .get() es más seguro cuando la clave podría no existir.
recorrer_dict.py# Recorrer solo claves
for clave in alumno:
    print(clave, "->", alumno[clave])

# Recorrer clave y valor juntos
for clave, valor in alumno.items():
    print(f"{clave}: {valor}")

# Acceso seguro con valor por defecto
print(alumno.get("telefono", "No registrado"))

print(alumno.keys())
print(alumno.values())
⚡ Pregunta Relámpago
Q1 Tema: Listas · Diccionarios +1.5 décimas

¿Qué imprime este código?

datos = {"a": 1, "b": 2}
datos["c"] = 3
print(len(datos))
A 2
B 3
C 4
D Error: la clave "c" no existe
Respuesta correcta: opción B — 3
Asignar datos["c"] = 3 a una clave que no existe no genera error — Python la crea automáticamente. El diccionario queda con 3 claves: "a", "b" y "c". Por eso len(datos) retorna 3. El error (KeyError) solo ocurre al leer una clave inexistente, no al asignarla.
Python · Matrices

Listas de Listas

Una matriz en Python es una lista cuyos elementos son a su vez listas. Cada lista interna representa una fila. Se accede con doble índice: matriz[fila][columna].
1
2
3
4
5
6
7
8
9
matriz[1][0] = 4  ·  matriz[1][2] = 6 — primer índice es la fila, segundo es la columna.
matrices.pymatriz = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

print(matriz[0][0])   # 1  (fila 0, col 0)
print(matriz[1][2])   # 6  (fila 1, col 2)

# Recorrido completo: fila por fila
for fila in matriz:
    for valor in fila:
        print(valor, end=" ")
    print()
# 1 2 3
# 4 5 6
# 7 8 9
Python · Matrices

Listas de Diccionarios

Una lista de diccionarios representa varios registros con la misma estructura — perfecta para una lista de alumnos, productos o cualquier conjunto de elementos similares.

📋 Cada elemento de la lista es un diccionario completo. Para llegar a un dato puntual: primero el índice de la lista, luego la clave del diccionario.

alumnos[0]["nombre"] → accede al nombre del primer alumno de la lista.
lista_de_dicts.pyalumnos = [
    {"nombre": "Ana",  "nota": 6.5},
    {"nombre": "Luis", "nota": 5.2},
    {"nombre": "Eva",  "nota": 7.0}
]

print(alumnos[0]["nombre"])   # Ana

for alumno in alumnos:
    print(alumno["nombre"], "->", alumno["nota"])

# Calcular promedio del curso
suma = 0
for alumno in alumnos:
    suma += alumno["nota"]
print(f"Promedio: {suma/len(alumnos):.2f}")
Python · Matrices

Diccionarios de Listas

Un diccionario de listas agrupa elementos por categoría: cada clave tiene asociada una lista de valores. Ideal para inventarios, agrupaciones o clasificaciones.
EstructuraCuándo usarla
Lista de diccionariosVarios registros, misma estructura
Diccionario de listasAgrupar valores por categoría
💡 inventario["frutas"] devuelve la lista completa de frutas — luego se recorre o se modifica como cualquier lista.
dict_de_listas.pyinventario = {
    "frutas":   ["manzana", "pera"],
    "verduras": ["zanahoria", "lechuga", "papa"]
}

for categoria, items in inventario.items():
    print(categoria, "->", len(items), "items")
    for item in items:
        print("   -", item)

# Agregar un elemento a una categoría
inventario["frutas"].append("kiwi")
print(inventario["frutas"])
# ['manzana', 'pera', 'kiwi']
⚡ Pregunta Relámpago
Q2 Tema: Matrices · Estructuras Combinadas +1.5 décimas

Necesitás guardar varios alumnos, cada uno con su nombre y su nota. ¿Qué estructura es la más adecuada?

A Una lista de listas: [["Ana", 6.5], ["Luis", 5.2]]
B Una lista de diccionarios: [{"nombre": "Ana", "nota": 6.5}, ...]
C Un diccionario de listas: {"nombre": [...], "nota": [...]}
D Una matriz de números únicamente
Respuesta correcta: opción B
Una lista de diccionarios es ideal porque cada alumno es un registro independiente con sus propios datos identificados por nombre de clave ("nombre", "nota") — mucho más claro que recordar posiciones numéricas como en una lista de listas. La opción C separaría los datos de cada alumno en listas distintas, perdiendo la relación directa entre nombre y nota de la misma persona.
Python · Funciones

Funciones — definición y sintaxis

Una función es un bloque de código reutilizable que realiza una tarea específica. Se define con def, puede recibir parámetros, y puede devolver un valor con return.
def_basico.pydef saludar(nombre):
    print(f"Hola, {nombre}!")

saludar("Ana")    # Hola, Ana!
saludar("Luis")   # Hola, Luis!
⚠️ nombre al definir la función es el parámetro; "Ana" al llamarla es el argumento.
print()return
Muestra en pantallaEntrega el valor a quien llamó
No se puede reutilizarEl resultado se puede guardar y usar
return_vs_print.pydef cuadrado(numero):
    return numero ** 2

resultado = cuadrado(5)
print(resultado)          # 25
print(cuadrado(3) + 1)  # 10

# El valor de "return" se puede
# guardar, sumar, comparar, etc.
Python · Funciones

Funciones — reutilizar código

Antes había que repetir el bloque de validación cada vez que pedíamos un número entero. Con una función, lo escribimos una sola vez y lo reutilizamos donde se necesite.
1

Definir la función una vez

Encapsula la lógica de validación

2

Llamarla con distintos mensajes

Reutilizable para edad, nota, opción, etc.

3

return entrega el valor validado

Listo para usar en el resto del programa

funcion_reutilizable.pydef pedir_entero(mensaje):
    while True:
        texto = input(mensaje)
        if texto.isdigit():
            return int(texto)
        print("⚠ Ingresá un número entero")

# Una sola función, usada varias veces
edad = pedir_entero("Edad: ")
nota = pedir_entero("Nota: ")

print(f"Edad: {edad}, Nota: {nota}")
⚡ Pregunta Relámpago
Q3 Tema: Funciones +1.5 décimas

¿Qué imprime este código?

def doble(n):
    n * 2

resultado = doble(5)
print(resultado)
A 10
B None
C 5
D Error de sintaxis
Respuesta correcta: opción B — None
La función calcula n * 2 pero nunca usa return — el resultado se calcula y se descarta. Cuando una función no tiene return explícito, Python retorna None automáticamente. Por eso resultado vale None, no 10. Es un error muy común: confundir calcular un valor con devolverlo.
Git & GitHub

Git — qué es y comandos básicos

Git es un sistema de control de versiones: registra el historial de cambios de un proyecto y permite volver a versiones anteriores. Funciona de forma local en tu computador.
Directorio de trabajo
git add →
Área de preparación
git commit →
Repositorio (historial)
ComandoQué hace
git initCrea un repositorio nuevo
git statusMuestra cambios pendientes
git add archivoPrepara un cambio para guardar
git commit -m "msj"Guarda una versión con un mensaje
git logMuestra el historial de versiones
terminal# Crear el repositorio
git init

# Ver qué cambió
git status

# Preparar el cambio
git add validaciones.py

# Guardar la versión
git commit -m "Agrego validación de edad"

# Ver el historial
git log

# ── salida típica de git log ──
# commit a3f9c2d
# Author: Tu Nombre
# Date:   hoy
#     Agrego validación de edad
Git & GitHub

GitHub — trabajo individual

GitHub es una plataforma en la nube que aloja repositorios Git. Permite respaldar el proyecto, acceder desde cualquier lugar, y es la base para colaborar con otros.
💻 Repositorio local
push →
← pull
☁️ GitHub (remoto)
ComandoQué hace
git remote add origin urlConecta el repo local con GitHub
git push origin mainSube los cambios locales
git pull origin mainTrae los cambios remotos
git clone urlCopia un repositorio existente
terminal# Conectar el repo local con GitHub
git remote add origin https://github.com/usuario/proyecto.git

# Subir los cambios guardados
git push origin main

# Traer cambios que hizo otra persona
# (o que subiste desde otro computador)
git pull origin main

# Copiar un repositorio que ya existe
git clone https://github.com/usuario/proyecto.git

# ↑ Crea una carpeta local con todo
#   el historial del proyecto
💡 push sube tus commits a GitHub; pull trae los commits que faltan en tu copia local.
Git & GitHub

GitHub — trabajo colaborativo

Cuando varias personas trabajan en el mismo proyecto, se usan ramas (branches) para trabajar en paralelo sin afectar el código principal (main). Los cambios se integran mediante un Pull Request.
1

Crear una rama

git checkout -b nombre-rama

2

Trabajar y subir cambios

git push origin nombre-rama

3

Abrir un Pull Request

Proponer en GitHub que se integren los cambios

4

Revisar y hacer merge

El equipo revisa, aprueba e integra a main

main
└─
feature
PR →
la rama feature se integra a main mediante un Pull Request + merge
terminal# Crear y moverse a una rama nueva
git checkout -b nueva-funcionalidad

# ... trabajar y hacer commits ...
git add .
git commit -m "Agrego validación de notas"

# Subir la rama a GitHub
git push origin nueva-funcionalidad

# Luego: abrir Pull Request en GitHub.com
# El equipo revisa y aprueba el merge
✅ El Pull Request permite que el equipo revise el código antes de integrarlo — clave para trabajar en equipo sin pisarse los cambios.
⚡ Pregunta Relámpago
Q4 Tema: Git · GitHub +1.5 décimas

¿Cuál es el orden correcto para guardar un cambio localmente y luego subirlo a GitHub?

A git push → git add → git commit
B git commit → git add → git push
C git add → git commit → git push
D git pull → git add → git push
Respuesta correcta: opción C
Primero git add prepara el cambio (lo pone en el área de preparación). Luego git commit lo guarda como una versión en el historial local. Finalmente git push sube ese commit a GitHub. No se puede hacer commit sin haber hecho add antes, ni push sin tener un commit que subir.
Python · Resumen

Lo que aprendimos hoy

📋

Listas

Colección ordenada y mutable. Acceso por índice [0,1,2...]. append, remove, sort.

🔑

Diccionarios

Pares clave:valor. Acceso por clave. keys(), values(), items(), get().

🔢

Matrices

Listas de listas: matriz[fila][columna]. For anidado para recorrer.

🧩

Estructuras combinadas

Lista de diccionarios (registros) y diccionario de listas (categorías).

⚙️

Funciones

def, parámetros, return. Evitan repetir código — reutilizables.

🔀

Git & GitHub

add → commit → push. Branches y Pull Requests para trabajo en equipo.

FPY-1101 · Prof. Carlos Martínez Sánchez
🐍
¡Ya programan
con Python! 🐍

Ya manejan estructuras de datos, funciones y control de versiones — las bases de cualquier proyecto real. Sigan practicando y suban su código a GitHub.

🐍 python.org
🔀 github.com
📘 Practiquen a diario
❓ Pregunten sin miedo
👏 Fin de la clase · Prof. Carlos Martínez Sánchez
🎨 Tema
🔠 Tamaño de texto
100%
← → navegar  |  Ctrl +/− texto