[ Foro de Python ]

Duda Python

20-Nov-2022 22:59
Invitado (AYUDA PYTHON)
2 Respuestas

alguien me podrá ayudar a resolver el siguiente problema?

Una inmobiliaria de una ciudad maneja una lista de inmuebles como la siguiente:
[{‘año’: 2000, ‘metros’: 100, ‘habitaciones’: 3, ‘garaje’: True, ‘zona’: ‘A’}, {‘año’: 2012, ‘metros’: 60, ‘habitaciones’: 2, ‘garaje’: True, ‘zona’: ‘B’} {‘año’: 1980, ‘metros’: 120, ‘habitaciones’: 4, ‘garaje’: False, ‘zona’: ‘A’}, {‘año’: 2005, ‘metros’: 75, ‘habitaciones’: 3, ‘garaje’: True, ‘zona’: ‘B’}, {‘año’: 2015, ‘metros’: 90, ‘habitaciones’: 2, ‘garaje’: False, ‘zona’: ‘A’}]
Permitir hacer búsqueda de inmuebles en función de un presupuesto dado y devolver otra lista con los inmuebles cuyo precio sea menor o igual que el dado. Los inmuebles de la lista que se devuelva deben incorporar un nuevo par a cada diccionario con el precio del inmueble, donde el precio de un inmueble se calcula con la siguiente fórmula en función de la zona:
Zona A: precio = (metros * 1000 + habitaciones * 5000 + garaje * 15000) * (1+antiguedad/100)
Zona B: precio = (metros * 1000 + habitaciones * 5000 + garaje * 15000) * (1+antiguedad/100) * 1.5


21-Nov-2022 22:10
Invitado (miguel)

hola ayuda

que parte del ejercicio no te funciona ??

que llevas hecho hasta ahora ??

saludos ;-)


01-Dec-2022 14:37
Invitado (ayudante)

Estimado qué tal... arrancando por el principio, hay algunos pequeños errores en su lista (posiblemente haya hecho copy paste, por eso cabe la observación para que Ud lo corrija en su código)

la lista debería ser:

data = [{
'año': 2000,
'metros': 100,
'habitaciones': 3,
'garaje': True,
'zona': 'A'
}, {
'año': 2012,
'metros': 60,
'habitaciones': 2,
'garaje': True,
'zona': 'B'
}, {
'año': 1980,
'metros': 120,
'habitaciones': 4,
'garaje': False,
'zona': 'A'
}, {
'año': 2005,
'metros': 75,
'habitaciones': 3,
'garaje': True,
'zona': 'B'
}, {
'año': 2015,
'metros': 90,
'habitaciones': 2,
'garaje': False,
'zona': 'A'
}]

Por otro lado y ya avanzando sobre el tema...una ayuda puede ser que para acceder a los datos de su lista, puede hacerlo con la siguiente mecánica:

data[4]['metros']

Esto por ejemplo, accede al 5to elemento (porque cuenta del 0 al 4 y por eso se pone [4]) y expone el valor del elemento 'metros'. Por lo tanto, lo anterior es igual a 90 y el tipo de dato es int.
A medida que vaya accediendo a distintos datos, cada uno tendrá su tipo...en su lista algunos son boolean, int, str...Ud seguramente ya sabrá reconocer tipo de datos

Así debe ir accediendo para conseguir el dato que necesite dependiendo del caso.

Por otro lado, hay unas variables que Ud indica por ejemplo "Zona B". Esto debe escribirla como un nombre normalizado...por ejemplo zona_a, zona_A, zonaA. Si Ud escribe zona separado de la letra, python indicará un error en esa línea diciendo que no entiende qué es zona y qué es A...

Para hacer otra lista, busque cómo mecanizar el método append para agregar elementos de la siguiente forma:

lista[...][...].append(elemento_esperado)

Utilice métodos para ordenar el código. Los mismos podrán o no retornar datos en el caso que Ud necesite y de acuerdo a cómo lo organice. Y hay un esquema clave que por lo general se utiliza que es:

1) importaciones
2) métodos que validen datos o situaciones particulares finitas
3) métodos gruesos, cálculos y determinaciones grandes
4) menú de opciones cíclico con opción de Salir con una tecla ingresada
5) método de partida (póngale un nombre y llámelo desde el punto 5)
6) if __name__ == '__main__':  
       llamada_método_punto4()

Para hacerlo más "friendly", acostumbrese a validar los datos de ingreso por teclado en el punto 2. Por ejemplo, si Ud solicita ingresar una edad (es int), pero se ingresa '32w' por accidente, eso le clavará literalmente su hermoso y extenso código. Todos los ingresos input() por teclado son del tipo str. Realice try-except´s para castear estos datos. Por ejemplo, la siguiente mecánica es extensa pero sirve para explicarlo:

import sys
from datetime import datetime

def exit():
   print("\n...Saliendo")
   sys.exit(0)
   
def check_data(years):
   if(len(years) != 0):
       years = int(years)
       return years
   return 0

def birth_year(years):
   years = int(years)
   year_now = datetime.today().year
   return year_now-years
       
def display_menu():
   while(True):
       print("Ingrese su edad o ingrese 'x' para salir: ")
       years = input()
       if(years == 'x'):
           exit()
       try:            
           print(f'\nSu edad es : {check_data(years)} años')
           print(f'\nY nació en el año {birth_year(years)}\n')
       except:
           print("\nError al procesar edad...intente nuevamente\n")

def main():
   display_menu()

if __name__ == '__main__':    
   main()

Puede pegar esto un una nueva página de su ide y comenzar a probar para entenderlo
Saludos y suerte con eso.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)