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:
#!/usr/bin/python
import time
from os import system, name
def clear():
if name == 'nt':
_ = system('cls')
else:
_ = system('clear')
def bit2byte():
x = int(input("Cuantos bits? "))
y = x / 8
print(str(y) + " es la cantidad de bytes en " + str(x) + " bits.")
time.sleep(3)
clear()
def kbyte2byte():
x = int(input("Cuantos kilobytes? "))
y = x * 1024
print(str(y) + " es la cantidad de bytes en " + str(x) + " kilobytes.")
time.sleep(3)
clear()
def mbyte2kbyte():
x = int(input("Cuantos megabytes? "))
y = x * 1024
print(str(y) + " es la cantidad de kilobytes en " + str(x) + " megabytes.")
time.sleep(3)
clear()
def gbyte2mbyte():
x = int(input("Cuantos gigabytes? "))
y = x * 1024
print(str(y) + " es la cantidad de megabytes en " + str(x) + " gigabytes.")
time.sleep(3)
clear()
def tbyte2gbyte():
x = int(input("Cuantos terabytes? "))
y = x * 1024
print(str(y) + " es la cantidad de gigabytes en " + str(x) + " bits.")
time.sleep(3)
clear()
menu = """
[1] Convertir bits a bytes
[2] Convertir kilobytes a bytes
[3] Convertir megabytes a kilobytes
[4] Convertir gigabytes a megabytes
[5] Convertir terabytes a gigabytes
[6] Salir
"""
the = True
while the is True:
print(str(menu))
opc = (input("Selecciona una opción: "))
if opc == "1":
bit2byte()
elif opc == "2":
kbyte2byte()
elif opc == "3":
mbyte2kbyte()
elif opc == "4":
gbyte2mbyte()
elif opc == "5":
tbyte2gbyte()
elif opc == "6":
print("\n\nHasta la próxima :)\n\n")
break
exit()
else:
print("\nElije una opción valida.\n")
time.sleep(0.4)
clear()
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
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:
from os import system, name
def clear():
# Aca no haria falta que cree una variable, solo llame a la funcion system y estaria.
if name == 'nt':
system('cls')
else:
system('clear')
# Las operaciones en funciones pueden ser declaradas de esta forma, es más legible.
# Todas las funciones, aceptan como parametro, un valor entero.
# Ya si luego quiere restringir si es cadena o no, es parte de la investigación que deberá hacer usted.
def bit2byte(x):
return x // 8
def convbytes(x):
return x * 1024
# Funcion para verificar si el dato ingresado es un entero
def ingresar(text):
error = True
# Mientras se ingrese erroneamente
while (error==True):
try:
x = int(input(text))
# Si el dato es correcto, sale del bucle
error = False
except ValueError:
# Se manipula la salida del error en caso de que el dato no sea el correcto
print("Error, se debe ingresar un numero entero.")
return x
# Todo lo que tenga que ver con el menu, esta colocado en esta funcion.
def main():
menu = """
[1] Convertir bits a bytes
[2] Convertir kilobytes a bytes
[3] Convertir megabytes a kilobytes
[4] Convertir gigabytes a megabytes
[5] Convertir terabytes a gigabytes
[6] Salir
"""
print(menu)
# Entrada de usuario
the = ingresar("Selecciona una opción: ")
# Al presionar 6, el programa finaliza
while the!=6:
if the == 1:
# Se le pide el ingreso de datos al usuario
x = ingresar("Cuantos bits? ")
# Al llamar a la función, se le pasa como argumento la variable x, no hace falta concatenar, puede solo mostrar el resultado
print("{} es la cantidad de bytes en {} bits.".format(bit2byte(x),x))
elif the == 2:
x = ingresar("Cuantos kilobytes? ")
print("{} es la cantidad de bytes en {} kilobytes.".format(convbytes(x),x))
elif the == 3:
x = ingresar("Cuantos megabytes? ")
print("{} es la cantidad de kilobytes en {} megabytes.".format(convbytes(x),x))
elif the == 4:
x = ingresar("Cuantos gigabytes? ")
print("{} es la cantidad de megabytes en {} gigabytes.".format(convbytes(x),x))
elif the == 5:
x = ingresar("Cuantos terabytes? ")
print("{} es la cantidad de gigabytes en {} terabytes.".format(convbytes(x),x))
else:
print("Escoja una opción valida.")
input("Presione una tecla para continuar...\n")
clear()
print(menu)
the = ingresar("Selecciona una opción: ")
# Al salir del bucle, le mostrará el mensaje
print("\n\nHasta la próxima https://underc0de.org/foro/Smileys/default/smiley.gif\n\n")
if __name__ == '__main__':
# Llamamos a la funcion menu
main()
Espero te sea de utilidad. Saludos!
-Kirari
con que necesidad cuatro funciones que hacen lo mismo?
def kbyte2byte(x):
y = x * 1024
return y
def mbyte2kbyte(x):
y = x * 1024
return y
def gbyte2mbyte(x):
y = x * 1024
return y
def tbyte2gbyte(x):
y = x * 1024
return y
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.
@tincopasan (https://underc0de.org/foro/index.php?action=profile;u=9650) 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 @tincopasan (https://underc0de.org/foro/index.php?action=profile;u=9650) !
-Kirari
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í :
#-*- coding: utf -8 -*-
from os import system, name
def clear():
# Acá no haría falta que cree una variable, solo llame a la función system y estaría.
if name == 'nt':
system('cls')
else:
system('clear')
valores = {2:["kilobytes","bytes"],3:["megabytes","kilobytes"],4:["gigabytes","megabytes"],5:["terabytes","gigabytes"]}
# Función para verificar si el dato ingresado es un entero
def ingresar(text):
# Mientras se ingrese erróneamente
while True: # error==True:
try:
x = int(input(text))
# Si el dato es correcto, sale del bucle
break
except ValueError:
# Se manipula la salida del error en caso de que el dato no sea el correcto
print("Error, se debe ingresar un número entero.\n")
return x
# Todo lo que tenga que ver con el menu, esta colocado en esta funcion.
def main():
menu = """
[1] Convertir bits a bytes
[2] Convertir kilobytes a bytes
[3] Convertir megabytes a kilobytes
[4] Convertir gigabytes a megabytes
[5] Convertir terabytes a gigabytes
[6] Salir
"""
print(menu)
# Entrada de usuario
the = ingresar("Selecciona una opción: ")
# Al presionar 6, el programa finaliza
while the!=6:
if the == 1:
# Se le pide el ingreso de datos al usuario
x = ingresar("Cuantos bits? ")
print(f"{x//8} es la cantidad de bytes en {x} bits.")
elif the in range(2,6):
texto= valores.get(the)
x = ingresar(f"Cuantos {texto[0]}? ")
print(f"{x * 1024 } es la cantidad de {texto[1]} en {x} {texto[0]}")
else:
print("\nElije una opción valida. Intentelo nuevamente.")
#clear()
input("\nPresione una tecla para continuar...\n")
clear()
print(menu)
the = ingresar("Selecciona una opción: ")
# Al salir del bucle, le mostrará el mensaje
print("\n\nHasta la próxima https://underc0de.org/foro/Smileys/default/smiley.gif\n\n")
if __name__ == '__main__':
# Llamamos a la funcion menu
main()
dejo tu código y comentarios en su mayoría y saco lo repetitivo
Me gusta aunque el clear lo arreglaría usaría más
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
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.