2011-06-15 82 views
5

我是一個初學Python的學習Python的人。這是我學習的第一個編程語言,我被困在練習中。爲什麼在這個例子中他使用了浮點數?

練習: 「解釋爲什麼使用4.0而不是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." 

老實說,我找不到任何理由,他將在2號線以外的其他作爲一個例子,如果我有一個浮點數它會影響表達式求值的其餘部分使用浮點( cars_driven * space_in_a_car)導致120.0。

我錯過了什麼嗎?

+1

因爲他懶得做'從__future__進口division'或切換到python3 – JBernardo 2011-06-15 16:31:01

回答

6

這是一個簡單的問題,有一個簡單的答案,我由於某種原因而過於複雜。

(假設你知道爲什麼3/4回報0爲什麼3/4.0收益0.75)

我的書看了看,該代碼僅說一下,它似乎並沒有什麼更多它,它不會問:

解釋爲什麼4.0是用來代替 只是4.

事實證明這是一個奇怪的問題,因爲實際上沒有理由。 David Heffernan was right all along.

所以,當你添加.0,它並沒有比在浮動旋轉拼車容量有任何影響,因爲你只是做:

carpool_capacity = cars_driven * space_in_a_car 

我不能瞭解作者瞄準對,唯一顯着的區別又是一個打印120.0和其他120

正如我以前指出:

average_passengers_per_car = passengers/float(cars_driven) #added float 

會使(更)意義,因爲,例如,如果原始代碼中的passengers = 93的平均值將是3而不是3.1,在我看來這對於平均值來說更合理。

對不起,我希望我現在得到它:),它有幫助!

OLD:

其原因大概是這樣的:

3/4 # returns 0 

這是因爲int/int == int,所以,4 3 「適合」 0次,沒有小數點,因爲它是一個INT。

你應該這樣做:

3/4. # returns 0.75 

3/float(4) 

這適用於蟒蛇2.x和不爲Python 3

這不一切都有意義,除非我錯過了我想的東西 這是錯誤的」!

這將使更多的意義:

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 

由於空間在汽車的量不能4個半席位,平均,可能是兩個半人,因爲它是一個數字,而不是實際的人。

+0

我完全不知道你在說什麼 – 2011-06-15 16:24:38

+0

@DavidHeffernan:假設這是一個嚴肅的問題,你能不能請稍微具體一些? – Trufa 2011-06-15 16:28:36

+0

請解釋一下倒票,我會很樂意討論我的答案 – Trufa 2011-06-15 16:36:16

3

在您的問題中給出的代碼中,沒有充分的理由使用浮點值。

+0

我等待downvoter解釋我錯了什麼。 – 2011-06-15 16:48:59

+0

我是一個downvoter。對不起,我不注意。我已經重讀了這個問題,並且明白你是對的。但是我無法取消我的投票:( – Vader 2011-06-15 17:36:19

+0

@vader太糟糕了,這要花費你一個代表點! – 2011-06-15 18:46:37

2

一般而言,整數DIV不大於浮點格相同

整數DIV:

myInt = 4/5 
myInt == 0 

浮動DIV:

myFloat = 4.0/5.0 
myFloat = 0.8 

通過使space_in_car浮點數,則操作結果計算爲浮動(不捨入)

但是在這個示例中,space_in_car僅用於乘法。乘法同樣適用,但值不變(120與120.0相同)。我的猜測是,它是打算在一個部門使用,以顯示上述屬性,但有一個lapsus calami。

+1

好的,但它並沒有實際意義(在這個例子中),因爲你不能擁有半個座位,我認爲這是令人困惑的,甚至在技術上是錯誤的。擁有浮點平均值更有意義。 http://stackoverflow.com/questions/6360242/why-does-he-uses-a-floating-point-in-this-example/6360379#6360379 – Trufa 2011-06-15 15:54:19

+0

_「lapsus calami」_哇!我也這麼認爲。 – eyquem 2011-06-15 17:25:35

1

我認爲這是在措辭錯誤:因爲space_in_a_car只出現在一個乘法,有沒有可能改變其價值時應當遵守的一個問題。

的問題,可以觀察到,如果司機的價值是不是乘客

價值的除數見改變司機的值時會發生什麼:

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) 

導致

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 

然後,它是司機那一定是一個浮動,而不是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. 
相關問題