¿Por qué me sigue mostrando el valor 0.0 en mi código Python?

Como señaló Michael Veksler , necesita un trabajo serio con Cómo depurar.

En este problema, desea que todo sea un número de coma flotante todo el tiempo; no le ayuda la falta de tipo de datos de Python. Por lo tanto, debe tener cuidado con cada interacción, como las divisiones que Quora User abordó.

También hay otros problemas más importantes que abordar. Algunas cosas están MUY CONFUNDIDAS aquí.

– No ha depurado el código en general. Cuando solicita time_unit = “m”, se dispara porque configura Oneway_distance_minutes, pero debería ser oneway_distance_minutes.

– ¿Por qué le pides al usuario que elija una unidad de tiempo ? ¿Hubo más del problema de lo que compartiste? Porque no es importante en lo que compartiste, llegar a la meta de velocidad promedio. Simplemente elija una unidad de tiempo e inclúyala en su consulta al usuario.

– ¿Qué unidades le estás pidiendo al usuario que ingrese la hora? La sección “segundos” parece convertir minutos en segundos, suponiendo que la entrada sea minutos. Pero la sección “minutos” hace lo mismo, o alternativamente convertiría horas en minutos, por lo que ni siquiera sé qué unidades se ingresan. La sección “horas” convierte minutos en horas. Parece que la entrada siempre debe ser minutos, y la sección “minutos” debería decir
convert_to_minutes = time_before.
Para la cordura del usuario, por favor etiquete sus expectativas. p.ej,
“Ingrese el tiempo de la casa a la escuela (minutos):”

– Sin embargo, dado que la velocidad se fuerza como km / h, ¿por qué no está convirtiendo el tiempo en horas , para poder calcular la distancia en km? Su total_distance_seconds, por ejemplo, multiplica el tiempo (en minutos o segundos, no sé) multiplicado por la velocidad en km / h, y obtiene, no km, sino una respuesta incorrecta.
Estás bastante confundido acerca de las unidades: te sugiero que etiquetes las unidades (en nombres de variables y / o comentarios) para que te obligues a hacer que las unidades coincidan correctamente.
distance_km = speed_kmph * time_hrs

– ¿Por qué estás convirtiendo repetidamente todo en enteros ? velocidades, tiempos, etc. Este es un problema clásico de números reales (coma flotante). las entradas solo difuminan la respuesta y luego causan problemas de división. Y luego, después de trabajar tan duro para convertir todo en números enteros, ¿por qué imprime un flotador? En general, imprimir un int como flotante solo oculta al usuario el hecho de que ya no sabe cuáles son los dígitos decimales.

– Tienes variables como “oneway_ distance_hours “. Es esta distancia? ¿O es este tiempo (horas)? Incluso el nombre de la variable está confundido: elija oneway_distance_km o oneway_time_hours.

– Calcula la distancia total, pero no debe completarse, porque el problema le pide que calcule la velocidad promedio. ¿Sabes cómo vas a calcular la velocidad promedio?

¿Por qué le preguntas al usuario si quiere hacer el cálculo? Presumiblemente, solo ejecutarían el programa si quisieran hacer el cálculo …

– Los comentarios son geniales. Pero evite los comentarios que dicen exactamente lo mismo que el código: pierden el tiempo del lector. p.ej
# pregunte por la velocidad de la casa a la escuela …
sb = input (“¿Cuál fue la velocidad de la casa a la escuela?”)

– Finalmente, tenga en cuenta: la velocidad promedio es independiente de la distancia o del tiempo que lleva ir de casa a la escuela. Esa entrada puede ser CUALQUIER número, y obtienes la misma respuesta. El problema no necesitaba mencionarlo: es una cortina de humo. Podría haber eliminado por completo todos los cálculos de tiempo y distancia.
1 / avg_speed = 0.5 * ((1 / speed_before) + (1 / speed_after))

Citaré:
dale un pescado a un hombre y lo alimentarás por un día; enseña a un hombre a pescar y lo alimentarás toda la vida

Trataré de explicar cómo depurar tu código. Si hubiera depurado su código, habría podido encontrar la ubicación exacta donde se rompe su código. Con este conocimiento, sería bastante fácil reducir su problema a algo simple, lo que lo ayudaría a comprender qué salió mal (por ejemplo, imprimir flotante (2/60) imprime 0.0, ¿cómo es posible?).

La vida es más simple con un depurador, por ejemplo, pdb, pero supongamos que no tiene uno. En ese caso, debería haber agregado declaraciones de “impresión” en todo el lugar que le hubieran mostrado dónde las cosas comienzan a comportarse en contra de su comprensión.

si time_unit == “minutes” o time_unit == “m”:
ctm = time_before * 60
print “ctm =”, ctm #DEBUG
convert_to_minutes = int (ctm)
odm = convert_to_minutes * speed_before
print “odm =”, odm #DEBUG
Oneway_distance_minutes = int (odm)
total_distance_minutes = oneway_distance_minutes * 2
print (“la distancia total es” + str (float (total_distance_minutes)) + “Km”)

si time_unit == “hours” o time_unit == “h”:
print “time_before =”, time_before #DEBUG
cth = float (time_before / 60)
print “cth =”, cth #DEBUG oops …
convert_to_hours = int (cth)
odh = convert_to_hours * speed_before
imprime “odh =”, odh #DEBUG
oneway_distance_hours = int (impar)
total_distance_hours = oneway_distance_hours * 2
print (“la distancia total es” + str (float (total_distance_hours)) + “Km”)

Una vez que haya encontrado lo que está sucediendo, simplemente elimine las líneas de depuración. Por supuesto, es mucho mejor aprender a usar un depurador.

time_before es un int, por lo que time_before / 60 devuelve 0 (para time_before <60), por lo que hacer que sea flotante después de ese punto no está haciendo lo que pretendía.
Haga time_before / 60.0 en su lugar (60.0 es flotante)

Como usa input y no raw_input, no está claro si quiere usar Python 2 o 3. Dado que “/” (división) se comporta de manera diferente en Python 2 o 3, puede evitar esta ambigüedad si su primera línea es algo así como:
#! / usr / bin / env python3

More Interesting

¿Cómo se puede determinar y mostrar la velocidad de un algoritmo (complejo) en notación Big O?

¿Por qué es P vs NP un problema importante para resolver?

¿Cuáles son algunos conceptos en el cálculo lambda que es bueno saber antes de aprender programación funcional?

¿Cuáles son algunas propiedades interesantes de una caminata aleatoria en un gráfico?

Cómo entender el concepto matemático de la máquina de turing

¿Para qué se usan las mónadas en ingeniería de software?

¿Cuáles son algunas formas interesantes de usar tecnologías no convencionales en la programación?

¿Por qué la programación de Erlang aún no ha penetrado en el plan de estudios de ciencias de la computación como cabría esperar?

¿Cómo podría razonar matemáticamente sobre la corrección y solidez de un programa en programación funcional?

¿Puedo usar una función hash para ordenar registros de manera aleatoria pero consistente?

¿Puede una resta dar un resultado negativo usando un número sin signo?

¿Es cierto que al menos uno de los dos términos en [math] Rad (p) - 1, Rad (p) + 1 [/ math] es un número primo, donde [math] Rad (p) [/ math] es el producto de todos los números primos menores o iguales que [math] p [/ math]?

¿Por qué utilizamos el kit de microprocesador 8085 para agregar dos números hexadecimales en lugar de un simple proceso de suma?

¿Cómo puede una máquina lógica como una computadora generar un número aleatorio?

¿Por qué es difícil la optimización en parámetros discretos?