-
任務
如果沒有定義set方法,就不能對“屬性”賦值,這時,就可以創建一個只讀“屬性”。
請給Student類加一個grade屬性,根據?score?計算 A(>=80)、B、C(<60)。
?不會了怎么辦
用 @property 修飾 grade 的 get 方法即可實現只讀屬性。
參考代碼:
class?Student(object): ????def?__init__(self,?name,?score): ????????self.name?=?name ????????self.__score?=?score ????@property ????def?score(self): ????????return?self.__score [email protected] ????def?score(self,?score): ????????if?score?<?0?or?score?>?100: ????????????raise?ValueError('invalid?score') ????????self.__score?=?score ????@property ????def?grade(self): ????????if?self.score?<?60: ????????????return?'C' ????????if?self.score?<?80: ????????????return?'B' ????????return?'A' s?=?Student('Bob',?59) print?s.grade s.score?=?60 print?s.grade s.score?=?99 print?s.grade
查看全部 -
任務
請繼續完善Rational,使之可以轉型為float。
?不會了怎么辦
將self.p轉型為float類型,再作除法就可以得到float:
float(self.p) / self.q
參考代碼:
class?Rational(object): ????def?__init__(self,?p,?q): ????????self.p?=?p ????????self.q?=?q ????def?__int__(self): ????????return?self.p?//?self.q ????def?__float__(self): ????????return?float(self.p)?/?self.q print?float(Rational(7,?2)) print?float(Rational(1,?3))
查看全部 -
任務
Rational類雖然可以做加法,但無法做減法、乘方和除法,請繼續完善Rational類,實現四則運算。
提示:
減法運算:__sub__
乘法運算:__mul__
除法運算:__div__?不會了怎么辦
如果運算結果是 6/8,在顯示的時候需要歸約到最簡形式3/4。
參考代碼:
def?gcd(a,?b): ????if?b?==?0: ????????return?a ????return?gcd(b,?a?%?b) class?Rational(object): ????def?__init__(self,?p,?q): ????????self.p?=?p ????????self.q?=?q ????def?__add__(self,?r): ????????return?Rational(self.p?*?r.q?+?self.q?*?r.p,?self.q?*?r.q) ????def?__sub__(self,?r): ????????return?Rational(self.p?*?r.q?-?self.q?*?r.p,?self.q?*?r.q) ????def?__mul__(self,?r): ????????return?Rational(self.p?*?r.p,?self.q?*?r.q) ????def?__div__(self,?r): ????????return?Rational(self.p?*?r.q,?self.q?*?r.p) ????def?__str__(self): ????????g?=?gcd(self.p,?self.q) ????????return?'%s/%s'?%?(self.p?/?g,?self.q?/?g) ????__repr__?=?__str__ r1?=?Rational(1,?2) r2?=?Rational(1,?4) print?r1?+?r2 print?r1?-?r2 print?r1?*?r2 print?r1?/?r2
查看全部 -
Python內置的?sorted()函數可對list進行排序:
>>>sorted([36, 5, 12, 9, 21])
[5, 9, 12, 21, 36]但?sorted()也是一個高階函數,它可以接收一個比較函數來實現自定義排序,比較函數的定義是,傳入兩個待比較的元素 x, y,如果 x 應該排在 y 的前面,返回 -1,如果 x 應該排在 y 的后面,返回 1。如果 x 和 y 相等,返回 0。
調用 sorted() 并傳入 reversed_cmp 就可以實現倒序排序:
>>>?sorted([36,?5,?12,?9,?21],?reversed_cmp) [36,?21,?12,?9,?5]
sorted()也可以對字符串進行排序,字符串默認按照ASCII大小來比較:
例如:
>>>?sorted(['bob',?'about',?'Zoo',?'Credit']) ['Credit',?'Zoo',?'about',?'bob']
'Zoo'排在'about'之前是因為'Z'的ASCII碼比'a'小。
查看全部 -
filter()函數是?Python?內置的另一個有用的高階函數,filter()函數接收一個函數 f?和一個list,這個函數?f?的作用是對每個元素進行判斷,返回 True或 False,filter()根據判斷結果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新list。
注意:?s.strip(rm) 刪除 s 字符串中開頭、結尾處的 rm 序列的字符。
查看全部 -
print(str.upper())#?把所有字符中的小寫字母轉換成大寫字母 print(str.lower())?#?把所有字符中的大寫字母轉換成小寫字母 print(str.capitalize())?#?把第一個字母轉化為大寫字母,其余小寫 print(str.title())??#?把每個單詞的第一個字母轉化為大寫,其余小寫
例如:s[0].upper()表示第一個字母大寫
s[1:].lower表示從第二位開始往后的元素大寫字母轉換為小寫字母
查看全部 -
map()是 Python 內置的高階函數,它接收一個函數 f?和一個?list,并通過把函數 f 依次作用在 list 的每個元素上,得到一個新的 list 并返回。
注意:map()函數不改變原有的 list,而是返回一個新的 list。
利用map()函數,可以把一個 list 轉換為另一個 list,只需要傳入轉換函數。
查看全部 -
利用filter(),可以完成很多有用的功能,例如,刪除 None 或者空字符串:
def?is_not_empty(s): ????return?s?and?len(s.strip())?>?0 filter(is_not_empty,?['test',?None,?'',?'str',?'??',?'END'])
結果:['test', 'str', 'END']
注意:?s.strip(rm) 刪除 s 字符串中開頭、結尾處的 rm 序列的字符。
當rm為空時,默認刪除空白符(包括'\n', '\r', '\t', ' '),如下:
a?=?'?????123' a.strip()
結果:?'123'
a='\t\t123\r\n' a.strip()
結果:'123'
查看全部 -
reduce()函數也是Python內置的一個高階函數。reduce()函數接收的參數和 map()類似,一個函數 f,一個list,但行為和 map()不同,reduce()傳入的函數 f 必須接收兩個參數,reduce()對list的每個元素反復調用函數f,并返回最終結果值
查看全部 -
import math
def is_sqr(x):
? ? return len(str(math.sqrt(x)).split(".")[1]) == 1
print filter(is_sqr, range(1, 101))
查看全部 -
高階函數:能接收函數做參數的函數
變量可以指向函數
函數的參數可以接受變量
一個函數可以接受另一個函數作為參數
能接收函數做參數的函數就是高階函數
查看全部 -
一個py文件稱為一個模塊
不同的文件夾稱為包
包中包含多個模塊,以及__init__.py文件
import from import as
查看全部 -
閉包和裝飾器講解:https://www.bilibili.com/video/BV1JW411i7HR?from=search&seid=11281653268329324661
查看全部 -
任務
斐波那契數列是由 0, 1, 1, 2, 3, 5, 8...構成。
請編寫一個Fib類,Fib(10)表示數列的前10個元素,print Fib(10)?可以打印出數列的前 10 個元素,len(Fib(10))可以正確返回數列的個數10。
?不會了怎么辦
需要根據num計算出斐波那契數列的前N個元素。
參考代碼:
class?Fib(object): ????def?__init__(self,?num): ????????a,?b,?L?=?0,?1,?[] ????????for?n?in?range(num): ????????????L.append(a) ????????????a,?b?=?b,?a?+?b ????????self.numbers?=?L ????def?__str__(self): ????????return?str(self.numbers) ????__repr__?=?__str__ ????def?__len__(self): ????????return?len(self.numbers) f?=?Fib(10) print?f print?len(f)
查看全部 -
裝飾器講解:https://www.bilibili.com/video/BV11s411V7Dt?from=search&seid=4406434222455786909
查看全部
舉報