FP2 segundo cuestionario
|
|
Título del Test:
![]() FP2 segundo cuestionario Descripción: segundoparcial temario |



| Comentarios |
|---|
NO HAY REGISTROS |
|
Empareje cada descripción con el método mágico correspondiente. define el comportamiento del operador mayor o igual >=. define el comportamiento del operador menor que <. define el comportamiento del operador de desigualdad !=. define el comportamiento del operador mayor que >. define el comportamiento del operador de igualdad ==. define el comporamiento del operador menor o igual <=. Qué decorador debemos usar para sobrecargar automáticametne en una clase todos los operadores de comparación definiendo solo el método __eq__ y otro de los métodos de comparación enriquecida?. ¿Qué método mágico implementa el comportamiento del operador unario -?. __neg__(self). __invert__(self). __minus__(self). Empareje cada operador binario con el método mágico correspondiente. -. *. /. +. ¿Cuál es el nombre del método de operador reflejado correspondiente al operador de división /?. Python permite tener dos funciones diferentes con el mismo nombre en el mismo espacio de nombres como una forma de polimorfismo. Verdadero. Falso. A la vista del siguiente código: class Parallelogram: def __init__(self, side1, angle = 90, side2 = None): self.side1 = side1 if side2 == None or side1 == side2: if angle != 90: self.kind = "rhombus" self.angle = angle else: self.kind = "square" else: self.side2 = side2 if angle != 90: self.kind = "rhomboid" self.angle = angle else: self.kind = "rectangle" ¿Qué valor muestra la siguiente instrucción? print(Parallelogram(8, 90, 8).kind). rectangle. rhombus. square. rhomboid. A la vista del siguiente código: from fractions import Fraction def numberFunc(number1, number2): if type(number1) == int and type(number2) == int: return Fraction(number1, number2) elif type(number1) == float and type(number2) == float: return complex(number1, number2) ¿Qué valor muestra la siguiente instrucción? print(numberFunc(1, 2.0)). (1+2j). 1/2. None. Marque la afirmación correcta. En Python, un iterador es un tipo especial de bucle, definido usando métodos mágicos. En Python, un iterador es un objeto que devuelve datos, elemento a elemento. En Python, un iterador es un objeto que recorre un rango de números devolviendo uno en cada iteración. ¿Qué métodos deben definirse para que una clase sea un iterador?. iter. __iter__. next. __next__. ¿Qué sentencia debe incluirse en la definición de un generador?. yield. iter. next. Las pruebas de programas tienen como objetivo... depurar los errores presentes en un programa. detectar la existencia de posibles defectos en el código. garantizar que el programa es correcto. Ordene la frase correctamente: Cada para_esos_datos. caso_de_prueba y_un_conjunto_de datos_de_entrada resultados_esperados se_compone_de_un_conjunto_de. Ordene los diferentes tipos de pruebas por su secuencia temporal. 1. 2. 3. 4. ¿Qué pruebas se basan exclusivamente en el conocimiento de la interfaz del código?. de caja blaca. de caja negra. de caja gris. Ordene los pasos de la Prueba del Camino Básico: 1. 2. 3. 4. ¿Cuántos nodos predicado tiene el grafo del flujo de ejecución de la función is_prime? def is_prime(num): if num <= 1: return False if num <= 3: return True if num % 2 == 0 or num % 3 == 0: return False i = 5 while i * num: if num % i == 0 or num % (i + 2) == 0: return False i = i + 6 return True. ¿Cuál es la complejidad ciclomática del la función bubble_sort? def bubble_sort(seq): length = len(seq) for i in range(length): for j in range(0, length-i-1): if seq[j] > seq[j+1] : seq[j], seq[j+1] = seq[j+1], seq[j]. Los conjuntos de datos de prueba se diseñan de forma que... sean menos que el número total de caminos básicos encontrados. no se repita la ejecución de nodos del grafo de flujo de ejecución en diferentes casos de prueba. cumplan la secuencia de condiciones representadas por los arcos salientes de los nodos predicados en cada camino básico. ¿Cuál de las siguientes NO es una técnica pra seleccionar casos de prueba para pruebas de caja negra?. Clases de equivalencia. Camino básico. Valores límite. Las clases de equivalencia son conjuntos de entradas para las que la unidad a probar debe tener un comportamiento distinto. Verdadero. Falso. Las clases de equivalencia no válidas. Representan conjuntos de valores que no son entradas válidas (correctas) para el problema plantaeado. Representan conjuntos de valores para los que la solución no funciona correctamente (funcionamiento no válido). Representan conjuntos de valores para los que la solución no ha sido validada (probada). En desarrollo de software, ¿qué representan las siglas TDD?. Tests Development Delay. Test Driven Development. Test Debugging & Delivery. ¿Las clases de equivalencia representan rangos de valores?. Sí, las clases de equivalencia siempre representan un rango de valores. No, las clases de equivalencias representan conjuntos de valores, no rangos de valores. No, las clases de equivalencia con frecuencia representan un rango de valores, pero no siempre. La técnica de prueba de valores límite se sustenta... ...en que los valores límite son más fáciles de identificar que cualquier otro valor de la clase. ...en que la mayoría de los errores suelen producirse en los valores extremos, o límites de una clase. ...en establecer un límite para la cantidad de valores a probar de cada clase de equivalencia. Al diseñar pruebas para los valores límite de un rango de números reales, debemos tener en cuenta, como factor adicional... Si los valores son positivos o no. No usar divisores negativos. La precisión requerida. ¿Qué factor adicional debemos tener en cuenta cuando diseñamos pruebas para contenedores?. La precisión. El tamaño. La monoticidad. Al probar un método de una clase... Debemos comprobar los cambios en el objeto asociado. No podemos usar los setter ni los getter predefinidos. Debemos comprobar el resultado que devuelve, si lo hay. ¿En qué consiste la técnica "una función, una prueba"?. En que una función solo se puede probar una vez. En desarrollar una función por cada caso de prueba. En desarrollar todas las puebas en una única función. Empareje cada concepto con su descripción. es la unidad individual de prueba, comprueba una respuesta específica a un conjunto particular de entradas. una colección de casos de prueba, conjuntos de pruebas o ambos, se utiliza para agregar pruebas que deben ejecutarse juntas. representa la preparación necesaria para realizar una o más pruebas y cualquier acción de limpieza asociada. organiza la ejecución de las pruebas y recopila y proporciona sus resultados. ¿Cómo se llama la clase de la que deben heredar las clases que implementen casos de prueba basados en unittest?. En la primera línea del informe de pruebas de unittest, una letra 'F' significa que... Ha ocurrido una excepción al ejecutar un caso de prueba. Se ha incumplido un aserto al ejecutar un caso de prueba. La ejecución de un caso de prueba ha ido bien ("Fine"). ¿Cuál de los siguientes métodos de aserto se usa habitualmente de forma diferente al resto?. .assertEqual(). .assertTrue(). .assertRaises(). .assertIs(). Cuando el resultado esperado y el obtenido son de tipo float ¿Qué método de aserto se usa para comprobar que el resultado es correcto?. .assertEqual(). .assertFloatEqual(). .assertAlmostEqual(). Empareje cada método con su descripción. Se ejecuta una sola vez, después de ejecutar todos los tests. Se ejecuta antes de cada test. Se ejecuta una sola vez, antes de empezar la ejecución de los tests. Se ejecuta después de cada test. Una test suite es... Una clase que se usa para implementar casos de prueba. Un conjunto de tests que queremos ejecutar juntos. Un conjunto de tests definidos en el mismo módulo. Un test loader sirve para... Generar un informe de pruebas. Ejecutar un conjunto de pruebas. Crear una test suite. Ordene la frase correctamente: objetos ,_generalmente_denominados ,_que_no_referencian_a_otros_objetos,_así_como_al_menos_un_objeto_inicial_(según_la_estructura_puede_denominarse_primero,_frente,_cima,_raíz,_etc.)_que_es_referenciado_desde_"fuera"_de_la_estructura_y_sirve_como_"punto_de entrada Una_estructura_encadenada_está_formada_por_un_conjunto_de nodos "_a_la_misma terminales de_la_estructura,_que_se_referencian_unos_a_otros._Deben_existir_objetos. Un objeto de una clase puede tener atributos que sean referencias a otros objetos de la misma clase. Verdadero. Falso. Usando listas encadenadas es más fácil acceder a un elemento individual que usando arrays. Verdadero. Falso. Dadas las siguientes definiciones de clase: class LinkedList: class Node: def __init__(self, value, next_node = None): self.value = value self.next_node = next_node def __init__(self): self.__first = None Complete el siguiente método para calcular la longitud de una lista encadenada: def __len__(self): count = 0 current = self.__1____ while current != __2___ : count += 1 current = current.__3___ return count. 1. 2. 3. Seleccione la afirmación correcta. La inserción por delante es más eficiente en un array list. La inserción por delante es igual de eficiente en ambas implementaciones. La inserción por delante es más eficiente en una lista encadenada. Dadas las siguientes definiciones de clase: class LinkedList: class Node: def __init__(self, value, next_node = None): self.value = value self.next_node = next_node def __init__(self): self.__first = None self.__len = 0 Complete el método para insertar un valor al final de la lista: def append(self, value): new_node = self.Node(__1___ ) if self.___2____ == None: self.__first = new_node else: current = self.___3____ while current.___4___ != None: current = current.next_node current.next_node = ____5______ self.__len += 1. 1. 2. 3. 4. 5. Dadas las siguientes definiciones de clase: class LinkedList: class Node: def __init__(self, value, next_node = None): self.value = value self.next_node = next_node def __init__(self): self.__first = self.__last = None self.__len = 0 Complete el método para insertar un valor al final de la lista: def append(self, value): new_node = self.Node(value) if self.____1____ == None: self.__first = new_node else: self.__last.___2_____ = new_node self.__last = _____3_____ self.__len += 1. 1. 2. 3. Complete el siguiente código para insertar un nodo en una posición, indicada por un índice, en una lista encadenada: def insert(self, where, value): if where < 0 or where > len(self): # where: posición donde se ha de insertar raise IndexError else: if where == 0: self.__first = self.Node(value, ____1____ ) elif where == len(self): new_node = self.Node(value) self.__last.next_node = new_node self._____2_____ = new_node else: current = self.__first current_pos = 1 while current_pos < where: current = current.next_node current_pos += 1 _____3____.next_node = self.Node(value, current.____4___ ) self.__len += 1. 1. 2. 3. 4. Complete el siguiente código para borrar el primer elemento de una lista encadenada: def delete_first(self): if self.__first is not None: self.___1___ = self.__first.____2____ self.__len -= 1 if sel.__len == 0: self.__last = ___3___. 1. 2. 3. Complete el siguiente código para borrar el último elemento de una lista encadenada: def delete_last(self): if self.__len > 0: if self.__len == 1: # Si solo hay un elemento, la lista queda vacía self.__last = self.__first = None else: # Hay que encontrar el penúltimo elemento para convertirlo en último prev = self.__first current = self.__first.next_node while current != self.__last: prev = ___1___ current = current.next_node # Convertimos el penúltimo elemento en último prev.next_node = ___2____ self.__last = ____3___ self.__len -= 1. 1. 2. 3. Complete el siguiente método para borrar un elemento, de una lista encadenada, especificando su posición. def delete(self, index): # index: posición el elemento a borrar if index < 0: # Ajustamos los índices negativos index = self.__len + index if index in range(self.__len): if index == 0: # Borrar el primer elemento self.__first = self.___1___.next_node self.__len -= 1 if self.__len == 0: self.__last = None else: # Hay que encontrar el nodo anterior al que queremos borrar prev = self.__first current = self.__first.__2__ current_index = 1 while current_index != index: prev = current current = current.next_node current_index += 1 # Saltamos el nodo a borrar prev.next_node = ____3____ if current == ___4___ : # Por si es el último nodo self.__last = prev self.__len -= 1 else: raise IndexError. 1. 2. 3. 4. En Python, para hacer que un contenedor sea iterable basta con.... ...hacer que herede de un contenedor predefinido (Tuple, List, Dict,...). ...implementar el método __next__() como una función generadora. ...implementar el método __iter__() como una función generadora. |





