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()