Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Problema con Herencia
#1
Buenas tardes,

Como siempre, uno más que es nuevo en python y que tiene problemas. Bueno pues es cierto, y llevo una semana con este problema.
Lo primero gracias de antemano.
En este script que estoy cansado de repetir, me encuentro con fallos a los  que no les encuentro solución.
Tengo dos dudas, la primera es que dada una clase Automóvil y su heredera Vehículo...con los atributos heredados, intento agregar datos de 'marca', 'modelo y 'año', pero a la hora de agregar los datos me sustituye lo que ya tengo en el diccionario por el último vehículo introducido, es decir, me sale el ultimo vehículo introducido tantas veces, como agrego un vehículo.
Y el otro problema(seguro que hay muchos mas) es en el cuerpo main(), tengo que poner varias veces las opciones presentadas por pantalla para que coja la opción, seguramente el error esta en el while, pero no logro averiguar el por qué de introducir varias veces las opciones.

Adjunto un zip con el .py y además lo copio aquí:

Código:
class Automovil:

  def __init__(self, marca, modelo, ano):
    self.marca = marca
    self.modelo = modelo
    self.ano = ano

  def __str__(self):
    return f' Marca: {self.marca}, Modelo: {self.modelo}, Año: {self.ano}'


class Vehiculo(Automovil):

  def __init__(self, marca, modelo, ano):
    super().__init__(marca, modelo, ano)
    self.lista = []
    self.dic = {}

  '''
  vamos a agregar cohes nuevos
  '''

  def update(self, item1, item2, item3):
   
    self.dic['Marca'] = item1
    self.dic['Modelo'] = item2
    self.dic['Año'] = item3
    self.dic.update(self.dic)
    self.lista.append(self.dic)
    print(self.lista)
  def __str__(self):
    return f' Marca: {self.marca}, Modelo: {self.modelo}, Año: {self.ano}'
 
   

  def __str__(self):
    return f' Marca: {self.marca}, Modelo: {self.modelo}, Año: {self.ano}'

  '''
  vamos a llamar al metodo buscar
  '''

  def buscar(self, iter1):
    for i in self.lista:
      if i['Modelo'] == iter1:
        print(i)
      elif i['Modelo'] != iter1:
        print('No se encontro el vehiculo\n')
    return main()

  '''
  vamos a llamar al metodo eliminar
  '''

  def eliminar(self, del1):
    for i in self.lista:
      if i['Modelo'] == del1:
        self.lista.remove(i)
        print('se elimino con exito')
      else:
        print('No se encontro vehículo.\n')
    return main()


agregar = Vehiculo('', '', '')
'''
funcion que busca
'''


def search():

  s_marca = input('Que marca desea buscar?\n')
  agregar.buscar(s_marca)
  return agregar.buscar


'''
funcion que agrega
'''


def agregar_vehiculo():
  m_marca = input('Introduce vehiculo:')
  m_modelo = input('Introduce modelo: ')
  m_ano = int(input('Introduce Año de venta: '))
  agregar.update(m_marca, m_modelo, m_ano)
  return main()


def main():

  while True:
    print('Bienveniodo al Concesionario.')
    print('A.- Buscar Vehículo')
    print('B.- Agregar Vehículo')
    print('C.- Eliminar Vehículo')
    print('S.- Salir')
    print('Elige una opcion: ')
    if input().upper() == 'A':
      s_marca = input('Que marca desea buscar?\n')
      agregar.buscar(s_marca)
      return agregar.buscar

    elif input().upper() == 'B':
      agregar_vehiculo()
     
      print(agregar.lista)
      print('\n')
    elif input().upper() == 'C':
      del_vehiculo = input('Qué Vehículo quiere eliminar?\n')
      agregar.eliminar(del_vehiculo)
      print(agregar.lista)
    elif input().upper() == 'S':
      print('Gracias')
      exit()


main()
Responder
#2
Hola, Andy, bienvenido.

Te sugiero que repases el sentido del "return" dentro de una función. Se usa para establecer un valor de retorno, no para indicar "vovler a tal posición en el código", que parece que es el sentido que le estás dando. Por eso tu programa incurre en tantas repeticiones. Te recomiendo que en las funciones buscar, eliminar, search y agregar_vehiculo, borres la línea que contiene el "return". A partir de ahí vas a ver una gran mejora en el programa y seguro se aclaren otros problemas.

Saludos
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder


Salto de foro:


Usuarios navegando en este tema: 2 invitado(s)