Conversor de unidades de medida de almacenamiento en Python 3.X

  • 6 Respuestas
  • 459 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado z0mb1es

  • *
  • Underc0der
  • Mensajes: 29
  • Actividad:
    10%
  • Reputación 0
  • recién salido de anonops.
    • Ver Perfil
Hola amigos. Les vengo a dejar un pequeño código que creé hace unos días. La idea original era diseñar un algoritmo para hacer estas conversiones, pero la cabeza no me da para tanto :P. Quería compartir este código con ustedes porque en anteriores ocasiones me han ayudado a mejorarlo, me han dicho que cosas puedo cambiar para tener un código más optimizado, etcétera.

Aquí va:

Código: Python
  1. #!/usr/bin/python
  2. import time
  3. from os import system, name
  4.  
  5. def clear():
  6.     if name == 'nt':
  7.         _ = system('cls')
  8.     else:
  9.         _ = system('clear')
  10.  
  11. def bit2byte():
  12.     x = int(input("Cuantos bits? "))
  13.     y = x / 8
  14.     print(str(y) + " es la cantidad de bytes en " + str(x) + " bits.")
  15.     time.sleep(3)
  16.     clear()
  17. def kbyte2byte():
  18.     x = int(input("Cuantos kilobytes? "))
  19.     y = x * 1024
  20.     print(str(y) + " es la cantidad de bytes en " + str(x) + " kilobytes.")
  21.     time.sleep(3)
  22.     clear()
  23. def mbyte2kbyte():
  24.     x = int(input("Cuantos megabytes? "))
  25.     y = x * 1024
  26.     print(str(y) + " es la cantidad de kilobytes en " + str(x) + " megabytes.")
  27.     time.sleep(3)
  28.     clear()
  29. def gbyte2mbyte():
  30.     x = int(input("Cuantos gigabytes? "))
  31.     y = x * 1024
  32.     print(str(y) + " es la cantidad de megabytes en " + str(x) + " gigabytes.")
  33.     time.sleep(3)
  34.     clear()
  35. def tbyte2gbyte():
  36.     x = int(input("Cuantos terabytes? "))
  37.     y = x * 1024
  38.     print(str(y) + " es la cantidad de gigabytes  en " + str(x) + " bits.")
  39.     time.sleep(3)
  40.     clear()
  41.  
  42. menu = """
  43. [1] Convertir bits a bytes
  44. [2] Convertir kilobytes a bytes
  45. [3] Convertir megabytes a kilobytes
  46. [4] Convertir gigabytes a megabytes
  47. [5] Convertir terabytes a gigabytes
  48. [6] Salir
  49. """
  50.  
  51. the = True
  52. while the is  True:
  53.     print(str(menu))
  54.     opc = (input("Selecciona una opción: "))
  55.     if opc == "1":
  56.         bit2byte()
  57.     elif opc == "2":
  58.         kbyte2byte()
  59.     elif opc == "3":
  60.         mbyte2kbyte()
  61.     elif opc == "4":
  62.         gbyte2mbyte()
  63.     elif opc == "5":
  64.         tbyte2gbyte()
  65.     elif opc == "6":
  66.        
  67.         print("\n\nHasta la próxima <img src="https://underc0de.org/foro/Smileys/default/smiley.gif" alt="&#58;&#41;" title="Sonrisa" class="smiley" />\n\n")
  68.         break
  69.         exit()  
  70.     else:
  71.         print("\nElije una opción valida.\n")
  72.         time.sleep(0.4)
  73.         clear()
  74.  

Sé que está un poco desorganizado y planeo mejorarlo, claro está. Les muestro esto porque es digamos la versión alpha de este proyecto.

Saludos. ;D
Public Yy As String = "\z0mb1es RAT\."
         Public HOST As String = "101.110.010.111"
              Public port As Integer = 8989
                                    Public cap As New CRDP

Desconectado Kirari

  • *
  • Moderador
  • Mensajes: 191
  • Actividad:
    100%
  • Country: ru
  • Reputación 11
  • No dejes que el mundo te corrompa
    • Ver Perfil
    • Baúl para el público
Buenas compañero! Acá le dejo una versión modificada del código que hecho de manera rápida y sencilla para que pueda examinarlo con tranquilidad, incluso te lo he comentado:

Código: Python
  1.  
  2. from os import system, name
  3.  
  4. def clear():
  5.     # Aca no haria falta que cree una variable, solo llame a la funcion system y estaria.
  6.     if name == 'nt':
  7.         system('cls')
  8.     else:
  9.         system('clear')
  10.    
  11.  
  12. # Las operaciones en funciones pueden ser declaradas de esta forma, es más legible.
  13. # Todas las funciones, aceptan como parametro, un valor entero.
  14. # Ya si luego quiere restringir si es cadena o no, es parte de la investigación que deberá hacer usted.
  15. def bit2byte(x):
  16.     return x // 8
  17.    
  18. def convbytes(x):
  19.     return x * 1024
  20.  
  21. # Funcion para verificar si el dato ingresado es un entero    
  22. def ingresar(text):
  23.     error = True
  24.     # Mientras se ingrese erroneamente
  25.     while (error==True):
  26.         try:
  27.             x = int(input(text))
  28.             # Si el dato es correcto, sale del bucle
  29.             error = False
  30.         except ValueError:
  31.             # Se manipula la salida del error en caso de que el dato no sea el correcto
  32.             print("Error, se debe ingresar un numero entero.")
  33.    
  34.     return x
  35.    
  36. # Todo lo que tenga que ver con el menu, esta colocado en esta funcion.
  37. def main():
  38.  
  39.     menu = """
  40.    [1] Convertir bits a bytes
  41.    [2] Convertir kilobytes a bytes
  42.    [3] Convertir megabytes a kilobytes
  43.    [4] Convertir gigabytes a megabytes
  44.    [5] Convertir terabytes a gigabytes
  45.    [6] Salir
  46.    """
  47.    
  48.     print(menu)
  49.    
  50.     # Entrada de usuario
  51.    
  52.     the = ingresar("Selecciona una opción: ")
  53.    
  54.     # Al presionar 6, el programa finaliza
  55.     while the!=6:
  56.        
  57.         if the == 1:
  58.             # Se le pide el ingreso de datos al usuario
  59.             x = ingresar("Cuantos bits? ")
  60.             # Al llamar a la función, se le pasa como argumento la variable x, no hace falta concatenar, puede solo mostrar el resultado
  61.             print("{} es la cantidad de bytes en {} bits.".format(bit2byte(x),x))
  62.            
  63.         elif the == 2:
  64.             x = ingresar("Cuantos kilobytes? ")
  65.             print("{} es la cantidad de bytes en {} kilobytes.".format(convbytes(x),x))
  66.            
  67.         elif the == 3:
  68.             x = ingresar("Cuantos megabytes? ")
  69.             print("{} es la cantidad de kilobytes en {} megabytes.".format(convbytes(x),x))
  70.            
  71.         elif the == 4:
  72.             x = ingresar("Cuantos gigabytes? ")
  73.             print("{} es la cantidad de megabytes en {} gigabytes.".format(convbytes(x),x))
  74.            
  75.         elif the == 5:
  76.             x = ingresar("Cuantos terabytes? ")
  77.             print("{} es la cantidad de gigabytes  en {} terabytes.".format(convbytes(x),x))
  78.    
  79.         else:
  80.             print("Escoja una opción valida.")
  81.        
  82.         input("Presione una tecla para continuar...\n")    
  83.         clear()
  84.         print(menu)
  85.         the = ingresar("Selecciona una opción: ")
  86.    
  87.     # Al salir del bucle, le mostrará el mensaje
  88.     print("\n\nHasta la próxima https://underc0de.org/foro/Smileys/default/smiley.gif\n\n")
  89.    
  90. if __name__ == '__main__':
  91.     # Llamamos a la funcion menu
  92.     main()
  93.  

Espero te sea de utilidad. Saludos!
-Kirari
« Última modificación: Julio 17, 2020, 04:33:13 am por Kirari »
Jamás te contarán la verdadera versión, siempre te dirán la suya... Por eso... Si quieres saber la verdad, debes buscarla tú mismo...

Desconectado tincopasan

  • *
  • Underc0der
  • Mensajes: 7
  • Actividad:
    6.67%
  • Reputación 0
    • Ver Perfil
con que necesidad cuatro funciones que hacen lo mismo?
Código: Python
  1. def kbyte2byte(x):
  2.     y = x * 1024
  3.     return y
  4.  
  5. def mbyte2kbyte(x):
  6.     y = x * 1024
  7.     return y
  8.    
  9. def gbyte2mbyte(x):
  10.     y = x * 1024
  11.     return y
  12.    
  13. def tbyte2gbyte(x):
  14.     y = x * 1024
  15.     return y
  16.  

con una sola es lo mismo, total todas devuelven x * 1024
y deberían verificar que se puede pasar a entero lo ingresado, si el usuario es "malicioso" o "descuidado" si ingresa un valor no convertible qenerara un error no manejado.
además en los print deberían usar formateo de cadenas, si es por claridad de código.
« Última modificación: Julio 17, 2020, 01:51:56 am por tincopasan »

Desconectado Kirari

  • *
  • Moderador
  • Mensajes: 191
  • Actividad:
    100%
  • Country: ru
  • Reputación 11
  • No dejes que el mundo te corrompa
    • Ver Perfil
    • Baúl para el público
@You are not allowed to view links. Register or Login De hecho te doy la razón compañero, lo he hecho rápido y no tomé en cuenta lo de las funciones, con una sola bastaría. En cuanto a lo de verificar también se le puede agregar, pero eso es para investigación del usuario, lo básico estaría, pero ya que modificaré el código, lo agrego.

La modificación ya está hecha. Mis disculpas por ese error, no lo había notado. Muchas gracias @You are not allowed to view links. Register or Login !

-Kirari
« Última modificación: Julio 17, 2020, 02:41:55 am por Kirari »
Jamás te contarán la verdadera versión, siempre te dirán la suya... Por eso... Si quieres saber la verdad, debes buscarla tú mismo...

Desconectado tincopasan

  • *
  • Underc0der
  • Mensajes: 7
  • Actividad:
    6.67%
  • Reputación 0
    • Ver Perfil
no es necesario disculparse, cada uno codifica como quiere, de todas formas para mi gusto escribís código de más, lo haría así :
Código: Python
  1. #-*- coding: utf -8 -*-
  2. from os import system, name
  3.  
  4. def clear():
  5.     # Acá no haría falta que cree una variable, solo llame a la función system y estaría.
  6.     if name == 'nt':
  7.         system('cls')
  8.     else:
  9.         system('clear')
  10.    
  11. valores = {2:["kilobytes","bytes"],3:["megabytes","kilobytes"],4:["gigabytes","megabytes"],5:["terabytes","gigabytes"]}  
  12. # Función para verificar si el dato ingresado es un entero    
  13. def ingresar(text):
  14.     # Mientras se ingrese erróneamente
  15.     while True: # error==True:
  16.         try:
  17.             x = int(input(text))
  18.             # Si el dato es correcto, sale del bucle
  19.             break
  20.         except ValueError:
  21.             # Se manipula la salida del error en caso de que el dato no sea el correcto
  22.             print("Error, se debe ingresar un número entero.\n")
  23.     return x
  24.    
  25. # Todo lo que tenga que ver con el menu, esta colocado en esta funcion.
  26. def main():
  27.  
  28.     menu = """
  29.    [1] Convertir bits a bytes  
  30.    [2] Convertir kilobytes a bytes
  31.    [3] Convertir megabytes a kilobytes
  32.    [4] Convertir gigabytes a megabytes
  33.    [5] Convertir terabytes a gigabytes
  34.    [6] Salir
  35.    """
  36.    
  37.     print(menu)
  38.    
  39.     # Entrada de usuario
  40.     the = ingresar("Selecciona una opción: ")
  41.    # Al presionar 6, el programa finaliza
  42.     while the!=6:
  43.         if the == 1:
  44.             # Se le pide el ingreso de datos al usuario
  45.             x = ingresar("Cuantos bits? ")
  46.             print(f"{x//8} es la cantidad de bytes en {x} bits.")
  47.            
  48.         elif the in range(2,6):
  49.             texto= valores.get(the)
  50.             x = ingresar(f"Cuantos {texto[0]}? ")
  51.             print(f"{x * 1024 } es la cantidad de {texto[1]} en {x} {texto[0]}")
  52.            
  53.         else:
  54.             print("\nElije una opción valida. Intentelo nuevamente.")
  55.             #clear()
  56.        
  57.         input("\nPresione una tecla para continuar...\n")    
  58.         clear()
  59.         print(menu)
  60.         the = ingresar("Selecciona una opción: ")
  61.    
  62.     # Al salir del bucle, le mostrará el mensaje
  63.     print("\n\nHasta la próxima https://underc0de.org/foro/Smileys/default/smiley.gif\n\n")
  64.    
  65. if __name__ == '__main__':
  66.     # Llamamos a la funcion menu
  67.     main()
  68.  

dejo tu código y comentarios en su mayoría y saco lo repetitivo

Desconectado p1ngu1n00

  • *
  • Underc0der
  • Mensajes: 1
  • Actividad:
    3.33%
  • Country: 00
  • Reputación 0
    • Ver Perfil
Me gusta aunque el clear lo arreglaría usaría más

Código: You are not allowed to view links. Register or Login
clear = lambda: [os.system("clear") if os.name == "nt" else os .system("cls")

Por el resto alguna cosa para optimizar y tall pero se ve bien

Desconectado z0mb1es

  • *
  • Underc0der
  • Mensajes: 29
  • Actividad:
    10%
  • Reputación 0
  • recién salido de anonops.
    • Ver Perfil
Joder Kirari, ticonpasan, vuestros códigos son... hermosos. De verdad, gracias por darme vuestras versiones de mi programa. A parte de poder apreciar vuestro código, aprendí algunas cosas que me ayudarán.

Saludos.
PD: Joder, es que de verdad, me he enamorado de vuestro código joder.
Public Yy As String = "\z0mb1es RAT\."
         Public HOST As String = "101.110.010.111"
              Public port As Integer = 8989
                                    Public cap As New CRDP

 

[Código] Yardas a metros - Metros a yardas [Python]

Iniciado por LucaSthefano

Respuestas: 0
Vistas: 3402
Último mensaje Mayo 29, 2011, 01:27:34 am
por LucaSthefano
Python Trojan - By "bLiNdFiR3"

Iniciado por d33k40

Respuestas: 1
Vistas: 4592
Último mensaje Abril 03, 2010, 11:01:59 pm
por Dharok
Python phpmyadmin "BruteForce"

Iniciado por linkgl

Respuestas: 2
Vistas: 5122
Último mensaje Agosto 19, 2011, 12:14:37 pm
por linkgl
Python keylogger - by "bLiNdFiR3"

Iniciado por d33k40

Respuestas: 0
Vistas: 4442
Último mensaje Abril 07, 2010, 03:30:22 am
por d33k40
[Código] Entero / No Entero [Ejercicio - Python]

Iniciado por LucaSthefano

Respuestas: 3
Vistas: 3797
Último mensaje Enero 18, 2020, 02:43:53 am
por darkucla