Pensamiento computacional, variables y tipos de datos básicos
Flashcards
- ¿Cuál es la diferencia fundamental entre el enfoque de ejecución de un compilador y el de un intérprete?
- El compilador evalúa y traduce todo el código de una sola vez comprobando su coherencia antes de ejecutarlo, mientras que el intérprete procesa y ejecuta la secuencia instrucción por instrucción sin un análisis previo integral.
- Si definimos la variable s = "texto", ¿es posible ejecutar s[0] = 'T'? Justifica la respuesta.
- No es posible, porque las cadenas de texto (str) en Python son inmutables; no se pueden alterar sus elementos individuales tras su creación.
Preguntas tipo test
- ¿Cuál de las siguientes propiedades define adecuadamente a un algoritmo según las bases de la programación?
- a) Debe contener exclusivamente datos numéricos
- b) Debe ser ordenado, finito y preciso
- c) Debe ser infinito y aleatorio en pasos
- d) Debe ejecutarse únicamente a través de un compilador
Respuesta: b) Debe ser ordenado, finito y preciso. Un algoritmo exige una secuencia ordenada de pasos finitos y definidos con exactitud para solucionar un problema.
- Al ejecutar type(20.5) en Python, ¿qué resultado arroja la consola?
- a)
- b)
- c)
- d)
Respuesta: c) . Los números que contienen componentes decimales se tipifican en Python bajo la clase 'float'.
- ¿Qué técnica de formateo de texto emplea el prefijo f antes de abrir las comillas?
- a) Método .format()
- b) f-strings o cadenas literales formateadas
- c) Indexación de cadenas
- d) Concatenación tradicional
Respuesta: b) f-strings o cadenas literales formateadas. Las f-strings permiten incrustar variables dentro de llaves precediendo la cadena con el carácter f.
Operadores, lógica booleana y estructuras de control
Flashcards
- ¿Qué operador lógico usarías si deseas que una acción se ejecute solo cuando fallen dos condiciones previas simultáneamente?
- Se debe emplear not (condicion_1 or condicion_2) o bien (not condicion_1 and not condicion_2).
- En un bucle while, ¿qué consecuencia acarrea omitir la sentencia de incremento de la variable evaluada?
- La condición permanecerá invariablemente verdadera, desencadenando un bucle infinito que bloquea la ejecución del programa.
Preguntas tipo test
- ¿Qué resultado arroja la comparación relacional (5 != 5)?
- a) None
- b) Error sintáctico
- c) False
- d) True
Respuesta: c) False. El operador != evalúa desigualdad, y como ambos valores son idénticos, la afirmación es falsa.
- ¿Cuál es la función del operador lógico not?
- a) Unir dos condiciones como obligatorias
- b) Comparar si dos números son distintos
- c) Invertir el valor de verdad booleano
- d) Verificar si un elemento está en una lista
Respuesta: c) Invertir el valor de verdad booleano. El operador not actúa como negación lógica: transforma True en False y False en True.
- ¿Qué operador comprueba si un elemento está contenido dentro de una colección?
- a) in
- b) and
- c) ==
- d) =
Respuesta: a) in. El operador de pertenencia in verifica si un determinado dato reside dentro de una secuencia.
Secuencias: cadenas, tuplas y listas
Flashcards
- ¿Qué arroja la llamada lista.pop() si no se especifica ningún argumento de posición?
- Remueve y devuelve el último elemento presente en la lista.
- ¿En qué se diferencian conceptualmente las funciones map y filter al actuar sobre una secuencia?
- map aplica una función transformadora sobre cada elemento alterando su valor, mientras que filter evalúa una condición booleana para seleccionar únicamente los elementos que la satisfacen.
Preguntas tipo test
- ¿Cuál de las siguientes secuencias se considera mutable en Python?
- a) tuple
- b) str
- c) list
- d) int
Respuesta: c) list. Las listas son mutables; permiten añadir, alterar o suprimir elementos directamente en memoria.
- ¿Qué delimitadores sintácticos identifican a las tuplas en Python?
- a) Comillas " "
- b) Corchetes [ ]
- c) Paréntesis ( )
- d) Llaves { }
Respuesta: c) Paréntesis ( ). Las tuplas se definen formalmente enmarcando sus elementos entre paréntesis ( ).
- ¿Qué método añade los elementos de una colección al final de otra lista existente?
- a) update()
- b) append()
- c) extend()
- d) insert()
Respuesta: c) extend(). El método extend() concatena todos los elementos de otra lista al final de la actual.
Diccionarios y pasaje de parámetros por referencia
Flashcards
- ¿Qué retorna el método d.items() de un diccionario?
- Devuelve una vista con tuplas compuestas por dos elementos: el índice 0 corresponde a la clave y el índice 1 al valor asociado.
- ¿Por qué no es estrictamente necesario que una función retorne una lista que ha modificado en su cuerpo?
- Porque las listas se pasan por referencia; las modificaciones se aplican directamente sobre la estructura original ubicada en la memoria externa a la función.
Preguntas tipo test
- ¿Qué signo delimita la sintaxis de un diccionario en Python?
- a) Llaves { }
- b) Paréntesis ( )
- c) Comillas triples """
- d) Corchetes [ ]
Respuesta: a) Llaves { }. Los diccionarios se declaran delimitando sus entradas clave-valor entre llaves { }.
- ¿Qué método de diccionario borra una clave concreta y devuelve su valor asociado?
- a) pop()
- b) get()
- c) clear()
- d) remove()
Respuesta: a) pop(). El método pop(clave) remueve la clave indicada y retorna el valor que contenía.
- Al enviar un diccionario como argumento a una función, ¿cómo se gestiona en memoria?
- a) Se vuelve inmutable dentro del ámbito de la función
- b) Se crea automáticamente una copia profunda
- c) Se pasa por referencia hacia la estructura original
- d) Se convierte de forma obligatoria en una tupla
Respuesta: c) Se pasa por referencia hacia la estructura original. Las estructuras mutables se pasan por referencia, compartiendo el acceso a la misma memoria original.
Y 0 flashcards y 4 preguntas más en el documento.
Texto del documento
APUNTES PROGRAMACIÓN I Grado en Ingeniería Informática Universidad de Barcelona AprenAI 2026-2027 Resumen de Programació I con variables, operadores, bucles while y for, secuencias (str, tuplas, listas), diccionarios y paso por referencia en Python.
APREN.AI Índice 1 Pensamiento computacional, variables y tipos de datos básicos Fundamentos del pensamiento computacional Variables, valores y asignación en memoria Tipos de datos elementales 2 Operadores, lógica booleana y estructuras de control Tipos de operadores en Python Lógica proposicional y tablas de verdad Estructuras condicionales (if, elif, else) Estructuras iterativas: while y for 3 Secuencias: cadenas, tuplas y listas Concepto y operaciones generales de secuencias Cadenas (str) y sus métodos Tuplas (tuple) Listas (list) y funciones de orden superior 4 Diccionarios y pasaje de parámetros por referencia Estructura y métodos del tipo diccionario Pasaje de parámetros por referencia en Python 5 Formulario Variables, tipos elementales y funciones básicas Operadores y control de flujo Secuencias, estructuras de datos y pasaje de parámetros Errores típicos Soluciones de las preguntas de repaso Estos apuntes pueden contener errores u omisiones.
Son un material de apoyo y no sustituyen al temario oficial ni al profesorado: contrasta la información importante. Programació I: Fundamentos de Python y Estructuras de Datos 1 1 Pensamiento computacional, variables y tipos de datos básicos AL ACABAR SABRÁS Definir los conceptos fundamentales del pensamiento computacional, algoritmos y programas. Diferenciar los mecanismos de ejecución entre lenguajes compilados e interpretados. Gestionar variables en memoria y manipular los tipos primitivos (int, float, str). Aplicar operaciones de indexado, rebanado y formateo sobre cadenas de texto.
PIÉNSALO ANTES DE LEER 1 ¿Por qué decimos que una computadora no puede 'pensar' por sí misma y necesita un algoritmo? Fundamentos del pensamiento computacional El pensamiento computacional es la disciplina orientada a resolver problemas diarios mediante el procesamiento sistemático de información usando un agente de cómputo. Para estructurar soluciones dentro de este marco se emplean dos conceptos primordiales: Algoritmo: constituye un conjunto ordenado, finito e inequívoco de pasos diseñados para solventar un problema específico. Programa: representa la traducción directa de dicho algoritmo a un lenguaje de programación comprensible para el ordenador.
Un lenguaje de programación actúa como canal de comunicación estructurado entre la persona que programa y el equipo informático. Según su mecanismo de procesamiento, los lenguajes se clasifican en: El lenguaje Python se distingue por ser multipropósito, multiplataforma y multiparadigma, admitiendo diversos estilos de programación. COMPRUEBA 2 ¿En qué se diferencian un compilador y un intérprete al procesar el código? Compiladores: examinan la totalidad del código y verifican su coherencia lógica antes de autorizar la ejecución. 1 Intérpretes: procesan y ejecutan las instrucciones línea por línea sin llevar a cabo una fase previa de verificación global.
2 Programació I: Fundamentos de Python y Estructuras de Datos 2 Variables, valores y asignación en memoria En el entorno de desarrollo, una variable funciona como un espacio reservado de memoria destinado a almacenar datos a lo largo de la ejecución. Por su parte, los valores constituyen los datos concretos que manipula el programa, tales como números, letras, símbolos o textos completos. La operación de asignación traslada un dato al contenedor de memoria mediante la sintaxis , donde la variable receptora se sitúa a la izquierda del signo igual y el dato asignado a la derecha.
Esquema de asignación de una variable y su valor en memoria Tipos de datos elementales Python categoriza la información en diferentes tipos primitivos según su naturaleza: Tipo de dato Identificador técnico Descripción Ejemplo en código Entero int (integer) Valores numéricos enteros sin parte decimal. 15 Texto str (string) Secuencia o cadena de caracteres alfanuméricos y símbolos. "Lucas" Decimal float Números positivos o negativos con decimales. 20.5 IDEAS CLAVE El pensamiento computacional permite solucionar problemas cotidianos mediante el procesamiento de información con un agente de cómputo.
Un algoritmo debe ser ordenado, preciso y finito, funcionando como la base lógica que luego se codifica en un lenguaje de programación. Los programas se procesan mediante compiladores (evaluación completa y previa) o intérpretes (evaluación y ejecución línea por línea). Python distingue tres tipos básicos fundamentales: int (enteros), str (texto/inmutables) y float (decimales). La memoria opera asociando un identificador (variable) a un valor mediante el operador de asignación (=). variable = valor Programació I: Fundamentos de Python y Estructuras de Datos 3 COMPRUEBA LO QUE HAS APRENDIDO 3.
¿Cuál es la diferencia fundamental entre el enfoque de ejecución de un compilador y el de un intérprete? 4. Si definimos la variable s = "texto", ¿es posible ejecutar s[0] = 'T'? Justifica la respuesta. Test Rodea la respuesta correcta. Las soluciones están al final. 5. ¿Cuál de las siguientes propiedades define adecuadamente a un algoritmo según las bases de la programación? 6. Al ejecutar type(20.5) en Python, ¿qué resultado arroja la consola? 7. ¿Qué técnica de formateo de texto emplea el prefijo f antes de abrir las comillas? 8. ¿Qué ocurre si se aplica la operación de slicing s[1:5:2] a una cadena?
2 Operadores, lógica booleana y estructuras de control AL ACABAR SABRÁS Identificar y calcular el resultado de operadores aritméticos, relacionales y lógicos. Diseñar bifurcaciones de código utilizando condicionales simples y anidados. Implementar bucles while controlando adecuadamente el corte de la iteración. Construir recorridos iterativos mediante bucles for sobre colecciones.
Debe contener exclusivamente datos numéricos a) Debe ser ordenado, finito y preciso b) Debe ser infinito y aleatorio en pasos c) Debe ejecutarse únicamente a través de un compilador d) a) b) c) d) Método .format() a) f-strings o cadenas literales formateadas b) Indexación de cadenas c) Concatenación tradicional d) Selecciona desde el índice 1 al 4 saltando de 2 en 2 a) Divide la cadena en dos bloques iguales b) Multiplica la subcadena obtenida por dos c) Extrae los elementos del 1 al 5 saltando de 2 en 2 d) Programació I: Fundamentos de Python y Estructuras de Datos 4 PIÉNSALO ANTES DE LEER 9 ¿Por qué no se debe usar un solo signo igual (=) para comprobar si dos números son equivalentes?
Tipos de operadores en Python Las expresiones computacionales procesan datos mediante símbolos denominados operadores. En función de la naturaleza de sus cálculos y el valor devuelto, se organizan en tres grupos esenciales: Categoría Símbolos Propósito Naturaleza del resultado Aritméticos , , , Efectuar cómputos matemáticos básicos. Valor numérico (entero o flotante). Relacionales , , , , , Comparar operandos entre sí evaluando su relación. Valor booleano (True o False). Lógicos and, or, not Articular condiciones compuestas uniendo varias proposiciones. Valor booleano (True o False). Una expresión es el resultado evaluado de una o múltiples operaciones encadenadas en una misma sentencia.
EJEMPLO Considerando las variables , , y : Lógica proposicional y tablas de verdad La evaluación de múltiples criterios se sustenta en el álgebra booleana: Conjunción (and): arroja verdadero únicamente cuando ambas premisas resultan verdaderas. Disyunción (or): arroja verdadero si al menos uno de los términos evaluados es verdadero. Negación (not): conmuta el valor de verdad, transformando verdadero en falso y viceversa. p q p and q p or q not p True True True True False True False False True False + / == !
= < > <= >= num = 1 10 num = 2 5 num = 3 15 num = 4 20 num > 1 num 2 10 > 5 True num <= num 2 3 5 <= 15 True (num + 4 num == 1 num ) and (num < 3 2 num ) 1 (30 == 15) and (5 < 10) False and True False Programació I: Fundamentos de Python y Estructuras de Datos 5 p q p and q p or q not p False True False True True False False False False True Adicionalmente, Python incluye operadores de pertenencia para cotejar colecciones: in (verifica inclusión) y not in (confirma ausencia). COMPRUEBA 10 ¿Cuál es el valor final de la expresión lógica (not True) or (False == False)?
Estructuras condicionales (if, elif, else) Una estructura condicional bifurca el camino del programa atendiendo a condiciones lógicas: EJEMPLO hay_sol = False esta_nublado = True if hay_sol: print("Nos tenemos que poner protector solar") elif not hay_sol and esta_nublado: print("El dia esta feo, porque no hay sol y esta nublado") else: print("No tenemos que ponernos protector solar") Estructuras iterativas: while y for Las estructuras iterativas o bucles repiten bloques de instrucciones según dos paradigmas primordiales: Bucle while: reitera la ejecución mientras la condición sea evaluada como verdadera.
Obliga al programador a actualizar la variable de control dentro del bloque para eludir un bucle infinito. Bucle for: ejecuta un número predefinido de iteraciones recorriendo secuencialmente cada componente de una colección o rango de datos. if: encabeza la verificación de la condición inicial requerida. 1 elif: establece vías opcionales en caso de no cumplirse el primer postulado. 2 else: recoge el flujo residual cuando ninguna condición anterior ha resultado cierta. 3 Programació I: Fundamentos de Python y Estructuras de Datos 6 ESQUEMA Estructuras de control de flujo ERROR FRECUENTE Olvidar modificar la variable de control en un bucle while genera un bucle infinito que colapsa la memoria.
Asegúrate de incluir el incremento o mutación antes de concluir el bloque interno. COMPRUEBA 11 ¿Por qué se prefiere el bucle for sobre el while al procesar una colección finita de datos? IDEAS CLAVE Los operadores relacionales y lógicos generan invariablemente resultados booleanos (True o False). La conjunción lógica (and) requiere que todos los términos sean verdaderos, mientras que la disyunción (or) solo precisa de uno. La instrucción if-elif-else canaliza la ejecución permitiendo seleccionar caminos mutuamente excluyentes. El bucle while depende de una condición dinámica y requiere modificar la variable de iteración; el bucle for recorre colecciones ya delimitadas.
COMPRUEBA LO QUE HAS APRENDIDO 12. ¿Qué operador lógico usarías si deseas que una acción se ejecute solo cuando fallen dos condiciones previas simultáneamente? 13. En un bucle while, ¿qué consecuencia acarrea omitir la sentencia de incremento de la variable evaluada? Condicionales Bifurcaciones según valor de verdad if / elif / else Evaluación de casos alternativos Iterativas Repetición controlada de bloques while Repite según condición variable for Iteración sobre colecciones Programació I: Fundamentos de Python y Estructuras de Datos 7 Test Rodea la respuesta correcta. Las soluciones están al final. 14. ¿Qué resultado arroja la comparación relacional (5 != 5)? 15.
¿Cuál es la función del operador lógico not? 16. ¿Qué operador comprueba si un elemento está contenido dentro de una colección? 17. ¿Qué rasgo distingue esencialmente al bucle for frente al bucle while? 3 Secuencias: cadenas, tuplas y listas AL ACABAR SABRÁS Reconocer las diferencias fundamentales de mutabilidad entre cadenas, tuplas y listas. Manejar con soltura los métodos de búsqueda y formateo de cadenas de caracteres. Modificar y organizar listas dinámicamente mediante sus métodos integrados. Emplear map y filter para transformar y seleccionar datos en secuencias.
PIÉNSALO ANTES DE LEER 18 ¿Por qué motivo es seguro compartir una tupla entre distintas funciones sin temor a que su contenido sea alterado?
None a) Error sintáctico b) False c) True d) Unir dos condiciones como obligatorias a) Comparar si dos números son distintos b) Invertir el valor de verdad booleano c) Verificar si un elemento está en una lista d) in a) and b) == c) = d) for no puede recorrer listas a) for itera directamente sobre un conjunto predefinido b) while no admite operadores lógicos c) while finaliza automáticamente sin condición d) Programació I: Fundamentos de Python y Estructuras de Datos 8 Concepto y operaciones generales de secuencias Una secuencia es una estructura de datos ordenada cuyos componentes ocupan posiciones contiguas de memoria.
Existen funciones y operadores transversales aplicables a cualquier secuencia : Operación / Función Descripción operativa Devuelve True si el elemento forma parte de ; de lo contrario, False. Concatena de forma sucesiva las secuencias y . Replica y concatena la secuencia una cantidad de veces. Recupera el componente en la posición de índice . Referencia el componente posicionado lugares antes del final. Extrae una porción desde la posición hasta la posición . Extrae el tramo de a utilizando un paso de salto . Calcula la cantidad total de elementos de la secuencia. Obtiene el elemento de menor o mayor valor dentro de . Genera una nueva lista con los elementos de ordenados.
Produce un iterador con el orden invertido de la secuencia. ESQUEMA Clasificación de secuencias en Python COMPRUEBA 19 Si tenemos una secuencia s con 6 elementos, ¿qué rango de índices positivos y negativos abarcan sus posiciones?
s x in s x s s + t s t s n s n s[i] i s[ k] k s[i : j] i j 1 s[i : j : k] i j 1 k len(s) min(s) / max(s) s sorted(s) s reversed(s) Inmutables No admiten alteración tras su creación str Colección contigua de caracteres tuple Colección heterogénea entre paréntesis Mutables Contenido modificable directamente en memoria list Colección heterogénea entre corchetes Programació I: Fundamentos de Python y Estructuras de Datos 9 Cadenas (str) y sus métodos Las cadenas de texto son secuencias inmutables restringidas a caracteres alfanuméricos y símbolos. Entre sus métodos principales destacan: s.capitalize(): retorna una copia con el primer carácter en mayúscula y el resto en minúsculas.
s.lower() / s.upper(): transforma todos los caracteres a minúsculas o mayúsculas respectivamente. s.find(sub) / s.rfind(sub): ubica el índice de la primera o última aparición de una subcadena. s.center(ancho, relleno): sitúa el texto centrado rellenando los laterales. s.ljust() / s.rjust(): justifica la cadena a la izquierda o derecha completando espacios. s.format(*args): inserta dinámicamente argumentos en los marcadores de posición de la cadena. Tuplas (tuple) Las tuplas son estructuras inmutables delimitadas por paréntesis ordinarios . Permiten albergar simultáneamente elementos de múltiples tipos (enteros, texto, listas).
Al no poder alterarse su composición en memoria tras su creación, ofrecen métodos de consulta no destructivos: t.index(elemento): localiza la posición del índice donde se ubica el elemento indicado. t.count(elemento): cuantifica las apariciones de un valor dentro de la tupla. Listas (list) y funciones de orden superior A diferencia de las tuplas, las listas son secuencias mutables enmarcadas entre corchetes . Es posible modificar, anexar y suprimir valores en memoria de forma dinámica: Método de lista Efecto de la operación lista.append(valor) Inserta el valor indicado en la última posición. lista.insert(pos, valor) Coloca el elemento en la posición designada desplazando los existentes.
lista.remove(valor) Elimina la primera coincidencia del valor solicitado. lista.pop([indice]) Extrae y remueve el elemento del índice especificado (o el último por defecto). lista.extend(otraLista) Acopla todos los elementos de otra colección al final de la actual. lista.sort() Reordena los elementos (admite reverse=True y criterios con key). lista.reverse() Invierte el orden secuencial de los elementos de la propia lista. Asimismo, Python provee herramientas de orden superior para procesar secuencias de manera concisa: map(función, secuencia): somete cada componente a una función dada y devuelve la secuencia resultante de transformaciones.
( ) [ ] Programació I: Fundamentos de Python y Estructuras de Datos 10 filter(función, secuencia): preserva exclusivamente aquellos elementos en los que una función booleana evaluada devuelve True. ERROR FRECUENTE Intentar usar métodos de mutación directa como .append() o .sort() sobre cadenas o tuplas desencadenará un error de tipo (AttributeError). Solo las listas poseen naturaleza mutable. COMPRUEBA 20 ¿Cuál es la diferencia entre utilizar sorted(lista) y lista.sort()? IDEAS CLAVE Las secuencias ubican elementos de forma contigua en memoria y admiten indexación, corte ([i:j:k]) y concatenación.
Las cadenas de texto (str) y las tuplas (tuple) son inmutables; sus elementos no admiten reasignación tras ser creadas. Las listas (list) son mutables y permiten agregar, modificar y suprimir elementos mediante métodos como append, insert y pop. Las funciones map y filter facilitan la aplicación masiva de transformaciones y filtrados sobre secuencias mediante funciones. COMPRUEBA LO QUE HAS APRENDIDO 21. ¿Qué arroja la llamada lista.pop() si no se especifica ningún argumento de posición? 22. ¿En qué se diferencian conceptualmente las funciones map y filter al actuar sobre una secuencia? Test Rodea la respuesta correcta. Las soluciones están al final. 23.
¿Cuál de las siguientes secuencias se considera mutable en Python? 24. ¿Qué delimitadores sintácticos identifican a las tuplas en Python? 25. ¿Qué método añade los elementos de una colección al final de otra lista existente? tuple a) str b) list c) int d) Comillas " " a) Corchetes [ ] b) Paréntesis ( ) c) Llaves { } d) update() a) append() b) extend() c) insert() d) Programació I: Fundamentos de Python y Estructuras de Datos 11 26. ¿Qué retorna el método s.find('a') si el carácter 'a' no existe dentro de la cadena s? 4 Diccionarios y pasaje de parámetros por referencia AL ACABAR SABRÁS Gestionar diccionarios mediante sus métodos principales de consulta, adición y vaciado.
Comprender el mecanismo del pasaje de parámetros por referencia en Python. Prevenir alteraciones no deseadas en colecciones mutables utilizando copias explícitas. PIÉNSALO ANTES DE LEER 27 Si modificas los elementos de una lista dentro de una función, ¿permanecerán los cambios al volver al programa principal? Estructura y métodos del tipo diccionario Un diccionario (dict) es una estructura que asocia directamente una clave única a un grupo de datos o valor. En lugar de localizar los elementos rastreando un índice numérico secuencial, el acceso se realiza mediante la propia clave, saltando de inmediato a la posición requerida. Sintácticamente se declaran delimitando sus pares con llaves .
Método Acción que desempeña d.clear() Elimina por completo todos los elementos del diccionario. d.pop(clave) Remueve el par asociado a la clave y retorna su valor (provoca error si no existe). d.popitem() Elimina y entrega un par clave-valor arbitrario (genera error si la estructura está vacía). d.copy() Crea una copia superficial del diccionario en otra región de memoria. d.fromkeys(secuencia) Construye un nuevo diccionario tomando como claves los elementos de la secuencia aportada. d.get(clave) Devuelve el valor vinculado a la clave indicada de forma segura. d.keys() Proporciona una lista/vista que agrupa todas las claves del diccionario.
None a) -1 b) False c) 0 d) {clave: valor} Programació I: Fundamentos de Python y Estructuras de Datos 12 Método Acción que desempeña d.items() Retorna una lista de tuplas con el formato (clave, valor) para cada entrada. d.update(b) Integra los pares de un diccionario b; si una clave ya existía, actualiza su contenido. COMPRUEBA 28 ¿Qué ventaja ofrece el acceso a datos en un diccionario frente a una búsqueda secuencial en una lista? Pasaje de parámetros por referencia en Python En Python, las colecciones mutables (listas y diccionarios) operan bajo el mecanismo de pasaje de parámetros por referencia al interactuar con funciones.
Al suministrar una lista o un diccionario como argumento a una función: No se produce un duplicado en el ámbito de memoria privado de la función. Se transfiere una llave de acceso directo que apunta a la estructura original. Este comportamiento genera implicaciones determinantes para el diseño del código: ERROR FRECUENTE Creer que las modificaciones realizadas a una lista o diccionario dentro de una función desaparecen al retornar. Al pasarse por referencia, los cambios permanecen en el objeto original externo. Usa d.copy() si necesitas aislar las modificaciones.
COMPRUEBA 29 Si una función recibe un diccionario y ejecuta d.clear(), ¿qué ocurre con el diccionario original tras finalizar la función? Modificaciones externas: Cualquier alteración (adición, borrado o cambio de valor) realizada dentro de la función afecta directamente a la estructura exterior sin requerir la instrucción return. 1 Carga directa de datos: Se puede pasar una estructura vacía como parámetro para que la función la pueble de contenido de manera progresiva. 2 Preservación mediante copias: Si se requiere preservar la información original intacta, el programador debe generar explícitamente una copia manual (vía .copy() ) antes o dentro de la función.
3 Programació I: Fundamentos de Python y Estructuras de Datos 13 CAUSAS Y CONSECUENCIAS Acceso directo a memoria La función no crea copia local del dato Mutabilidad de la estructura Listas y diccionarios pueden alterarse Pasaje de parámetros por referencia Cambios persistentes Las modificaciones se reflejan en el exterior Retorno innecesario No se requiere return para guardar cambios IDEAS CLAVE Los diccionarios asocian claves a valores, permitiendo consultas inmediatas sin buscar por posición. Los métodos keys() e items() permiten inspeccionar respectivamente las claves individuales o los pares clave-valor empaquetados en tuplas.
Las listas y diccionarios se transfieren a las funciones mediante pasaje por referencia compartiendo la misma posición de memoria. Para evitar que una función modifique un diccionario o lista original, es imprescindible realizar una copia explícita mediante .copy(). COMPRUEBA LO QUE HAS APRENDIDO 30. ¿Qué retorna el método d.items() de un diccionario? 31. ¿Por qué no es estrictamente necesario que una función retorne una lista que ha modificado en su cuerpo? Test Rodea la respuesta correcta. Las soluciones están al final. 32. ¿Qué signo delimita la sintaxis de un diccionario en Python? 33. ¿Qué método de diccionario borra una clave concreta y devuelve su valor asociado?
Llaves { } a) Paréntesis ( ) b) Comillas triples """ c) Corchetes [ ] d) pop() a) get() b) clear() c) remove() d) Programació I: Fundamentos de Python y Estructuras de Datos 14 34. Al enviar un diccionario como argumento a una función, ¿cómo se gestiona en memoria? 35. ¿Qué ocurre al aplicar d.update(b) si una clave de b ya se encontraba presente en d? 5 Formulario Variables, tipos elementales y funciones básicas Fórmula o procedimiento Qué significa cada símbolo Cuándo se usa variable: espacio en memoria; valor: dato asignado Asignar y guardar datos de cualquier tipo primitivo. x: dato o variable Mostrar texto o resultados por pantalla.
x: variable a evaluar Identificar el tipo de dato (int, float, str). msg: texto que orienta al usuario Capturar un valor introducido por teclado. nombre: función; p: parámetros; v: valor devuelto Modularizar código y retornar resultados. Operadores y control de flujo Fórmula o procedimiento Qué significa cada símbolo Cuándo se usa Operadores aritméticos elementales Realizar operaciones numéricas retornando un int o float. Operadores de comparación relacional Contrastar valores devolviendo un booleano (True o False). Operadores lógicos booleanos Combinar o negar condiciones lógicas.
Se vuelve inmutable dentro del ámbito de la función a) Se crea automáticamente una copia profunda b) Se pasa por referencia hacia la estructura original c) Se convierte de forma obligatoria en una tupla d) Se descarta la nueva clave de b a) Se actualiza el valor asociado a dicha clave b) Se produce un error de clave duplicada c) Se borra la clave de ambos diccionarios d) variable = valor print(x) type(x) input(msg) def nombre(p) : return v +, , , / ==, !
=, <, >, <=, >= and, or, not Programació I: Fundamentos de Python y Estructuras de Datos 15 Fórmula o procedimiento Qué significa cada símbolo Cuándo se usa x: elemento; s: colección o secuencia Comprobar la pertenencia o ausencia en una secuencia. condición: expresión booleana evaluada antes de iterar Repetir acciones mientras la condición sea verdadera. elemento: variable de iteración; colección: conjunto de datos Recorrer de manera secuencial y automática cada componente.
Secuencias, estructuras de datos y pasaje de parámetros Fórmula o procedimiento Qué significa cada símbolo Cuándo se usa i: inicio; j: fin excluido; k: incremento o paso Segmentar y extraer partes de una cadena, tupla o lista. v: elemento a ingresar Añadir un nuevo elemento al final de una lista. i: índice opcional (por defecto el último) Extraer y suprimir un elemento de una lista mutable. f: función; s: secuencia de datos Aplicar una función a todos los elementos de la secuencia. f: función booleana; s: secuencia de datos Filtrar y conservar solo los elementos que devuelven True. clave: identificador de acceso; valor: dato asociado Almacenar o actualizar datos en un diccionario {}.
estructura: lista o diccionario Generar copia independiente antes del paso por referencia. Errores típicos Bucle infinito en while: Olvidar actualizar la variable evaluada dentro del cuerpo del bucle, manteniendo la condición perpetuamente verdadera. Mutación de secuencias inmutables: Intentar reasignar elementos por índice en cadenas (str) o tuplas (tuple), provocando error en tiempo de ejecución. Efectos colaterales por referencia: Asumir que una lista o diccionario modificado dentro de una función no altera la variable exterior; requiere .copy() si se desea conservar la estructura original.
x in s, x not in s while condici n: o ˊ bloque actualizar variable for elemento in colecci n: o ˊ bloque s[i : j : k] lista.append(v) lista.pop(i) map(f, s) filter(f, s) d[clave] = valor estructura.copy() Programació I: Fundamentos de Python y Estructuras de Datos 16 Soluciones de las preguntas de repaso 1. Porque una computadora es solo un agente de procesamiento que requiere instrucciones precisas, ordenadas y finitas para transformar datos de entrada en una solución. 2. El compilador revisa la coherencia de todo el programa antes de ejecutarlo, mientras que el intérprete ejecuta el código directamente línea a línea sin una fase previa de verificación global. 3.
El compilador evalúa y traduce todo el código de una sola vez comprobando su coherencia antes de ejecutarlo, mientras que el intérprete procesa y ejecuta la secuencia instrucción por instrucción sin un análisis previo integral. 4. No es posible, porque las cadenas de texto (str) en Python son inmutables; no se pueden alterar sus elementos individuales tras su creación. 5. b) Debe ser ordenado, finito y preciso. Un algoritmo exige una secuencia ordenada de pasos finitos y definidos con exactitud para solucionar un problema. 6. c) . Los números que contienen componentes decimales se tipifican en Python bajo la clase 'float'. 7. b) f-strings o cadenas literales formateadas.
Las f-strings permiten incrustar variables dentro de llaves precediendo la cadena con el carácter f. 8. a) Selecciona desde el índice 1 al 4 saltando de 2 en 2. El rebanado [i:j:k] abarca desde el índice i hasta j-1 empleando un paso o incremento k. 9. Porque en Python el signo igual simple (=) representa una asignación de datos a una variable, mientras que la comparación de igualdad requiere el operador de doble signo (==). 10. Es True. (not True) se evalúa como False, y (False == False) resulta True. La disyunción False or True concluye en True. 11.
Porque for extrae automáticamente cada elemento de la colección de manera secuencial, gestionando el avance de forma interna sin riesgo de provocar bucles infinitos por olvido de un contador. 12. Se debe emplear not ( or ) o bien (not and not ). 13. La condición permanecerá invariablemente verdadera, desencadenando un bucle infinito que bloquea la ejecución del programa. 14. c) False. El operador != evalúa desigualdad, y como ambos valores son idénticos, la afirmación es falsa. 15. c) Invertir el valor de verdad booleano. El operador not actúa como negación lógica: transforma True en False y False en True. 16. a) in.
El operador de pertenencia in verifica si un determinado dato reside dentro de una secuencia. 17. b) for itera directamente sobre un conjunto predefinido. El bucle for toma uno a uno los elementos de una colección delimitada de forma automática. 18. Porque las tuplas son inmutables; una vez instanciadas en memoria, ninguna operación puede reasignar ni remover sus componentes. 19. Los índices positivos van desde 0 hasta 5, mientras que el indexado negativo abarca desde -1 (último elemento) hasta -6 (primer elemento). 20. sorted(lista) crea y devuelve una nueva lista ordenada sin alterar la original, mientras que lista.sort() muta y reordena la lista original directamente en memoria.
condicion 1 condicion 2 condicion 1 condicion 2 Programació I: Fundamentos de Python y Estructuras de Datos 17 21. Remueve y devuelve el último elemento presente en la lista. 22. map aplica una función transformadora sobre cada elemento alterando su valor, mientras que filter evalúa una condición booleana para seleccionar únicamente los elementos que la satisfacen. 23. c) list. Las listas son mutables; permiten añadir, alterar o suprimir elementos directamente en memoria. 24. c) Paréntesis ( ). Las tuplas se definen formalmente enmarcando sus elementos entre paréntesis ( ). 25. c) extend(). El método extend() concatena todos los elementos de otra lista al final de la actual. 26. b) -1.
El método find() devuelve -1 cuando no localiza la subcadena dentro del texto. 27. Sí, porque las listas se pasan por referencia y la función trabaja directamente sobre la misma dirección de memoria del objeto original. 28. En el diccionario se accede inmediatamente al dato señalando directamente su clave identificadora, sin requerir la iteración elemento a elemento de toda la colección. 29. El diccionario original quedará totalmente vacío, ya que la función manipula la misma dirección de memoria por referencia y no una copia local aislada. 30. Devuelve una vista con tuplas compuestas por dos elementos: el índice 0 corresponde a la clave y el índice 1 al valor asociado. 31.
Porque las listas se pasan por referencia; las modificaciones se aplican directamente sobre la estructura original ubicada en la memoria externa a la función. 32. a) Llaves { }. Los diccionarios se declaran delimitando sus entradas clave-valor entre llaves { }. 33. a) pop(). El método pop(clave) remueve la clave indicada y retorna el valor que contenía. 34. c) Se pasa por referencia hacia la estructura original. Las estructuras mutables se pasan por referencia, compartiendo el acceso a la misma memoria original. 35. b) Se actualiza el valor asociado a dicha clave. El método update sobrescribe y actualiza el valor existente con el nuevo dato provisto.
Programació I: Fundamentos de Python y Estructuras de Datos 18