if bool(re.search(r'\d', oz)) == 1:
        pounds, ounces = oz.split(':')
        pounds = float(pounds)
        ounces = float(ounces)  
        pounds = pounds * 16
        oz = pounds + ounces
        oz = float(oz)
        print(oz)
    else:
        print("You must enter a digit\n")
        main()

Entonces, cuando uso dividir para dividir la entrada del usuario en lb y oz, la entrada se convierte en una cadena. ¿Hay algún tipo de función de división que funcione con enteros y flotantes? Esta forma de hacerlo parece un poco turbia. ¿Cuál es una forma más limpia y elegante de manejarlo?

2
j-grimwood 28 oct. 2017 a las 23:38

3 respuestas

La mejor respuesta

Prueba esto:

pounds, ounces = map(float, oz.split(':'))

map realmente aplica una función en el iterable especificado que en este caso es oz.split(':')

3
scharette 8 feb. 2018 a las 14:02

Usaría un list-comprehension:

pounds, ounces = [float(i) for i in oz.split(':')]

Es la misma eficiencia que su código, pero se ve muy bien y personalmente lo encuentro más limpio. También sería más escalable si por alguna razón hubiera más : s en la cadena oz (digo más como {{ X2}} necesitaría modificación).


Como nota al margen, podría meter toda esa parte de su code en un one-liner que sería muy bueno con sum en un generator si no tuviera que multiplique el pounds por 16. Eso no quiere decir que no sea posible (abajo), ¡pero depende de ti lo que prefieras!

oz = float(a[:a.index(":")]) + float(a[a.index(":")+1:]) * 16
2
Joe Iddon 28 oct. 2017 a las 20:48

Tu código está bien. Al menos la conversión a flotador está bien. Hay un montón de problemas que no están relacionados: asumes que la cadena es un number:number, llamas onzas libras (pounds = pounds * 16 ya no son libras) y demás.

La conversión a flotar, como siempre, está bien.

1
zmbq 28 oct. 2017 a las 20:48