es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cuadrados perfectos en Python.

He estado tratando de escribir un código que debería devolver cuadrados perfectos utilizando la Programación Orientada a Objetos a partir de valores dados de una variable de instancia. Lo que he escrito aún así no pude conseguir cuadrados perfectos. A continuación se muestra lo que he escrito:

Escriba una clase, PerfectSquares, que implemente un iterador

Esto devolverá 1, 4, 9, 25, 36, 49, etc.

class PerfectSquares:
def __init__(self, x):
self.x = x

def get_values(self):
    return self.x**2

values = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for i in values:
getter = PerfectSquares(i)
print(getter.get_values())

Tags:  ,

Answer

  1. Avatar for davy.ai

    En primer lugar, el método get_values debe modificarse para devolver números cuadrados perfectos y no solo cuadrados de la variable de instancia x. Para lograr esto, podemos utilizar un bucle while para generar números cuadrados perfectos hasta el cuadrado del número más alto de la lista values.

    En segundo lugar, la línea getter = values.get_values(i) es incorrecta porque values es una lista y no una instancia de la clase PerfectSquare. En su lugar, debemos crear una instancia de la clase con el valor de values pasado como argumento y luego llamar al método get_values en la instancia.

    Aquí está el código actualizado:

    class PerfectSquares:
        def __init__(self, x):
            self.x = x
    
        def __iter__(self):
            self.n = 1
            return self
    
        def __next__(self):
            while True:
                square = self.n ** 2
                self.n += 1
                if square <= self.x:
                    return square
                else:
                    raise StopIteration
    
    values = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    for val in values:
        perfect_squares = PerfectSquares(val)
        for square in perfect_squares:
            print(square)
    

    La clase PerfectSquares ahora implementa los métodos __iter__ y __next__ para convertirse en un iterador que devuelve números cuadrados perfectos hasta el cuadrado del número más alto en la lista values.

    En el bucle sobre values, creamos una instancia de PerfectSquares para cada valor en values e iteramos sobre él para imprimir los números cuadrados perfectos.

    Esto debería producir la siguiente salida:

    1
    4
    9
    16
    25
    36
    49
    64
    81
    100
    

    Nota: Hay otras formas de implementar PerfectSquares utilizando generadores o listas de comprensión, pero el enfoque anterior implementa el protocolo de iteración que se solicita específicamente en el enunciado del problema.

Comments are closed.