3 · Variantes y práctica RA3
20 preguntas · objetivo: 30 minutos · una sola respuesta correcta. Condiciones y referencias. / separa líneas. Cada pregunta parte de cero. Las situaciones de RA3 son ejercicios de razonamiento, no ejecutan movimientos de archivos reales.
El cortocircuito evita una división
¿Qué imprime?
def comprobar(x): return x != 0 and 8 / x > 1print(comprobar(0), comprobar(4))- No imprime nada:
ZeroDivisionError.Con x igual a cero, el primer operando es False y and no evalúa la división.
-
True TrueCero incumple la primera condición de la función.
-
False TrueLa primera llamada se corta en False; en la segunda, 8 / 4 es 2 y supera 1.
-
False FalseCon 4 se cumplen las dos condiciones.
Repasar: F, ejercicio 14 (and); precisión añadida: evaluación en cortocircuito.
Or no devuelve siempre un bool
¿Qué imprime?
def elegir(x): return x or 5print(elegir(0), elegir(2))-
5 2or devuelve un operando: 0 es falso y da paso a 5; 2 es verdadero y se devuelve directamente.
-
True Trueor no convierte automáticamente los operandos en valores bool.
-
0 2Con el cero se evalúa y devuelve el segundo operando.
-
5 5El segundo operando no sustituye a un primer operando que ya sea verdadero.
Repasar: T a; precisión añadida: valor de retorno de operadores lógicos.
Argumentos evaluados de izquierda a derecha
¿Qué imprime?
def marca(n): print(n) return nprint(marca(1) + marca(2))-
3 / 1 / 2El print exterior espera a evaluar la suma de sus argumentos.
-
1 / 3 / 2La suma no puede completarse sin obtener primero el retorno de marca(2).
-
2 / 1 / 3Se evalúa primero el operando de la izquierda, marca(1).
-
1 / 2 / 3Cada llamada imprime su número durante la evaluación; después el print exterior muestra 1 + 2.
Repasar: T a; precisión añadida: orden de evaluación de expresiones y llamadas.
Cambiar el orden por nombre
¿Qué imprime?
def resta(a, b=2): return a - bprint(resta(b=5, a=3), resta(3))-
2 1Los argumentos con nombre no se asocian por el orden en que aparecen escritos.
-
-2 1La primera llamada calcula 3 - 5; la segunda usa el valor por defecto b igual a 2.
-
-2 -2Pasar b igual a 5 en una llamada no cambia el valor por defecto de la siguiente.
- No imprime nada:
SyntaxError.Todos los argumentos de la primera llamada son nombrados y pueden escribirse en ese orden.
Repasar: T a; precisión añadida: argumentos por nombre.
Una documentación que no impone un retorno
¿Qué imprime?
def calcular(): """Devuelve 7.""" 7print(calcular())-
7Ni el docstring ni la última expresión sustituyen a return.
-
Devuelve 7.El docstring documenta la función; no se imprime al invocarla.
-
NoneLa función evalúa el literal 7 y termina sin return, devolviendo None.
- No imprime nada:
SyntaxError.Tanto el docstring como una expresión aislada son sintácticamente válidos.
Repasar: T a (docstring y retorno).
Dos valores, tres destinos
¿Qué ocurre?
def medidas(b, h): return 2 * (b + h), b * hp, a, extra = medidas(1, 2)print(p, a)- No imprime nada:
ValueError.La función devuelve dos valores, pero el desempaquetado exige tres.
-
6 2El error en la asignación impide alcanzar el print.
- No imprime nada:
TypeError.La tupla sí se puede desempaquetar; lo incorrecto es la cantidad de valores, no su tipo.
-
6 2 NonePython no rellena con None los destinos sobrantes.
Repasar: F, ejercicio 5; precisión añadida: aridad del desempaquetado.
Sumar no garantiza una suma numérica
¿Qué imprime?
def sumar(a, b): return a + bprint(sumar("2", "3"), sumar(True, 2))-
5 3Dos cadenas con + se concatenan: no se convierten automáticamente a enteros.
-
23 TrueLa suma de True y 2 produce el entero 3, no un booleano.
- No imprime nada:
TypeError.Ambas operaciones son válidas: concatenación de cadenas y suma de bool con int.
-
23 3El mismo operador concatena los textos y, en la segunda llamada, suma 1 + 2.
Repasar: F, ejercicio 12; precisión añadida: operadores según el tipo recibido.
La función usa su propio módulo global
Se ejecuta principal.py. ¿Qué imprime?
FACTOR = 2def escalar(n): return n * FACTORfrom geometria import escalarFACTOR = 10print(escalar(3))-
30La global de principal no sustituye a la global que usa una función definida en geometria.
-
6escalar busca FACTOR en el módulo donde fue definida y allí vale 2.
- No imprime nada:
NameError.FACTOR sí existe en el entorno global de la función.
-
3La multiplicación se realiza y el factor del módulo es 2, no 1.
Repasar: F, ejercicios 15 y 20; precisión añadida: ámbito global de una función importada.
Describir una fecha no cambia su validación
¿Qué imprime esta versión simplificada del aula?
def fecha(dia, mes): return 1 <= dia <= 31 and 1 <= mes <= 12print(fecha(31, 2), fecha(0, 1))-
False FalseAunque el 31 de febrero no existe en el calendario, el código solo comprueba dos intervalos.
-
True TrueEl día 0 queda fuera del intervalo permitido.
-
True False31 y 2 pasan los rangos; 0 y 1 fallan por el día. Se razona sobre el código, no sobre su nombre.
- No imprime nada:
ValueError.No se construye un objeto fecha ni se lanza ninguna excepción.
Repasar: F, ejercicio 18; contraste con la validación por meses de tu laboratorio.
El caso especial del año 2000
¿Qué imprime esta versión incompleta de la regla gregoriana?
def bisiesto(anio): return anio % 4 == 0 and anio % 100 != 0print(bisiesto(2000), bisiesto(2024))-
False TrueEl código rechaza 2000 por ser múltiplo de 100; le falta la excepción para múltiplos de 400.
-
True TrueEso sería lo correcto según el calendario, pero no lo que devuelve esta implementación.
-
False False2024 es múltiplo de 4 y no de 100, por lo que cumple ambas condiciones.
-
True FalseInvierte los resultados del código en ambos casos.
Repasar: F, ejercicio 18; variante del fallo de tu laboratorio.
Producto y su elemento neutro aditivo
¿Qué imprime?
def producto(a, b): if b == 0: return 0 return a + producto(a, b - 1)print(producto(3, 2), producto(3, 0))-
6 1El caso base de este producto por sumas es 0, no el 1 de una potencia.
-
5 0No se suman a y b: se suma a tantas veces como indica b.
- No imprime nada:
RecursionError.La segunda coordenada baja hasta cero y la llamada directa con cero termina inmediatamente.
-
6 0La primera llamada calcula 3 + 3 + 0; la segunda entra directamente en el caso base.
Repasar: R, ejercicio 23.
Límite impar en una suma de pares
¿Qué imprime?
def pares(n): if n <= 0: return 0 if n % 2 != 0: return pares(n - 1) return n + pares(n - 2)print(pares(5))-
15Eso sumaría todos los naturales; los impares no se acumulan en esta función.
-
6El 5 se omite y queda 4 + 2 + 0.
-
9Eso sumaría 5 + 3 + 1, justamente los impares que se descartan.
-
4Tras sumar 4 todavía se procesa el 2 antes del caso base.
Repasar: R, ejercicio 26.
Interés con cero años
¿Qué imprime?
def capital(c, tasa, anios): if anios == 0: return c return capital(c * (1 + tasa), tasa, anios - 1)print(capital(8, 0.5, 0), capital(8, 0.5, 1))-
8.0 12.0Con cero años se devuelve directamente el entero 8, sin ejecutar ninguna operación con la tasa.
-
0 4.0La función devuelve el capital total, no solo el interés generado.
-
8 12.0El caso base conserva el tipo del capital recibido; un año calcula 8 por 1.5 y devuelve un float.
-
12.0 12.0En cero años no se aplica ningún interés.
Repasar: R, ejercicio 29.
El cero como fin del recorrido de dígitos
¿Qué imprime esta función concreta? Se prueba también fuera del dominio positivo del enunciado.
def contar(n, d): if n == 0: return 0 return (n % 10 == d) + contar(n // 10, d)print(contar(10, 0), contar(0, 0))-
1 0El cero de 10 sí se inspecciona; n igual a 0 entra directamente en el caso base y no se inspecciona.
-
1 1Sería otra especificación razonable para el número cero, pero no la implementada aquí.
-
0 0En la primera llamada, 10 % 10 sí vale 0 y aporta True, equivalente a 1 en la suma.
-
True FalseLas sumas recursivas producen enteros y el caso base devuelve el entero 0.
Repasar: R, ejercicio 30; precisión añadida: suma de booleanos y entrada cero.
Extraer la última extensión
¿Qué imprime este fragmento de RA3?
import osdef extension(nombre): base, ext = os.path.splitext(nombre) return ext.lower() or "sin_extension"print(extension("copia.TAR.GZ"), extension("LEEME"))-
gz sin_extensionsplitext conserva el punto de la extensión; este fragmento no lo elimina.
-
.tar.gz sin_extensionsplitext separa únicamente la última extensión en este nombre.
-
.GZ sin_extensionlower convierte la extensión extraída a minúsculas.
-
.gz sin_extensionEl fragmento no cumple todavía el requisito de quitar el punto; para LEEME la extensión vacía activa el texto alternativo.
Repasar: RA3, requisito 3; precisión añadida: retorno de or.
El umbral de 1024 bytes
¿Qué imprime esta versión reducida a bytes y KB?
def tamano(n): if n >= 1024: return f"{n / 1024:.2f} KB" return f"{n} bytes"print(tamano(1024))-
1024 bytesEl operador mayor o igual incluye exactamente el umbral 1024.
-
1.00 KB1024 dividido entre 1024 da 1; el formato .2f muestra dos decimales.
-
1 KBLa conversión numérica es correcta, pero el formato solicita dos cifras decimales.
-
1.00 MBEste fragmento solo convierte una vez de bytes a KB, no a MB.
Repasar: RA3, requisito 4 (variante reducida para cálculo mental).
Un prefijo de nombre no basta para anidar rutas
En RA3, tras obtener las rutas absolutas, se añade os.sep al final de ambas antes de comparar sus prefijos. ¿Qué problema evita directamente?
- Que la comparación distinga mayúsculas de minúsculas.
Añadir un separador no cambia la sensibilidad a mayúsculas de una comparación de cadenas.
- Que una ruta relativa se convierta en absoluta.
Precisamente se convierten primero a absolutas; el separador no realiza esa conversión.
- Confundir carpetas hermanas llamadas
fotosyfotos2.El separador exige un límite de componente: fotos2 no empieza por fotos seguido de separador.
- Que dos rutas iguales sean rechazadas como coincidentes.
Dos rutas iguales siguen coincidiendo tras añadirles el mismo separador.
Repasar: RA3, requisito 5. Caso conceptual; no requiere acceso al disco.
Buscar el siguiente nombre libre
RA3 prueba el nombre original y, si existe, sufijos _1, _2, etc. En la carpeta destino solo existen notas.txt y notas_2.txt. ¿Qué nombre debe elegir para otro notas.txt?
-
notas_1.txtEs el primer candidato libre; no hace falta elegir un sufijo mayor que todos los existentes.
-
notas_3.txtEse nombre estaría libre, pero no es el primero según el procedimiento indicado.
-
notas.txtYa existe y elegirlo incumpliría la condición de no sobrescribir.
-
notas.txt_1El sufijo debe ir antes de la extensión, no después de ella.
Repasar: RA3, requisito 6. Caso conceptual con estado del destino explícito.
Olvidar acumular el retorno de una subcarpeta
¿Qué imprime esta simplificación de dos niveles, sin acceso al disco?
def recorrer(nivel, h): if nivel == 0: h.append("fichero") return 4 total = 0 recorrer(nivel - 1, h) return totalh = []print(recorrer(1, h), h)-
4 ['fichero']El retorno 4 de la llamada interna se ignora: no se suma a total.
-
0 []Aunque se pierdan los bytes devueltos, la mutación de la lista compartida sí permanece.
-
None ['fichero']La llamada exterior sí tiene return: devuelve su total local, que vale 0.
-
0 ['fichero']El historial registra el archivo, pero faltaría acumular el retorno de la subllamada para sumar sus bytes.
Repasar: RA3, requisitos 7 y 8.
Elegir iteración o recursividad con criterio
Una función calcula Fibonacci mediante f(n - 1) + f(n - 2) sin guardar resultados previos. Otra usa un bucle con dos acumuladores. Para valores crecientes de n, ¿qué explica la desventaja de esta versión recursiva?
- Python convierte todos sus resultados a float.
La recursividad no cambia por sí misma el tipo numérico.
- Repite subproblemas y mantiene llamadas pendientes en la pila.
El árbol ingenuo recalcula términos y la profundidad añade memoria; no implica que toda recursión sea siempre peor.
- El bucle no necesita ninguna operación aritmética.
La versión iterativa también suma para generar cada término.
- La versión recursiva es incapaz de alcanzar sus casos base.
Con los casos base correctos para 0 y 1 sí termina; el problema indicado es el trabajo repetido.
Repasar: T c (Fibonacci, pila y comparación con iteración). Caso conceptual; no se pide cronometrar.
Progreso del cuestionario
0 / 0 preguntas respondidas (0%)
0 correctas
¡Cuestionario completado!
0%
0 / 0 correctas
Tiempo: