天天看點

《Python程式設計:從入門到實踐》課後練習9-1到9-14

9-1

建立一個名為Restaurant 的類,其方法init() 設定兩個屬性:restaurant_name 和cuisine_type 。建立一個名為describe_restaurant() 的方法和一個名為open_restaurant() 的方法,其中前者列印前述兩項資訊,而後者列印一條消息,指出餐館正在營業。

class Restaurant():
    def __init__(self, _name, _type):
        self.restaurant_name = _name
        self.cuisine_type = _type
    def describe_restaurant(self):
        print('restaurant_name:', self.restaurant_name)
        print('cuisine_type:', self.cuisine_type)
    def open_restaurant(self):
        print('Restaurant is open.')

if __name__ == '__main__':
    Restaurant_1 = Restaurant('NAME', 'TYPE')
    print(Restaurant_1.restaurant_name, Restaurant_1.cuisine_type)
    Restaurant_1.describe_restaurant()
    Restaurant_1.open_restaurant()
           

9-2

根據你為完成練習9-1而編寫的類建立三個執行個體,并對每個執行個體調用方法describe_restaurant() 。

class Restaurant():
    def __init__(self, _name, _type):
        self.restaurant_name = _name
        self.cuisine_type = _type
    def describe_restaurant(self):
        print('restaurant_name:', self.restaurant_name)
        print('cuisine_type:', self.cuisine_type)
    def open_restaurant(self):
        print('Restaurant is open.')

if __name__ == '__main__':
    Restaurant_1 = Restaurant('NAME_1', 'TYPE_1')
    Restaurant_2 = Restaurant('NAME_2', 'TYPE_2')
    Restaurant_3 = Restaurant('NAME_3', 'TYPE_3')
    Restaurant_1.describe_restaurant()
    Restaurant_2.describe_restaurant()
    Restaurant_3.describe_restaurant()
           

9-3

建立一個名為User 的類,其中包含屬性first_name 和last_name ,還有使用者簡介通常會存儲的其他幾個屬性。在類User 中定義一個名為describe_user() 的方法,它列印使用者資訊摘要;再定義一個名為greet_user() 的方法,它向使用者發出個性化的問候。

建立多個表示不同使用者的執行個體,并對每個執行個體都調用上述兩個方法。

class User():
    def __init__(self, _first_name, _last_name):
        self.first_name = _first_name
        self.last_name = _last_name
    def describe_user(self):
        print('first_name:', self.first_name)
        print('last_name:', self.last_name)
    def greet_user(self):
        print('Hello,', self.first_name, self.last_name)

if __name__ == '__main__':
    User_1 = User('San', 'Zhang')
    User_2 = User('Si', 'Li')
    User_3 = User('Wu', 'Wang')
    User_1.describe_user()
    User_1.greet_user()
    User_2.describe_user()
    User_2.greet_user()
    User_3.describe_user()
    User_3.greet_user()
           

9-4

在為完成練習9-1而編寫的程式中,添加一個名為number_served 的屬性,并将其預設值設定為0。根據這個類建立一個名為restaurant 的執行個體;列印有多少人在這家餐館就餐過,然後修改這個值并再次列印它。

添加一個名為set_number_served() 的方法,它讓你能夠設定就餐人數。調用這個方法并向它傳遞一個值,然後再次列印這個值。

添加一個名為increment_number_served() 的方法,它讓你能夠将就餐人數遞增。調用這個方法并向它傳遞一個這樣的值:你認為這家餐館每天可能接待的就餐人數。

class Restaurant():
    def __init__(self, _name, _type):
        self.restaurant_name = _name
        self.cuisine_type = _type
        self.number_served = 
    def describe_restaurant(self):
        print('restaurant_name:', self.restaurant_name)
        print('cuisine_type:', self.cuisine_type)
    def open_restaurant(self):
        print('Restaurant is open.')
    def set_number_served(self, _number_served):
        self.number_served = _number_served
    def increment_number_served(self, _increase_number):
        self.number_served += _increase_number

if __name__ == '__main__':
    Restaurant_1 = Restaurant('NAME', 'TYPE')
    Restaurant_1.set_number_served()
    print(Restaurant_1.number_served)
    Restaurant_1.increment_number_served()
    print(Restaurant_1.number_served
           

9-6

冰淇淋小店是一種特殊的餐館。編寫一個名為IceCreamStand 的類,讓它繼承你為完成練習9-1或練習9-4而編寫的Restaurant 類。這兩個版本的Restaurant 類都可以,挑選你更喜歡的那個即可。添加一個名為flavors 的屬性,用于存儲一個由各種口味的冰淇淋組成的清單。編寫一個顯示這些冰淇淋的方法。建立一個IceCreamStand 執行個體,并調用這個方法。

class Restaurant():
    def __init__(self, _name, _type):
        self.restaurant_name = _name
        self.cuisine_type = _type
    def describe_restaurant(self):
        print('restaurant_name:', self.restaurant_name)
        print('cuisine_type:', self.cuisine_type)
    def open_restaurant(self):
        print('Restaurant is open.')

class IceCreamStand(Restaurant):
    def __init__(self, _name, _type):
        super().__init__(_name, _type)
        self.flavors = ['orange', 'leamon', 'peach']
    def show_flavors(self):
        for flavor in self.flavors:
            print(flavor)

if __name__ == '__main__':
    Restaurant_1 = IceCreamStand('IceCreamHouse', 'IceCream')
    Restaurant_1.show_flavors()
           

9-9

在本節最後一個electric_car.py版本中,給Battery 類添加一個名為upgrade_battery() 的方法。這個方法檢查電瓶容量,如果它不是85,就将它設定為85。建立一輛電瓶容量為預設值的電動汽車,調用方法get_range() ,然後對電瓶進行更新,并再次調用get_range() 。你會看到這輛汽車的續航裡程增加了。

class Car():
    """一次模拟汽車的簡單嘗試"""
    def __init__(self, make, model, year):
        self.make = make
        self.model = model
        self.year = year
        self.odometer_reading = 
    def get_descriptive_name(self):
        long_name = str(self.year) + ' ' + self.make + ' ' + self.model
        return long_name.title()
    def read_odometer(self):
        print("This car has " + str(self.odometer_reading) + " miles on it.")
    def update_odometer(self, mileage):
        if mileage >= self.odometer_reading:
            self.odometer_reading = mileage
        else:
            print("You can't roll back an odometer!")
    def increment_odometer(self, miles):
        self.odometer_reading += miles

class Battery():
    def __init__(self, battery_size=):
        self.battery_size = battery_size
    def describe_battery(self):
        print("This car has a " + str(self.battery_size) + "-kWh battery.")
    def get_range(self):
        if self.battery_size == :
            range = 
        elif self.battery_size == :
            range = 
        message = "This car can go approximately " + str(range)
        message += " miles on a full charge."
        print(message)
    def upgrade_battery(self):
        if self.battery_size != :
            self.battery_size = 

class ElectricCar(Car):
    def __init__(self, make, model, year):
        super().__init__(make, model, year)
        self.battery = Battery()

my_tesla = ElectricCar('tesla', 'model s', )
my_tesla.battery.get_range()
my_tesla.battery.upgrade_battery()
my_tesla.battery.get_range()
           

9-10

将最新的Restaurant 類存儲在一個子產品中。在另一個檔案中,導入Restaurant 類,建立一個Restaurant 執行個體,并調用Restaurant 的一個方法,以确認import 語句正确無誤。

# restaurant.py
class Restaurant():
    def __init__(self, _name, _type):
        self.restaurant_name = _name
        self.cuisine_type = _type
        self.number_served = 
    def describe_restaurant(self):
        print('restaurant_name:', self.restaurant_name)
        print('cuisine_type:', self.cuisine_type)
    def open_restaurant(self):
        print('Restaurant is open.')
    def set_number_served(self, _number_served):
        self.number_served = _number_served
    def increment_number_served(self, _increase_number):
        self.number_served += _increase_number
           
# my_restaurant.py
from restaurant import Restaurant
Restaurant_1 = Restaurant('NAME', 'TYPE')
Restaurant_1.set_number_served()
print(Restaurant_1.number_served)
Restaurant_1.increment_number_served()
print(Restaurant_1.number_served
           

9-14

子產品random 包含以各種方式生成随機數的函數,其中的randint() 傳回一個位于指定範圍内的整數,例如,下面的代碼傳回一個1~6内的整數:

from random import randint
x = randint(, )
           

請建立一個Die 類,它包含一個名為sides 的屬性,該屬性的預設值為6。編寫一個名為roll_die() 的方法,它列印位于1和骰子面數之間的随機數。建立一個6面的骰子,再擲10次。 建立一個10面的骰子和一個20面的骰子,并将它們都擲10次。

from random import randint
class Die():
    def __init__(self, _sides = ):
        self.sides = _sides
    def roll_die(self):
        for i in range():
            print(randint(, self.sides))

Die_1 = Die()
Die_1.roll_die()
Die_2 = Die()
Die_2.roll_die()
Die_3 = Die()
Die_3.roll_die()