明確項目目的
分析流程,拆解項目
逐步執行,代碼實現
3.1 先能用
3.2 再改進
3.3 精細化
節課的項目和上個項目難度差不多,從我們學習完函數之後,我們就可以做出一些有用的程序了。這節課,我們做一個閃電快遞配送的項目, 用來解決快遞配送的人員與送貨量的配比問題。
這次開發實用程序的流程和上次是一模一樣。
接下來,我們一步一步來實現這個項目。明確項目目的先來看一下項目需求:
看完了項目需求,那個快遞老闆朋友又來了。
既然我那BOSS朋友要得急,那我們使用「敏捷開發」。 我們來分析一下這個項目。分析流程,拆解項目我們的任務就是做一個「快遞配送調配程序」,雖然這朋友要的比較著急,但是我們也不著急於編程開發,應該先梳理清楚需求,做出的程序功能達到什麼樣的效果。計算器,首先配送站BOSS要輸入信息,然後自動計算出結果。為了搞清楚計算過程,我們得到計算公式。梳理需求,得到下圖結果:
根據上面的分析,試著補全代碼,將計算公式寫在下面,運行程序。
因為這BOSS朋友著急,先做出程序,以後再優化吧。所以,我們把程序版本大致規劃成3個階段。
明確每個階段任務後,接下來我們逐步用代碼實現功能。
江湖秘籍:%f是字符串格式化,格式字符串為浮點數,%.1f的意思是格式化字符串為浮點數,並且保留一位小數。
發現:向上取整是math.ceil(), 括號內放數字。
也就是使用math.ceil()方法,就能把數字向上取整。並且在開始位置,有一句import math, 怎麼有些似曾相識. 在上個項目實戰中,我們使用隨機數,也用過import math代碼。
現在解決了項目bug,感覺應該可以了。
等等,BOSS朋友需要使用兩個函數才能計算配送次數,計算配送員數,有沒有辦法能夠讓她使用一個函數就能完成功能。
如何解決這個問題?還是用之前方法流程來處理:
要想實現這樣效果,我們怎麼傳遞參數,才能讓函數區分是【計算配送次數】還是【計算配送員數】。
OK,現在這個程序已經可以運行了。
但是,我們在調用函數的時候,你還要輸入參數名與參數值,太麻煩,我們能不能有個簡單方法。
是不是簡單的多了,但是還沒完。
BOSS朋友不想每次都去調用函數,才能計算結果,那就給她整個交互過程。
增加可交互性,讓BOSS朋友只輸入內容即可, 使用input()函數。
看,是不是可以輸入了。但是,有bug唉。不信,貼圖來看。
當我們選擇計算配送次數, 項目大小為2.2倍,快遞員數為1時。 計算工時:需要配送次數 = 2.2*100/20/1 ,得到的結果應該是11次,可是列印出來卻是12次。是為什麼呢? 還是老問題, python江湖中的除法,會將數字都轉換二進位再進行計算,得到的結果是一個二進位,造成數字增加。不信,你運行一下下面程序。
明可以整除的,造成還存在小數部分,然後向上取整後得到12。那麼有沒有辦法可以改變有, 我們使用math中的round函數。
是不是沒問題了。round()函數是python中提供解決小數的保留問題。此函數格式round(x ,n) x表示小數,n表示需要保留的小數位。我們保留小數2位,將round加入到我們的案例方法中。運行以下代碼,觀察終端結果。
BOSS朋友是不是可以輸入了。但是,按照函數封裝代碼的思想,我們現在代碼寫的很雜。那我們把它優化一下?怎麼優化呢?江湖箴言:創建一個主函數,用來調用其他子函數。這不就是函數的嵌套嗎?
是不是很完美了?這就是這節課完成的實用程序,解決快遞配送調配問題。
我要把我的程序送給BOSS朋友去了。