1. 程式人生 > >Python程式設計從入門到實踐課後答案:第十一章

Python程式設計從入門到實踐課後答案:第十一章

11-1 城市和國家 :編寫一個函式,它接受兩個形參:一個城市名和一個國家名。這個函式返回一個格式為City, Country 的字串,如Santiago, Chile 。將
這個函式儲存在一個名為city_functions.py的模組中。
建立一個名為test_cities.py的程式,對剛編寫的函式進行測試(別忘了,你需要匯入模組unittest 以及要測試的函式)。編寫一個名為test_city_country() 的
方法,核實使用類似於’santiago’ 和’chile’ 這樣的值來呼叫前述函式時,得到的字串是正確的。執行test_cities.py ,確認測
試test_city_country() 通過了。

import unittest


def city_functions(city, country):
    return city + ', ' + country


class CityTestCase(unittest.TestCase):
    def test_city_country(self):
        self.assertEqual(city_functions("杭州", "中國"), "杭州, 中國")


if __name__ == '__main__':
    unittest.main() 

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() 通過了。

import unittest


# 如Santiago, Chile - population 5000000 。執行test_cities.py,確認測試test_city_country() 未通過。
def city_function(city, country, population):
    return "%s,%s - population %d" % (city, country, population)


# 修改上述函式,將形參population 設定為可選的。再次執行test_cities.py,確認測試test_city_country() 又通過了。
def city_functions1(city, country, population=50):
    return "%s,%s - population %d" % (city, country, population)


class CityTestCase(unittest.TestCase):
    # 如Santiago, Chile - population 5000000 。執行test_cities.py,確認測試test_city_country() 未通過。
    def test_city_country(self):
        self.assertEqual(city_function("杭州", "中國", 5000), "杭州, 中國")

    # 修改上述函式,將形參population 設定為可選的。再次執行test_cities.py,確認測試test_city_country() 又通過了。
    def test_city_country1(self):
        self.assertEqual(city_functions1("杭州", "中國"), "杭州,中國 - population 50")

    # 再編寫一個名為test_city_country_population() 的測試,核實可以使用類似於'santiago' 、'chile' 和'population=5000000' 這樣的值來呼叫
    # 這個函式。再次執行test_cities.py,確認測試test_city_country_population() 通過了。
    def test_city_country_population(self):
        self.assertEqual(city_functions1("杭州", "中國", population=5000), "杭州,中國 - population 5000")


if __name__ == '__main__':
    unittest.main()

11-3 僱員 :編寫一個名為Employee 的類,其方法__init__() 接受名、姓和年薪,並將它們都儲存在屬性中。編寫一個名為give_raise() 的方法,它預設將
年薪增加5000美元,但也能夠接受其他的年薪增加量。
為Employee 編寫一個測試用例,其中包含兩個測試方法:test_give_default_raise() 和test_give_custom_raise() 。使用方法setUp() ,以免在
每個測試方法中都建立新的僱員例項。執行這個測試用例,確認兩個測試都通過了。

import unittest


class Employee:
    def __init__(self, name, age, money):
        self.name = name
        self.age = age
        self.money = money

    def give_raise(self, add=5000):
        self.money += add
        return self.money


class TestEmployee(unittest.TestCase):

    def setUp(self):
        self.my_employee = Employee("鄭超", "23", 5000)

    def test_give_default_raise(self):
        self.my_employee.give_raise()
        self.assertEqual(10000, self.my_employee.money)

    def test_give_custom_raise(self):
        self.my_employee.give_raise(10000)
        self.assertEqual(15000, self.my_employee.money)


if __name__ == '__main__':
    unittest.main()