學習軌道
/
Python
Python
/
練習
/
電費帳單
電費帳單

電費帳單

學習練習

簡介

Python 內建三種不同型別的數字:整數(int)、浮點數(float)與複數(complex)。 分數(fractions.Fraction)與 Decimals(decimal.Decimal)也可以從標準函式庫匯入使用。

整數,包括十六進位(hex())、八進位(oct())與二進位(bin())數字,只要沒有小數位,同樣會被視為ints:

# Ints are whole numbers.
>>> 1234
1234
>>> type(1234)
<class 'int'>

>>> -12
-12

含有小數點的數字(不論是否帶有小數部分)會被視為floats:

>>> 3.45
3.45
>>> type(3.45)
<class 'float'>

算術

Python 完整支援這些不同數字型別之間的算術運算,並且在使用二元算術運算子(+、-、*、/、//與%)時,會把較窄的數字轉換成較寬的對應型別。

加法與減法

加法和減法運算子的行為與一般數學相同。 如果其中一個或多個運算元是float,其餘的int也會一併轉換成float:

>>> 5 - 3
2
# The int is widened to a float here, and a float is returned.
>>> 3 + 4.0
7.0

乘法

與加法和減法一樣,乘法會把較窄的數字轉換成較寬的對應型別:

>>> 3 * 2
6

>>> 3 * 2.0
6.0

除法

除法一律回傳float,即使結果是整數也一樣:

>>> 6/5
1.2

>>> 6/2
3.0

向下取整除法

如果你需要int的結果,可以使用向下取整除法來截去結果的小數部分。 向下取整除法是使用//運算子來完成的:

>>> 6//5
1

>>> 6//2
3

取餘數

取餘數運算子(%)會回傳兩個運算元相除後的餘數:

# The result of % is zero here, because dividing 8 by 2 leaves no remainder
>>> 8 % 2
0

# The result of % is 2 here, because 3 only goes into 5 once, with 2 leftover
>>> 5 % 3
2

換個角度來看 5 % 3:

>>> whole_part = int(5/3)
1

>>> decimal_part = 5/3 - whole_part
0.6666666666666667

>>> whole_remainder = decimal_part * 3
2.0

四捨五入

Python 有一個內建函式round(number, <decimal_places>),可以將浮點數四捨五入到指定的小數位數。 如果沒有指定小數位數,數字會四捨五入到最接近的整數,並回傳int:

>>> round(3.1415926535, 2)
3.14

>>> round(3.1415926535)
3

優先順序與括號

Python 允許你使用括號將運算式分組。 當你想覆寫預設的運算順序時,這就很有用。

>>> 2 + 3 * 4
14

>>> (2 + 3) * 4
20

Python 遵循 PEMDAS 規則來決定運算子的優先順序。 這表示()內的運算有最高的優先順序,其次是**,再來是*、/、//、%、+與-:

>>> 2 + 3 - 4 * 4
-11

>>> (2 + 3 - 4) * 4
4

# In the following example, the `**` operator has the highest priority, then `*`, then `+`
# Meaning we first do 4 ** 4, then 3 * 64, then 2 + 192
>>> 2 + 3 * 4 ** 4
770

精確度與表示方式

Python 中的整數具有任意精度,其位數只受限於主機系統可用的記憶體。

浮點數通常是用 C 的double來實作(精確度為 15 位小數),但表示方式會因主機系統而異。 複數則有real和imaginary兩個部分,兩者都以浮點數表示。

如果想更深入了解各種程式語言中浮點數運算的問題與限制,可以看看 0.30000000000000004.com 以及 The Python Tutorial。

說明

你任職的公司想減少碳足跡,因此希望你寫一支程式,用來計算他們電子設備的用電量和運轉成本。

1. 取得額外時數

你的雇主有一個程式,可以計算不同電子設備的運轉時間。目前時間是以小時為單位儲存。當你的雇主把時數加總時,發現時間長度不正確。他們希望你替時間資料再加上 3 小時。他們也想知道,在把資料換算成「完整」天數(一天是 24 小時)之後,會剩下多少「額外」時數。要換算的時間未必是完整的天數。

實作一個 get_extra_hours() 函式,接受一個代表時數的整數。這個函式應該做出適當的「額外時數」調整,然後 return 一個整數,代表必須從總時數中扣除多少小時,才能得到以「完整」天數表示的時間。

>>> get_extra_hours(25)
4

2. 取得 kW 值

你的雇主想知道各個電子設備以 kW 計算的用電量。kW 代表千瓦(kilowatt),其中瓦特是功率的單位。單位名稱中的 kilo 是公制字首,意思是 1000。1 千瓦等於 1000 瓦特。

實作一個 get_kW_value() 函式,接受一個代表瓦特數的整數。這個函式應該把瓦特數換算成千瓦,然後 return 四捨五入到小數點後 1 位的結果。

>>> get_kW_value(1150)
1.2

3. 取得 kWh 值

為了計算電子設備的運轉成本,你的雇主需要知道以 kWh 表示的用電量。kWh 代表千瓦小時(kilowatt-hour),其中小時是時間單位。1 千瓦小時等於 1000 瓦特持續使用 1 小時。1 小時由 60 分鐘組成,1 分鐘由 60 秒組成。1 小時等於 3600 秒。要計算 kWh 值,你必須把瓦特換算成 kW,再將結果除以 3600 並向下取整。

實作一個 get_kWh_value() 函式,接受一個代表瓦特數的整數。這個函式應該 return 千瓦小時數,並以整數表示。

>>> get_kWh_value(5000000)
1

4. 取得效率

電子設備並非 100% 有效率。因此,你的雇主希望你計算電子設備的_效率_。要取得效率,你必須把功率因數(0 到 100 之間的浮點數)除以 100。

實作一個 get_efficiency() 函式,接受一個代表功率因數的浮點數。這個函式應該 return 計算出的效率,並以浮點數表示。

>>> get_efficiency(80)
0.8

5. 取得成本

你的雇主想知道電子設備的運轉成本。運轉成本等於使用的電力乘以每 kWh 的成本。使用的電力等於給定的功率除以計算出的效率。

實作一個 get_cost(<watts>,<power_factor>,<price>) 函式,接受一個代表瓦特數的整數、一個代表功率因數的浮點數,以及一個代表每 kWh 成本的浮點數。這個函式應該 return 電子設備的運轉成本,並以浮點數表示。

>>> get_cost(5000000, 80, 0.25)
0.3125
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Python Exercism

準備好開始 電費帳單 了嗎?

註冊 Exercism,透過 17 個概念146 個練習 和真人引導來學習並精通 Python,全部免費。