1. 程式人生 > >2018.4.2 Python作業

2018.4.2 Python作業

第九章 類

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

建立多個表示不同使用者的例項,並對每個例項都呼叫以上兩個方法。

class User():
    def __init__(self, first_name, last_name, sex, birth):
        self.first_name = first_name
        self.last_name = last_name
        self.sex = sex
        self.birth = birth

    def describe_user(self):
        print("First name: " + self.first_name)
        print("Last name: " + self.last_name)
        print("Sex: " + self.sex)
        print("Birth: " + self.birth)

    def greet_user(self):
        print("Hello " + self.first_name + " " + self.last_name)

user_1 = User("Eric", "Cartman", "male", "1995.7.1")
user_2 = User("Stan", "Marsh", "male", "1995.10.19")
user_3 = User("Wendy", "Testaburger", "female", "1995.8.13")

user_1.describe_user()
user_2.describe_user()
user_3.describe_user()

user_1.greet_user()
user_2.greet_user()
user_3.greet_user()

9-5 嘗試登陸次數:在為完成練習9-3而編寫的User類中,新增一個名為login_attempts的屬性。編寫一個increment_login_attempts()的方法,它將屬性login_attempts的值加1。再編寫一個名為reset_login_attempts()的方法,它將屬性login_attempts的值重置為0。

根據User類建立一個例項,再呼叫方法increment_login_attempts()多次。列印屬性login_attempts的值,確定它被正確地遞增;然後,呼叫方法reset_login_attempts(),並再次列印屬性login_attempts的值,確認它被重置為0。

class User():
    def __init__(self, first_name, last_name, sex, birth):
        self.first_name = first_name
        self.last_name = last_name
        self.sex = sex
        self.birth = birth
        self.login_attempts = 0

    def describe_user(self):
        print("First name: " + self.first_name)
        print("Last name: " + self.last_name)
        print("Sex: " + self.sex)
        print("Birth: " + self.birth)

    def greet_user(self):
        print("Hello " + self.first_name + " " + self.last_name)

    def increment_login_attempts(self):
        self.login_attempts += 1

    def reset_login_attempts(self):
        self.login_attempts = 0

user_1 = User("Eric", "Cartman", "male", "1995.7.1")
user_1.increment_login_attempts()
print(user_1.login_attempts)

user_1.increment_login_attempts()
user_1.increment_login_attempts()
print(user_1.login_attempts)

user_1.reset_login_attempts()
print(user_1.login_attempts)

9-7 管理員:管理員是一種特殊的使用者。編寫一個名為Admin的類,讓它繼承你為完成練習9-3或練習9-5而編寫的User類。新增一個名為privileges的屬性,使用者儲存一個由字串(如“can add post”、“can delete post”、”can ban user”等)組成的列表,編寫一個名為show_privileges()的方法,它顯示管理員的許可權。建立一個Admin例項,並使用方法show_privileges()來顯示其許可權。

class User():
    def __init__(self, first_name, last_name, sex, birth):
        self.first_name = first_name
        self.last_name = last_name
        self.sex = sex
        self.birth = birth
        self.login_attempts = 0

    def describe_user(self):
        print("First name: " + self.first_name)
        print("Last name: " + self.last_name)
        print("Sex: " + self.sex)
        print("Birth: " + self.birth)

    def greet_user(self):
        print("Hello " + self.first_name + " " + self.last_name)

    def increment_login_attempts(self):
        self.login_attempts += 1

    def reset_login_attempts(self):
        self.login_attempts = 0

class Admin(User):
    def __init__(self, first_name, last_name, sex, birth):
        super().__init__(first_name, last_name, sex, birth)
        self.privileges = ["You can add post", "You can delete post", "You can ban user"]

    def show_privileges(self):
        print(self.privileges[0])
        print(self.privileges[1])
        print(self.privileges[2])

admin = Admin("Wendy", "Testaburger", "female", "1995.8.13")
admin.show_privileges()

9-12 多個模組:將User類儲存在一個模組中,並將Privileges和Admin類儲存在另一個模組中。再建立一個檔案,在其中建立一個Admin例項,並對其呼叫方法show_privileges(),以確認一切都依然能夠正確地執行。

#User.py

class User():
    def __init__(self, first_name, last_name, sex, birth):
        self.first_name = first_name
        self.last_name = last_name
        self.sex = sex
        self.birth = birth
        self.login_attempts = 0

    def describe_user(self):
        print("First name: " + self.first_name)
        print("Last name: " + self.last_name)
        print("Sex: " + self.sex)
        print("Birth: " + self.birth)

    def greet_user(self):
        print("Hello " + self.first_name + " " + self.last_name)

    def increment_login_attempts(self):
        self.login_attempts += 1

    def reset_login_attempts(self):
        self.login_attempts = 0
#Admin.py

from User import User

class Privileges():
    def __init__(self):
        self.privileges = ["You can add post", "You can delete post", "You can ban user"]

    def show_privileges(self):
        print(self.privileges[0])
        print(self.privileges[1])
        print(self.privileges[2])

class Admin(User):
    def __init__(self, first_name, last_name, sex, birth):
        super().__init__(first_name, last_name, sex, birth)
        self.privileges = Privileges()
#main.py

from Admin import Admin
from Admin import Privileges

admin = Admin("Wendy", "Testaburger", "female", "1995.8.13")
admin.privileges.show_privileges()

9-14 骰子:模組random包含以各種方式生成隨機數的函式,其中的randint()返回一個位於指定範圍內的整數,例如,下面的程式碼返回一個1~6以內的整數:

from random import randint

x = randint(1, 6)

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

建立一個10面的骰子和一個20面的骰子,並將它們都擲10次。

from random import randint

class Die():
    def __init__(self, surface):
        self.surface = surface

    def roll_die(self):
        print(randint(1, self.surface))

die_1 = Die(6)
for i in range(0, 10):
    die_1.roll_die()

die_2 = Die(10)
for i in range(0, 10):
    die_2.roll_die()

die_3 = Die(20)
for i in range(0, 10):
    die_3.roll_die()