Python - Python. Clases y Objetos.

 
Vista:
sin imagen de perfil

Python. Clases y Objetos.

Publicado por Exequiel (4 intervenciones) el 14/09/2022 05:41:17
Buenas gente, necesito una mano con este problema. Les muestro el enunciado:

La Biblioteca de la Facultad de Ciencias de la Administración necesita una aplicación para
registrar y consultar los Libros con los que cuenta. Los datos a representar son:
Libro
Atributo Tipo de Datos
Número de Inventario int
Título str
Autor Autor
Categoría Categoría
Año de Publicación int
Autor
Atributo Tipo de Datos
Apellido str
Nombre str
Categoria (Aerea de Conocimiento)
Atributo Tipo de Datos
Nombre str

a) Programe las clases que considera necesarias para dar solución al problema
planteado.
b) Modifique las clases creadas en el punto anterior agregando:
i. Un constructor que reciba por parámetro valores para inicializar cada una de las
propiedades o atributos.
ii. El método especial __str__() que transforme en un único string los valores que
configuran el estado actual del objeto.
iii. El método especial __eq__() que indique cuando dos objetos de la misma clase
son iguales.
c) Cree un archivo con nombre libros_cliente.py y dentro de él:
i. Programe las siguientes funciones:
1. imprimir(libros : list) → None que imprima los datos de la lista pasada por
parámetro.
2. filtrar_por_categoria(libros : list, cat : Categoria) → list que
retorne todos los libros cuya categoría coincide con la pasada por parámetro.
3. filtrar_por_autor(libros : list, autor : Autor) → list que devuelva los
libros cuyo autor coincide con el pasado por parámetro.
4. filtrar_por_anio(libros : list, anio : int) → list que devuelva los libros cuyo año de publicación coincide con el pasado por parámetro.
ii. En la sección principal del programa:
1. Cree al menos 3 instancias de Libro.
2. Ponga a prueba TODAS las funciones programadas en el punto anterior.

Y aquí les paso como estoy resolviendo el ejercicio:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class Libro:
 
    def __init__(self,inventario,titulo,autor,categoria,publicacion):
        self.inventario = inventario
        self.titulo = titulo
        self.autor = autor
        self.categoria = categoria
        self.publicacion = publicacion
 
    def getInventario(self):
        return self.inventario
    def getTitulo(self):
        return self.titulo
    def getAutor(self):
        return self.autor
    def getCategoria(self):
        return self.categoria
    def getPublicacion(self):
        return self.publicacion
 
    def mostrarLibro(self):
        print("\nNum.Inventario: "+str(self.getInventario())+"\nTitulo: "+self.getTitulo()+"\nAutor: "+self.getAutor()+"\nCategoria: "+self.getCategoria()+"\nAño.Publicacion: "+str(self.getPublicacion()) )
 
inventario = input("Por favor ingresar numero de inventario: ")
titulo = raw_input("Por favor ingresar titulo: ")
autor = raw_input("Por favor ingresar autor: ")
categoria = raw_input("Por favo ingresar categoria: ")
publicacion = input("Por favor ingresar año de publicacion: ")
 
e = Libro(inventario,titulo,autor,categoria,publicacion)
e.mostrarLibro()

Lo que necesito es saber si estoy haciendo el codigo bien, y si tengo algun problema podrian corregirlo y
o guiarme para saber como continuarlo el ejercicio, ya que me serviria de ejemplo para los demas ejercicios
que tengo que resolver a futuro. Desde ya muchas gracias!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Python. Clases y Objetos.

Publicado por tincopasan (1082 intervenciones) el 14/09/2022 06:42:17
¿estás usando python anterior a 3.x?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Python. Clases y Objetos.

Publicado por Exequiel (4 intervenciones) el 14/09/2022 12:40:03
La versión no es anterior a 3.x, y el programa que uso es Visual Studio Code, ¿podrias ayudarme?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Python. Clases y Objetos.

Publicado por tincopasan (1082 intervenciones) el 14/09/2022 18:41:35
ok, solo mostraré otras formas y orientaré en algo ,pero no voy a hacer la tarea para eso ya hay otros usuarios.
1
#-*- coding: utf  -8 -*-
linea para poder usar caracteres en español
dicho sea de paso estaría bueno que cuides la ortografía, entre ello, los acentos existen en español

1
2
3
4
5
6
7
class Libro:
    def __init__(self,inventario,titulo,autor,categoria,publicacion):
        self.inventario = inventario
        self.titulo = titulo
        self.autor = autor
        self.categoria = categoria
        self.publicacion = publicacion

esta parte está bien.
el planteo dice:

1
2
ii. El método especial __str__() que transforme en un único string los valores que
configuran el estado actual del objeto.

para eso:

1
2
3
4
5
6
7
8
def  __str__(self):
        return f"""
Inventario: {self.inventario}
Título: {self.titulo}
Autor:{self.autor}
Categoría:{self.categoria}
Año de publicación:{self.publicacion}
"""

es buena práctica devolver algo en las funciones, no solo mostrar algo por pantalla


1
2
3
4
5
6
while True:
    try:
        inventario = int(input("Por favor ingresar el número de inventario: "))
        break
    except:
        inventario = print("¡Atención! No ingresó un número ")

una forma de verificar que lo ingresado sea un entero, en python 3 se usa la función int() para parsear una cadena a entero

1
titulo = raw_input("Por favor ingresar titulo: ")
raw_input no existe en python 3

1
2
3
4
titulo = input("Por favor ingresar el título: ").capitalize()
autor = input("Por favor ingresar el autor: ").capitalize()
categoria = input("Por favor ingresar categoría: ").capitalize()
publicacion = input("Por favor ingresar el año de publicación: ")

si te fijas agregué la función capitalize, no es obligatoria, pero mejora la visualización en caso de que el usuario no use mayúsculas

1
2
e = Libro(inventario,titulo,autor,categoria,publicacion)
print(e)
usé tu misma variable, pero no es bueno usar variables sin un sigificado aparente, después dificulta leer el código, de última sería mejor libro01 por ejemplo
y ahora lo retornado por la función __str__ si necesito imprimirla, en resumen el código hasta ahora sería:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#-*- coding: utf  -8 -*-
class Libro:
    def __init__(self,inventario,titulo,autor,categoria,publicacion):
        self.inventario = inventario
        self.titulo = titulo
        self.autor = autor
        self.categoria = categoria
        self.publicacion = publicacion
 
    def  __str__(self):
        return f"""
Inventario: {self.inventario}
Título: {self.titulo}
Autor:{self.autor}
Categoría:{self.categoria}
Año de publicación:{self.publicacion}
"""
while True:
    try:
        inventario = int(input("Por favor ingresar el número de inventario: "))
        break
    except:
        inventario = print("¡Atención! No ingresó un número ")
 
titulo = input("Por favor ingresar el título: ").capitalize()
autor = input("Por favor ingresar el autor: ").capitalize()
categoria = input("Por favor ingresar categoría: ").capitalize()
publicacion = input("Por favor ingresar el año de publicación: ")
 
e = Libro(inventario,titulo,autor,categoria,publicacion)
print(e)

Ya podrías hacer otra clase para el autor, es básicamente lo mismo, crear el archivo nombre libros_cliente.py y definir las funciones y parámetros que piden, después vemos que está faltando.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar