10 de Noviembre de 2022, PyAr Meetup
@sashakile
🎁
👾 ✉
🤖 ✉
👤 📦
🦆 🔊
ente mensaje
Necesitamos un sistema para clasificar a los Entes
Ente
nuevo -> { }
interactuar: x -> {
x otroMensaje: yo
}
combinarCon: x e: y -> {
[yo, x, y]
}
MiEnteCantor <: Ente
contar -> { ... }
cantar: partitura -> { ... }
Caracteres
<: Ente
Cadenas de caracteres
<: Ente
Números
<: Ente
Fotos
<: Ente
Archivos
Matrices
URLs
Patos
Conexiones
Colecciones
Bits
> "Hola Mundo!"
> "Hola Mundo!" tamaño
11
> "Hola Mundo!" tamaño sumar: 31
Dada una [premisa]
[consecuente]
Control de la ejecución
Booleano <: Ente
negar {}
y: otro {}
o: otro {}
Verdadero <: Booleano
negar {}
y: otro {}
o: otro {}
Verdadero <: Booleano Falso <: Booleano
negar {} negar {}
y: otro {} y: otro {}
o: otro {} o: otro {}
booleano y: otroBooleano
y |
Verdadero | Falso |
---|---|---|
Verdadero | ||
Falso |
booleano o: otroBooleano
o |
Verdadero | Falso |
---|---|---|
Verdadero | ||
Falso |
Tabla: Empresa de Agua Potable 💧
"""
Edificacion, Id, Tipo
casa, 0, domestico
departamento, 1, domestico
departamento, 2, comercial
departamento, 3, oficina
casa, 4, oficina
"""
lineas = documento.splitlines()
headers = [ e.strip() for e in lineas[0].split(",") ]
total = 0
for linea in lineas[1:]:
if len(linea.strip()) > 0:
fila = linea.split(",")
valores = [ e.strip() for e in fila ]
ed, id_, tipo= valores
escala = 1.0
if ed == "casa":
total += 1.0
elif ed == "departamento":
total += 0.5
else:
print(f"Desconocido:{valores}")
Tabla: Empresa de Agua Potable 💧
"""
Edificacion, Id, Tipo
casa, 0, domestico
departamento, 1, domestico
departamento, 2, comercial
departamento, 3, oficina
casa, 4, oficina
"""
"oficina": 0.8,
"comercial": 5.0,
"domestico": 1.0,
precios = {"oficina": 0.8, "comercial": 5.0, "domestico": 1.0}
for linea in lineas[1:]:
if len(linea.strip()) > 0:
fila = linea.split(",")
valores = [ e.strip() for e in fila ]
ed, id_, tipo= valores
escala = 1.0
if ed == "casa":
total += 1.0 * precios[tipo]
elif ed == "departamento":
total += 0.5 * precios[tipo]
else:
print(f"Desconocido:{valores}")
Tabla: Empresa de Agua Potable 💧
"""
Edificacion, Id, Tipo, Consumo
casa, 0, domestico, 3.1
departamento, 1, domestico, 11.4
departamento, 2, comercial, 0.1
departamento, 3, oficina, 10.0
casa, 4, oficina, 1.0
"""
for linea in lineas[1:]:
if len(linea.strip()) > 0:
fila = linea.split(",")
valores = [ e.strip() for e in fila ]
ed, id_, tipo, consumo = valores
escala = 1.0
if ed == "casa":
if consumo > 1.0:
escala = 5.0
else:
escala = 1.1
total += 1.0 * escala * precios[tipo] * consumo
elif ed == "departamento":
if consumo > 1.0:
escala = 3.0
else:
escala = 1.2
total += 0.5 * escala * precios[tipo] * consumo
else:
print(f"Desconocido:{valores}")
Tabla: Empresa de Energía Eléctrica ⚡
"""
Edificacion, Id, Tipo, Consumo
casa, A0, domestico, 6.1
departamento, A1, domestico, 22.4
departamento, A2, comercial, 0.2
departamento, A3, oficina, 20.0
casa, A4, oficina, 2.0
edificio, A5, oficina, 123.0
"""
Empresa de Agua Potable 💧
Empresa de Energía Eléctrica ⚡
Empresa de Gas Natural 🔥
Empresa de Telefonía ☎
Empresa de Internet 💻
Empresa de …
Casa 🏠
Departamento 🏬
Edificio 🏢
PH 🏘
Terreno 🏜
…
¿Qué podemos hacer para controlar la complejidad?
ALGO
(servicio, edificacion)
ALGO (servicio, edificacion)
(servicio, edificacion)
servicio cobrar: edificacion
???
...
for servicio in servicios:
total = 0
for edificacion in edificaciones:
total += servicio.cobrar(edificacion)
....
servicio cobrar: edificacion
⨉ |
Electricidad | Agua | Gas | … |
---|---|---|---|---|
Casa | ||||
Departamento | ||||
Edificio | ||||
… |
Servicio <: Ente
cobrar: edificacion -> {
}
Servicio <: Ente Edificacion <: Ente
cobrar: edificacion -> {
}
Servicio <: Ente Edificacion <: Ente
cobrar: edificacion -> { consumo: servicio -> {
} }
Servicio <: Ente Edificacion <: Ente
cobrar: edificacion -> { consumo: servicio -> {
edificacion consumo: yo 0.0
} }
Servicio <: Ente Edificacion <: Ente
cobrar: edificacion -> { consumo: servicio -> {
edificacion consumo: yo 0.0
} }
Agua <: Servicio Casa <: Edificacion
cobrar: edificacion -> { consumoDeAgua: servicio -> {
edificacion consumoDeAgua: yo
} }
Servicio <: Ente Edificacion <: Ente
cobrar: edificacion -> { consumo: servicio -> {
edificacion consumo: yo 0.0
} }
Agua <: Servicio Casa <: Edificacion
cobrar: edificacion -> { consumoDeAgua: servicio -> {
edificacion consumoDeAgua: yo
} }
consumoDeGas: servicio -> {
Gas <: Servicio
}
cobrar: edificacion -> {
edificacion consumoDeGas: yo
}
Servicio <: Ente Edificacion <: Ente
cobrar: edificacion -> { consumo: servicio -> {
edificacion consumo: yo 0.0
} }
montoParaCasa: ... -> {...}
Agua <: Servicio Casa <: Edificacion
cobrar: edificacion -> { consumoDeAgua: servicio -> {
edificacion consumoDeAgua: yo servicio montoParaCasa: ...
} }
consumoDeGas: servicio -> {
Gas <: Servicio servicio montoParaCasa: ...
}
cobrar: edificacion -> {
edificacion consumoDeGas: yo
}
edificacion monto: servicio
Tabla: Empresa de Energía Eléctrica ⚡
"""
Edificacion, Id, Tipo, Consumo
casa, A0, domestico, 6.1
departamento, A1, domestico, 22.4
departamento, A2, comercial, 0.2
departamento, A3, oficina, 20.0
casa, A4, oficina, 2.0
edificio, A5, oficina, 123.0
"""
edificaciones = [
Casa(watts=6.1,tipo=Domestico()),
Departamento(watts=6.1,tipo=Domestico()),
Departamento(watts=6.1,tipo=Comercial()),
Departamento(watts=6.1,tipo=Oficina()),
Casa(watts=6.1,tipo=Oficina()),
Edificio(watts=6.1,tipo=Oficina()),
]
linea = "departamento, A1, domestico, 22.4"
fila = linea.split(",")
valores = [ e.strip() for e in fila ]
ed, id_, tipo, consumo = valores
mapa_edificaciones = {
"casa": Casa,
"departamento": Departamento,
"edificio": Edificio,
}
def obtener_edificacion(ed, id_, tipo, consumo, servicio):
if tipo == 'oficina':
t = Oficina()
elif: tipo == 'domestico':
t = Domestico()
else:
t = Comercial()
c = float(consumo)
tipo_consumo = servicio.tipo_consumo()
args = {"tipo":t, tipo_consumo:c}
return mapa_edificaciones[ed](**args)
Las Factories son el lugar a donde los "IF"s van a morir. Sandi Metz
A computer is like a violin. You can imagine a novice trying first a phonograph and then a violin. The latter, he says, sounds terrible. That is the argument we have heard from our humanists and most of our computer scientists.
Computer programs are good, they say, for particular purposes, but they aren’t flexible. Neither is a violin, or a typewriter, until you learn how to use it.
Marvin Minsky, “Why Programming Is a Good Medium for Expressing Poorly-Understood and Sloppily-Formulated Ideas” in Design and Planning, (1967)
Repositorio con ejemplos de código sin condicionales
Para aprender más cosas de este estilo