第6周作業 #高階程式設計技術
第11章
11-1 城市和國家
編寫一個函式,它接受兩個形參:一個城市名和一個國家名。這個函式返回一個格式為City, Country 的字串,如Santiago, Chile 。將這個函式儲存在一個名為city_functions.py的模組中。
建立一個名為test_cities.py的程式,對剛編寫的函式進行測試(別忘了,你需要匯入模組unittest 以及要測試的函式)。編寫一個名為test_city_country() 的方法,核實使用類似於’santiago’ 和’chile’ 這樣的值來呼叫前述函式時,得到的字串是正確的。執行test_cities.py ,確認測試test_city_country() 通過了。
city_functions.py
def get_formatted_city(city, country):
"""Generate a neatly formatted full name."""
full_name = city + ', ' + country
return full_name.title()
test_cities.py
import unittest
from city_functions import get_formatted_city
class NamesTestCase(unittest.TestCase) :
def test_formatted_city_name(self):
formatted_name = get_formatted_city('santiago', 'chile')
self.assertEqual(formatted_name, 'Santiago, Chile')
unittest.main()
執行結果
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
[Finished in 0.2s]
11-2 人口數量
修改前面的函式,使其包含第三個必不可少的形參population ,並返回一個格式為City, Country - population xxx 的字串,如Santiago, Chile - population 5000000 。執行test_cities.py,確認測試test_city_country() 未通過。 修改上述函式,將形參population 設定為可選的。再次執行test_cities.py,確認測試test_city_country() 又通過了。 再編寫一個名為test_city_country_population() 的測試,核實可以使用類似於’santiago’ 、’chile’ 和’population=5000000’ 這樣的值來呼叫 這個函式。再次執行test_cities.py,確認測試test_city_country_population() 通過了。
city_functions.py
def get_formatted_city(city, country, population=''):
"""Generate a neatly formatted full name."""
if population:
full_name = city + ', ' + country + ' - population ' + str(population)
else:
full_name = city + ', ' + country
return full_name.title()
test_cities.py
import unittest
from city_functions import get_formatted_city
class NamesTestCase(unittest.TestCase):
def test_formatted_city_name_1(self):
formatted_name = get_formatted_city('santiago', 'chile')
self.assertEqual(formatted_name, 'Santiago, Chile')
def test_formatted_city_name_2(self):
formatted_name = get_formatted_city('santiago', 'chile', 5000000)
self.assertEqual(formatted_name, 'Santiago, Chile - Population 5000000')
unittest.main()
執行結果
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
[Finished in 0.2s]