|
Mostrar Mensajes
|
Páginas: 1 2 [3] 4 5 6 7 8 9
|
22
|
Programación / Scripting / Re: Objetos imprimen None
|
en: 10 Enero 2023, 05:01 am
|
veamos: 1)que raro que usas return en casi todas las funciones y justo esa tiene un print. Es un error pésimo usar funciones sin que retornen algo, de ahí el none. 2) está bien que estás empezando con el lenguaje pero hay muchas cosas innecesarias, muchas faltantes y lo peor una mala lógica en lo que esperas lograr, por ejemplo imaginate que tenés que agregar miles de productos, no sirve declararlos como lo estás haciendo, para eso existe como mínimo los nodos y los árboles, aunque es otro tema anda viendo otra forma de hacer lo mismo. 3)tengo un ratito y como estoy aburrido cambiaré algunas cosas para ver si te sirven de guía: class Producto: contador_productos = 0 def __init__(self,nombre: str, precio: float): self._id = Producto._generar_id() self._nombre = nombre self._precio = self._verificar_precio(precio) @staticmethod def _generar_id(): Producto.contador_productos += 1 return Producto.contador_productos def __str__(self): return f'{self._id},{self._nombre},{self._precio}' def _verificar_precio(self,precio): return precio if precio > 0 else -1 def main(): a = Producto("Mouse",1700) b = Producto("Teclado",8000) c = Producto("Monitor",15000) print(f"""{a._id},{a._nombre},{a._precio} {b._id},{b._nombre},{b._precio} {c._id},{c._nombre},{c._precio} \n""") print(f"{a}\n{b}\n{c}") if __name__ == '__main__': main()
Donde obtenés lo mismo, agregando solo una función y eliminando varias, obviamente los print del main son repetitivos ya que ambos obtienen lo mismo, pero como dije antes es una muy mala idea la forma en que estas creando los objetos.
|
|
|
24
|
Programación / Scripting / Re: Primeros pasos con programación orientada a objetos(POO)
|
en: 1 Enero 2023, 00:43 am
|
Hola Daniel: vivo en un país gobernado por ladrones,corruptos e inútiles que mantienen vagos y favorecen a ladrones, han robado los cables de internet así que lo hago desde el télefono y es un asco, pero te diré: 1)tienes que pensar y entender bien cuando es mejor usar clases y cuando es innecesario 2)si entendiste lo básico es crear la clase y cada función es un método 3)en lo personal uso clases si hay herencia ,combinaciones,repeticiones, polimofirsmo, etc 4)te dejo una orientación, para que vayas viendo la aplicación en este caso. 5) obvio no haré todo, te lo dejo para que practiques y cualquier duda consultes. #-*- coding: utf -8 -*- import os class Archivo: def __init__(self,nombre="Ortografia.txt"): self.nombre = nombre self.palabras= open(nombre).readlines() if os.path.exists(nombre) else [] self.palabras = [palabra.strip() for palabra in self.palabras] def buscar_palabra(self,buscada): if buscada in self.palabras: return True return False def principal(): lista = Archivo() palabra = lista.buscar_palabra(input("Ingrese la palabra a corregir...: ")) if palabra: print(f'La palabra existe en el diccionario y es correcta.') if __name__ == "__main__": principal()
|
|
|
25
|
Programación / Scripting / Re: Generadores y yield en Python…
|
en: 18 Diciembre 2022, 20:26 pm
|
Bueno, se ve que hay muchos "programadores" que dan su opinión, así que no lo haré, pero te comento algo que ya vas descubriendo: los generadores no son para ahorrar "tiempo", al contrario son más lerdos que la compresión de listas por ejemplo, sirven para ahorrar memoria, en grandes cantidades dependiendo de la dsiponibilidad de ella sin el uso de generadores la memoria colapsa. hay varias formas de crear generadores. para medir el uso de memoria se usa uno de los métodos que trae el módulo sys además hay otras formas de medir el "tiempo" la que estás usando es la más básica que abunda en la red. import sys dobles_lc = [num **2 for num in range(1,5000)] dobles_ge = (num **2 for num in range(1,5000)) print(sys.getsizeof(dobles_lc)) print(sys.getsizeof(dobles_ge))
En ese ejemplo creo dos "listas" una con por compresión la primera y la segunda con generadores después imprimo la memoria que ocupa cada una y ahí verás la diferencia que ocupan. Aumenta el tamaño y seguí comparando. Espero que te oriente al uso real de los generadores
|
|
|
27
|
Seguridad Informática / Análisis y Diseño de Malware / Re: 4n4lDetector v1.8
|
en: 7 Diciembre 2022, 05:57 am
|
Lo estuve mirando: 1)Me parecen muchas líneas para el Entry point, con las 3 primeras sobran 2) Quizá poner los offset de las direcciones 3)Dentro de las opciones no figura para aumentar el tamaño de fuente o no lo vi, solo los colores. 4) Sé que a los "programadores" les gustan las aplicaciones mononeuronales en inglés, pero hay personas que también disfrutan del español, opción que no existe.
|
|
|
29
|
Programación / Scripting / Re: lista de palabras agrupada por su letra inicial(diccionario)
|
en: 25 Noviembre 2022, 15:59 pm
|
Daniel: mil disculpas, me olvido cuando pongo un código que no tienen porque conocer los métodos. for x in palabras: if x[0] not in diccionario:
x[0] es un slice(rebanada), o sea tomo la primer letra de la palabra, para no tener que hacer una lista con las letras, y sino está como clave en el diccionario: diccionario.setdefault(x[0],[x])
setdefault es un método de los diccionarios, verifica si una clave existe y sino está la agrega, con un valor deterninado en este caso una lista con la palabra. en caso contrario: else: diccionario[x[0]]+=[ x]
asigno a la clave un nuevo valor que es agregar la palabra. sonará raro pero lo hice así porque me pareció más entendible, porque en realidad en mis códigos lo haría con menos líneas: #-*- coding:utf-8 -*- palabras = ['mesa', 'móvil', 'barco', 'coche', 'avión', 'bandeja', 'casa', 'monitor', 'carretera', 'arco'] diccionario={} for x in palabras: diccionario.setdefault(x[0],[]) diccionario[x[0]]+=[ x] for clave, valor in diccionario.items(): print(clave, ":", valor)
en donde es lo mismo sin necesidad de los condicionales.
|
|
|
30
|
Programación / Scripting / Re: lista de palabras agrupada por su letra inicial(diccionario)
|
en: 25 Noviembre 2022, 04:53 am
|
No sé si definir como mejor o peor, pero hay muchas formas de lograr eso: #-*- coding:utf-8 -*- palabras = ['mesa', 'móvil', 'barco', 'coche', 'avión', 'bandeja', 'casa', 'monitor', 'carretera', 'arco'] diccionario={} for x in palabras: if x[0] not in diccionario: diccionario.setdefault(x[0],[x]) else: diccionario[x[0]]+=[ x] for clave, valor in diccionario.items(): print(clave, ":", valor)
|
|
|
|
|
|
|