option
Cuestiones
ayuda
daypo
buscar.php

Fundamentos de programación T2

COMENTARIOS ESTADÍSTICAS RÉCORDS
REALIZAR TEST
Título del Test:
Fundamentos de programación T2

Descripción:
Fundamentos de programación T2

Fecha de Creación: 2025/12/12

Categoría: Otros

Número Preguntas: 15

Valoración:(0)
COMPARTE EL TEST
Nuevo ComentarioNuevo Comentario
Comentarios
NO HAY REGISTROS
Temario:

Una desarrolladora está creando una clase Usuario para un sistema de autenticación. Dentro de la clase, necesita definir un método que configure los atributos iniciales de cada objeto Usuario en el momento de su creación, como el nombre_usuario y el email. Este método debe ejecutarse automáticamente cada vez que se crea una nueva instancia de la clase, asegurando que ningún usuario se cree sin estos datos fundamentales. ¿Qué método debe implementar la desarrolladora para inicializar los atributos de cada objeto Usuario?. El constructor __init__(self, nombre_usuario, email), que se invoca automáticamente al instanciar la clase (ej: nuevo_usuario = Usuario(...)). Un método llamado configurar(self, nombre, email), que debe ser invocado manualmente después de crear el objeto para asignarle sus atributos iniciales, dando flexibilidad al desarrollador. Un método estático @staticmethod create_user(nombre, email) que devuelve una instancia de la clase ya configurada, lo cual es un patrón de diseño válido pero no es el constructor estándar. El método self.inicializar() definido dentro de la clase, que se encarga de agrupar toda la lógica de asignación de atributos y es llamado por convención como primera línea en otros métodos.

Un ingeniero de software está definiendo la configuración de una aplicación. Necesita almacenar el número máximo de reintentos para una conexión de red, un valor que no debe ser alterado en ninguna parte del código para garantizar la estabilidad del sistema. Aunque Python no tiene constantes en sentido estricto como otros lenguajes, el equipo sigue las convenciones de estilo recomendadas (PEP 8) para mantener un código limpio y legible. ¿Cuál es la forma convencional y profesional en Python de declarar una variable para que otros desarrolladores entiendan que su valor está destinado a ser constante?. Declarar la variable utilizando "type hinting" con la palabra Final (ej: MAX_REINTENTOS: Final = 5), lo que impide su reasignación en tiempo de ejecución. Utilizar una función "setter" privada que lance una excepción si se intenta modificar el valor de la variable después de su inicialización, encapsulando la lógica dentro de una clase. Declarar el nombre de la variable completamente en mayúsculas (ej: "MAX_REINTENTOS = 5"), estableciendo una convención clara y aceptada por la comunidad para indicar que, aunque técnicamente mutable, no debe ser modificada. Crear un objeto inmutable personalizado, como una tupla de un solo elemento, para almacenar el valor, ya que las tuplas no pueden ser modificadas después de su creación, garantizando así su inmutabilidad.

Un analista financiero está escribiendo un script en Python para calcular el interés compuesto. La fórmula es A = P * (1 + r/n)(n*t). Para asegurar la precisión, el analista quiere asegurarse de que todas las divisiones y potencias se realicen en el orden matemático correcto. Le preocupa especialmente la expresión (1 + r/n), donde la división debe ocurrir antes que la suma. ¿es necesario el uso de paréntesis en la sub-expresión (1 + r/n) para garantizar el orden correcto de las operaciones?. Sí, los paréntesis son absolutamente necesarios. Sin ellos, Python realizaría la suma 1 + r primero debido a la asociatividad de izquierda a derecha de los operadores aditivos y multiplicativos, llevando a un cálculo incorrecto. No, estrictamente no son necesarios en este caso aunque su uso es recomendado. El operador de división (/) tiene una precedencia mayor que el de suma (+), por lo que r/n se evaluaría primero de todos modos. Depende del intérprete de Python. Algunas versiones podrían evaluar de izquierda a derecha por defecto, mientras que otras más modernas optimizan la expresión y aplican la precedencia matemática estándar, por lo que los paréntesis son una buena práctica para asegurar la portabilidad. No, y además no se recomienda su uso. Añadir paréntesis innecesarios puede ralentizar la ejecución del código, ya que el intérprete tiene que realizar un paso adicional para procesar el agrupamiento antes de aplicar las reglas de precedencia.

En un proyecto de desarrollo de software, dos variables, a y b, se inicializan de la siguiente manera: a = [10, 20] y b = a. Posteriormente, un nuevo miembro del equipo, sin darse cuenta de la asignación anterior, modifica la lista a través de la variable b añadiendo un elemento: b.append(30). Esperaba que solo la lista b cambiara, pero se sorprende al ver que la lista a también ha sido modificada. ¿Qué concepto fundamental de Python sobre el manejo de variables y tipos de datos explica por qué la modificación de b también afectó a a?. El hecho de que las variables en Python son referencias a objetos. La asignación b = a no crea una copia de la lista; hace que tanto a como b apunten al mismo objeto en memoria. Al ser la lista un tipo de dato mutable, cualquier cambio a través de una de las referencias es visible a través de la otra. El tipado dinámico de Python, que al modificar b, infiere que a también debe cambiar para mantener la consistencia de tipos entre las variables, forzando una actualización automática. La propagación de excepciones, donde la operación append sobre b genera un evento interno que es capturado por a, provocando que replique el cambio para evitar inconsistencias en el estado del programa. El ámbito de las variables (scope). Como a y b fueron declaradas en el mismo ámbito, Python las trata como alias de un mismo valor, aplicando cualquier cambio en una a todas las variables del mismo nombre o valor en ese contexto.

Un desarrollador junior está depurando un sistema de gestión de inventario en Python. El sistema maneja el stock de productos, que se representa con números enteros, y los precios, que incluyen céntimos. Al realizar una operación de cálculo del valor total de un producto ”stock * precio”, el programa lanza un TypeError. El desarrollador observa que el precio se está leyendo de un archivo de texto. ¿Cuál es la causa más probable del error y cómo debería solucionarse de forma robusta para evitar fallos en el cálculo?. El error se debe a que Python no puede multiplicar números enteros y decimales juntos. La solución es convertir la variable del stock a un número flotante para que ambos operandos sean del mismo tipo antes de la operación. El problema radica en el tipado dinámico de Python, que confunde los tipos de datos. La solución es usar type hinting al declarar las variables stock: int y precio: float para forzar al intérprete a tratarlos correctamente. La causa es un fallo en la lectura del archivo de texto, que probablemente está corrupto. La mejor estrategia es implementar un sistema de validación del archivo antes de la lectura para asegurar la integridad de los datos. El TypeError ocurre porque se está intentando multiplicar un número (stock de tipo int) por una cadena de texto (precio de tipo str). La solución correcta es convertir explícitamente el precio a un tipo numérico (float(precio)).

Una ingeniera de DevOps está escribiendo un script de automatización que comprueba el estado de varios servicios web. Para cada servicio en una lista, el script debe verificar si el nombre del servicio contiene la subcadena "critical". El resultado de esta verificación (un valor booleano) determinará si se activa una alerta de alta prioridad. Necesita un operador que le permita realizar esta comprobación de manera eficiente y legible. ¿Qué operador de Python es el más adecuado para verificar si la cadena "critical" está presente dentro de la variable nombre_servicio?. El operador de igualdad ==, utilizando una expresión como nombre_servicio == "critical". Una combinación de los operadores and y or para recorrer cada carácter de la cadena. El método de cadena .find("critical"). El operador de pertenencia "in", que permite una sintaxis: "critical" in nombre_servicio.

Un analista de datos está escribiendo un script para filtrar un conjunto de datos de transacciones. El requisito es seleccionar únicamente las transacciones que cumplan dos condiciones de forma conjunta: primero, que pertenezcan a un cliente_vip, y segundo, que el monto de la transacción sea superior a 1000 € o que la divisa sea "EUR". El analista escribe la condición if monto > 1000 or divisa == "EUR" and cliente_vip, ¿por qué la lógica de negocio podría no estar implementándose correctamente?. El operador or siempre se evalúa antes que el operador and, por lo que Python comprueba si monto > 1000 o si la divisa es "EUR", y si alguna de esas es cierta, ignora la condición cliente_vip, aplicando incorrectamente el filtro. El operador and tiene mayor precedencia que el or, por lo que Python evalúa primero divisa == "EUR" and cliente_vip. La condición se interpreta como monto > 1000 or (divisa == "EUR" and cliente_vip). Para forzar la lógica deseada, se deben usar paréntesis: (monto > 1000 or divisa == "EUR") and cliente_vip. La expresión se evalúa estrictamente de izquierda a derecha. Por lo tanto, se comprueba monto > 1000, y si es verdadero, la evaluación se detiene debido al cortocircuito del operador or, incluyendo transacciones de alto valor sin verificar si el cliente es VIP. Python no permite combinar operadores lógicos como or y and en la misma expresión sin anidarlos explícitamente en bloques if separados, ya que la combinación genera un comportamiento ambiguo que resulta en un error de lógica.

Un equipo de ingeniería de software está discutiendo sobre el diseño de una clase para gestionar la configuración de una aplicación. La configuración incluye valores como el puerto de la base de datos (un número) y el modo de despliegue (una cadena como "producción" o "desarrollo"). Quieren modelar esto usando Programación Orientada a Objetos para que el código sea modular y escalable. En el paradigma de POO, ¿cómo se denominan, respectivamente, las variables que almacenan los datos (puerto, modo) y las funciones que definen el comportamiento (ej. cargar_configuracion(), validar_configuracion()) dentro de una clase?. Las variables se llaman parámetros y las funciones se llaman procedimientos. Las variables se llaman componentes y las funciones se llaman acciones. Las variables se llaman campos y las funciones se llaman constructores. Las variables se denominan atributos y las funciones se denominan métodos.

Un programador está trabajando en un script que procesa datos numéricos. Recibe una variable valor que puede ser de tipo int o float. En una parte del código, necesita realizar una operación donde un entero x se suma con esta variable valor. El programador quiere entender cómo Python manejará la operación resultado = x + valor si x es un entero y valor es un float. ¿Qué tipo de dato tendrá la variable resultado y qué principio de conversión de tipos de Python explica este comportamiento?. El resultado será de tipo int, porque Python prioriza el tipo del primer operando en operaciones aritméticas. Este comportamiento se conoce como conversión por truncamiento, donde la parte decimal se descarta. La operación lanzará un TypeError porque Python es un lenguaje de tipado fuerte y no permite operaciones aritméticas entre tipos de datos numéricos diferentes (int y float) sin una conversión explícita. El resultado será de tipo float. Este fenómeno se debe a la conversión de tipo implícita, donde Python promueve automáticamente el operando del tipo menos preciso (int) al tipo más preciso (float) para evitar la pérdida de información. El tipo del resultado dependerá del valor específico de las variables. Si valor tiene una parte decimal igual a cero (ej: 4.0), Python optimizará el resultado y lo convertirá a int para ahorrar memoria.

Un programa debe procesar una lista de pedidos. Si la lista de pedidos está vacía, el programa debe mostrar un mensaje "No hay pedidos pendientes" y terminar. Un desarrollador escribe la siguiente condición: if pedidos == []:. Sin embargo, un desarrollador senior le sugiere que hay una forma más "pythónica" y legible de comprobar si una lista está vacía. ¿Cuál es la forma idiomática y preferida en Python para verificar si una lista llamada pedidos está vacía en una condición if?. if len(pedidos) == 0:. if pedidos is None:. if not pedidos:. if pedidos.empty():.

Un desarrollador de software está implementando un sistema que debe iterar sobre una lista de identificadores de usuario para enviarles una notificación. Sin embargo, el proceso de envío puede fallar para ciertos usuarios. El requisito es que el script intente enviar la notificación a cada usuario de la lista, y si falla con uno, debe registrar el error y continuar con el siguiente, sin que el bucle se detenga por completo. ¿Cuál es la estrategia de programación más adecuada para implementar este comportamiento dentro de un bucle for?. Colocar todo el bucle for dentro de un único bloque try...except. Si ocurre un error con cualquier usuario, el except se activará. Antes de entrar al bucle, verificar la validez de cada identificador de usuario en la lista con una función de validación, eliminando los problemáticos para que el bucle for solo procese los válidos. Dentro del bucle for, envolver la operación de envío de notificación para cada usuario individual en su propio bloque try...except. Utilizar una sentencia if-else dentro del bucle para comprobar si el envío fue exitoso. Si no lo fue, se usa la palabra clave break para salir del bucle y manejar el error de forma centralizada al final del script.

Una aplicación web recibe datos de un formulario, donde el usuario puede marcar una casilla de "activo". En el backend, este valor llega como la cadena de texto "True" o "False". Un desarrollador necesita convertir este valor a un tipo booleano para usarlo en una estructura if. Intenta usar bool("False") esperando obtener el valor booleano "False", ¿Cuál es el resultado de la expresión bool("False") en Python y por qué?. El resultado es False. La función bool() reconoce las representaciones de texto de los valores booleanos, convirtiendo la cadena "False" a su equivalente booleano. El resultado es True. En Python, la conversión de una cadena a booleano evalúa si la cadena está vacía o no. La expresión lanzará un ValueError, ya que la función bool() no está diseñada para interpretar cadenas de texto y solo puede convertir tipos numéricos (donde 0 es False) o colecciones (donde las vacías son False). El resultado es None, indicando que la conversión no es posible de forma directa. Python devuelve None en conversiones ambiguas para forzar al desarrollador a manejar explícitamente la lógica de la transformación.

Un equipo de desarrollo de una plataforma de e-learning necesita implementar una lógica para asignar una calificación final a un estudiante. La calificación depende de la puntuación obtenida: más de 90 es "Sobresaliente", entre 70 y 90 es "Notable", entre 50 y 70 es "Aprobado", y menos de 50 es "Suspenso". El código debe ser eficiente y evitar comprobaciones redundantes para mantener el rendimiento en un sistema con miles de estudiantes. ¿Qué estructura de control de flujo es la más idónea y eficiente en Python para implementar esta lógica de asignación de calificaciones de manera clara y ordenada?. Una estructura if-elif-else. Una serie de sentencias if independientes, cada una evaluando un rango de puntuación. Un bucle for que itere sobre una lista de tuplas con los límites de cada calificación, rompiendo el bucle una vez que encuentre la categoría correcta. Esto añade una complejidad innecesaria al problema. Un diccionario donde las claves son las calificaciones ("Sobresaliente", "Notable", “Aprobado”, “Suspenso”) y los valores son rangos de puntuación.

Un analista financiero está escribiendo un script en Python para calcular el interés compuesto. La fórmula es A = P * (1 + r/n)(n*t). Para asegurar la precisión, el analista quiere asegurarse de que todas las divisiones y potencias se realicen en el orden matemático correcto. Le preocupa especialmente la expresión (1 + r/n), donde la división debe ocurrir antes que la suma. ¿es necesario el uso de paréntesis en la sub-expresión (1 + r/n) para garantizar el orden correcto de las operaciones?. Sí, los paréntesis son absolutamente necesarios. Sin ellos, Python realizaría la suma 1 + r primero debido a la asociatividad de izquierda a derecha de los operadores aditivos y multiplicativos, llevando a un cálculo incorrecto. No, estrictamente no son necesarios en este caso aunque su uso es recomendado. El operador de división (/) tiene una precedencia mayor que el de suma (+), por lo que r/n se evaluaría primero de todos modos. Depende del intérprete de Python. Algunas versiones podrían evaluar de izquierda a derecha por defecto, mientras que otras más modernas optimizan la expresión y aplican la precedencia matemática estándar, por lo que los paréntesis son una buena práctica para asegurar la portabilidad. No, y además no se recomienda su uso. Añadir paréntesis innecesarios puede ralentizar la ejecución del código, ya que el intérprete tiene que realizar un paso adicional para procesar el agrupamiento antes de aplicar las reglas de precedencia.

En una startup de tecnología financiera (FinTech), un equipo de desarrollo está diseñando el núcleo de un sistema para representar las cuentas de usuario. Necesitan una plantilla que defina la estructura y el comportamiento común de todas las cuentas, como el saldo, el titular y las operaciones de depósito o retiro. El objetivo es asegurar que cada nueva cuenta creada en el sistema sea consistente, modular y reutilizable para futuras ampliaciones del software. Desde la perspectiva de la Programación Orientada a Objetos (POO), ¿qué concepto fundamental deberían implementar para crear esta plantilla base para las cuentas de usuario?. Una clase CuentaUsuario que encapsule los atributos (saldo, titular) y los métodos (depositar, retirar). Una serie de variables globales para almacenar los datos de cada usuario, permitiendo un acceso rápido y directo desde cualquier parte del programa. Una función principal que gestione todas las operaciones de las cuentas mediante una secuencia de comandos. Un diccionario de Python para cada usuario, donde las claves representan los atributos (como saldo) y los valores su estado.

Denunciar Test