2011-06-15 17 views
5

Soy un principiante aprendiendo Python de Learn Python de la manera difícil. Es mi primer lenguaje de programación que aprendo y estoy atrapado en un ejercicio.¿Por qué usa un punto flotante en este ejemplo?

Ejercicio: "Explique por qué se utiliza el 4.0 en lugar de solo 4."

cars = 100 
space_in_a_car = 4.0 #Why does he uses 4.0 instead of 4 here? 
drivers = 30 
passengers = 90 
cars_not_driven = cars - drivers 
cars_driven = drivers 
carpool_capacity = cars_driven * space_in_a_car 
average_passengers_per_car = passengers/cars_driven 


print "There are", cars, "cars available." 
print "There are only", drivers, "drivers available." 
print "There will be", cars_not_driven, "empty cars today." 
print "We can transport", carpool_capacity, "people today." 
print "We have", passengers, "to carpool today." 
print "We need to put about", average_passengers_per_car, "in each car." 

Sinceramente, no puedo encontrar ninguna razón por la que usaría un punto flotante en la línea 2 que no sea para servir como ejemplo que si tengo un número de punto flotante que afecta al resto de la evaluación de la expresión (cars_driven * space_in_a_car) que da como resultado 120.0.

¿Echo de menos algo?

+1

porque era demasiado perezoso para hacer 'de __future__ division' importación o para cambiar a python3 – JBernardo

Respuesta

6

Esta fue una pregunta simple con una respuesta simple que me complique demasiado por alguna razón.

(Suponiendo que usted sabe por qué 3/4 vuelve 0 y por eso vuelve 3/4.0 0,75)

Me tomó un vistazo al libro y el código es única que poco, no parece tener ninguna más para ella, y qué pide:

explicar por qué el 4.0 se utiliza en lugar de simplemente 4.

Resulta que esta es una pregunta extraña ya que en realidad no hay ninguna razón para ello. David Heffernan was right all along.

Por lo tanto, cuando se agrega el .0, que no tiene ningún efecto de girar la capacidad de compartir coche en un flotador, ya que acaba de hacer:

carpool_capacity = cars_driven * space_in_a_car 

No puedo entender lo que el autor estaba apuntando para, la única diferencia notable es más que uno imprime 120.0 y la otra 120

Como he señalado antes:

average_passengers_per_car = passengers/float(cars_driven) #added float 

Tendría (más) sentido ya que, por ejemplo, si el passengers = 93 en el código original el promedio sería 3 y no 3.1 sería en mi opinión más razonable para un promedio.

Disculpa la confusión, espero haberlo conseguido en este momento :) ¡y eso ayuda!

VIEJO:

La razón probablemente esto:

3/4 # returns 0 

Eso se debe a que int/int == int, así, 4 "se ajusta a" 0 veces en 3, y sin punto decimal, ya que es una En t.

que debe hacer:

3/4. # returns 0.75 

o

3/float(4) 

Esto se aplica para Python 2.x y no para Python 3

PERO

Esto no lo hace tiene sentido en absoluto, y a menos que me esté perdiendo algo, creo está mal"!

Esto haría mucho más sentido:

cars = 100 
space_in_a_car = 4 #not float 
drivers = 30 
passengers = 90 
cars_not_driven = cars - drivers 
cars_driven = drivers 
carpool_capacity = cars_driven * space_in_a_car 
average_passengers_per_car = passengers/float(cars_driven) #added float 

Dado que la cantidad de espacio en un coche no podría ser asientos 4 y medio, y el promedio, podría ser de 2 y medio de personas, ya que es un número y no personas en realidad.

+0

No tengo ni idea de lo que está hablando. –

+0

@DavidHeffernan: Suponiendo que sea una pregunta seria, ¿podría usted? ser un poco más específico? – Trufa

+0

Por favor, explique el voto a favor, con gusto discutiré mi respuesta. – Trufa

3

En el código proporcionado en su pregunta, no hay una buena razón para usar un valor de coma flotante.

+0

Estoy esperando el downvoter para explicar lo que obtuve mal. –

+0

Yo era un infractor. Lo siento, por mi falta de atención. He vuelto a leer la pregunta y comprendí que tenías razón.Pero no puedo cancelar mi voto :( – Vader

+0

@vader es malo. ¡Eso le costó un punto de representación! –

2

En general, div número entero no es lo mismo que div punto flotante

número entero div:

myInt = 4/5 
myInt == 0 

flotador div:

myFloat = 4.0/5.0 
myFloat = 0.8 

haciendo space_in_car un flotador, entonces los resultados de las operaciones se calculan como flotantes (sin redondeo)

Pero en esta muestra space_in_car solo se usa para la multiplicación. Para la multiplicación, lo mismo ocurre, pero el valor no cambia (120 es igual a 120.0). Mi suposición es que estaba destinado a ser utilizado en una división para mostrar las propiedades mencionadas anteriormente, pero había un lapsus calami.

+1

Bien, sí, pero en realidad no tiene sentido (en el ejemplo) ya que no puedes tener medio asiento, creo que es confuso o incluso técnicamente incorrecto. Tiene mucho más sentido tener un promedio de coma flotante. http://stackoverflow.com/questions/6360242/why-does-he-uses-a-floating-point-in-this-example/6360379#6360379 – Trufa

+0

_ "lapsus calami" _ ¡Guau! Yo también lo creo – eyquem

1

Creo que hay un error en la redacción: desde space_in_a_car aparece solo en una multiplicación, no hay posibilidad de observar un problema al cambiar su valor.

Un problema se pudo observar si el valor de conductores no era un divisor del valor de pasajeros

Vea lo que sucede cuando se cambia el valor de conductores:

form = ('space_in_a_car : %s\n' 
     'drivers   : %s\n' 
     'passengers  : %s\n' 
     'cars_driven  : %s\n' 
     'average_passengers_per_car : %s\n\n') 


for nbdrivers in (30, 30.0, 47, 47.0): 

    cars = 100 
    space_in_a_car = 4 

    drivers, passengers = nbdrivers, 90 

    cars_driven = drivers 
    carpool_capacity = cars_driven * space_in_a_car 
    average_passengers_per_car = passengers/cars_driven 

    print form % (space_in_a_car, 
        drivers, 
        passengers, 
        cars_driven, 
        average_passengers_per_car) 

resultado

space_in_a_car : 4 
drivers   : 30 
passengers  : 90 
cars_driven  : 30 
average_passengers_per_car : 3 


space_in_a_car : 4 
drivers   : 30.0 
passengers  : 90 
cars_driven  : 30.0 
average_passengers_per_car : 3.0 


space_in_a_car : 4 
drivers   : 47 
passengers  : 90 
cars_driven  : 47 
average_passengers_per_car : 1 


space_in_a_car : 4 
drivers   : 47.0 
passengers  : 90 
cars_driven  : 47.0 
average_passengers_per_car : 1.91489361702 

A continuación, se conductores que debe haber un flotador, no space_in_a_car

0
cars = 100 
space_in_a_car = 4.0 
drivers = 30 
passengers = 90 

# 90 % 4 = 2(man), 90/4.0 = 22.5(car) 
print "Need %d cars." % int(round(90/4.0)) 

# He wants you to think more about it. 
Cuestiones relacionadas