操千曲而識譜佳窑,認千劍而知器,學(xué)而問者千篇父能,悟者為上
- 題1---singleton 模式
該題的本意或者說想要達到的理想目的是:改變一個子類的屬性神凑,不管聲明多少個新的不同的實例對象,其相應(yīng)的屬性值是一樣的
在進行編碼之前何吝,預(yù)備知識有兩點溉委,一就是__ new _(cls)與_ init __ (self) 之間的區(qū)別,二就是super()單線程子類繼承
- 用一句話概括就是前者是聲明的一個實例爱榕,而后者聲明的是一個對象瓣喊,直白的講,比如你想要把一堆人分為一類黔酥,那么你需要先從這一堆人中找一個對象藻三,然后自定義的給他聲明一些屬性(胡子,身高等)這就是init 初始化的作用絮爷,而你要判斷這些屬性適合不適合于其他的人趴酣,你就要從這堆人中找到一個人,而這個人就是你要研究的實例對象
... def print_c(self):
... print"hello world!"
...
class child(hello):
... def print_c(self):
... super(child,self).print_c()
...
child().print_c()
hello world!
下面開始解題
方法一:利用繼承類來實現(xiàn)
class singleton1(object):
def __new__(cls):
if not hasattr(cls,'instance'):#當假設(shè)cls這個實例沒有instance屬性的時候
ori=super(singleton1,cls)#將sington1作為cls的一個子類坑夯,重新定義了一個新的類
cls.intsance=ori.__new__(cls)
return cls.intsance
class my(singleton1):
def __init__(self):
self.a=1
def main():
l1=my()
l2=my()
print (l1==l2)
l1.a=3
print (l2.a)
print (l1.a)
if __name__=='__main__':
main()
方法二:只需要super 聲明的子類具有和原來的實例cls 具備同樣的屬性即可
class singleton(object):
dic={}
def __new__(cls):
descent=super(singleton,cls)#聲明一個子類
descent.__dict__=cls.dic#子類和父類實例的屬性相同
return descent
class mysecond(singleton1):
def __init__(self):
self.a=1
def main():
l1=mysecond()
l2=mysecond()
print (l1==l2)
l1.a=3
print (l2.a)
print (l1.a)
方法三:最為簡單岖寞,其本質(zhì)上沒有兩個兩個實例之間的互動,而是通過__ init __的屬性初始化完成單線程的目的
class mythird(object):
def __init__(self,a):
self.a=a
def main():
l1=mythird()
l2=mythird()
l1.a=3
print (l2.a)
-
題2---二維數(shù)組的查找
查找一個數(shù)是否屬于一個二維數(shù)組柜蜈,原題信息如下截圖:
解題的過程實際上就是選擇algorithm 的過程仗谆,這也是為什么算法這么的重要,在該書中有這么一段話很值得算法研究人員的思考(可能對我這種菜鳥感觸太大了)淑履,因此摘錄下來:
當我們分析一個復(fù)雜的問題的時候隶垮,無從下手,或者后續(xù)步驟越來越復(fù)雜秘噪,使得開頭容易狸吞,后續(xù)剪不斷理還亂的思緒交叉,這時候就需要從一個簡單的具體實例出發(fā)指煎,試圖尋找其普遍規(guī)律 ----書中以插找7為例蹋偏,首先右上角9>7,因此根據(jù)二維數(shù)組的排布規(guī)律,可以刪除該列至壤,一直刪除到前兩列威始,由于2<7所以刪除行,直到在 刪除1前兩行后像街,檢測到7
- 普適規(guī)律:首先選取右上角的數(shù)黎棠,如果該數(shù)字等于要查找的數(shù)晋渺,就停止查找,否則如果該數(shù)字大于要查找的數(shù)字脓斩,就刪除對應(yīng)的列木西,反之,就刪除對應(yīng)的行
下面為封裝代碼:
#二維數(shù)組的查找随静,算法就是根據(jù)書中的理念
import numpy as np
import pandas as pd
from pandas import Series
from pandas import DataFrame
#下面的例子是以整數(shù)二維數(shù)組為例
class search(object):
#在全局變量中定義一個array可以用np.arange(12).reshape((3,4))
def __init__(self,array,target):
self.array=array
self.target=target
def judge(self):
list=[]
if self.array==np.array(list):
return False
def num(self):
row=int(np.shape(self.array)[0])#得到行數(shù)
column=int(np.shape(self.array)[1])#得到列數(shù)
return column,row
def permit(self):
if type(self.target)!=int:
self.target=int(self.target)#對其格式進行匹配
def finder(self):
i,j=self.num()#通過num()方法拿到列數(shù)行數(shù)
m=0#重新定義行數(shù)
n=i-1#將列數(shù)賦值給n户魏,之所以為i-1,是因為列索引是從0開始的
while n>=0 and m<=(j-1):#當列數(shù)還在索引范圍之內(nèi),且行數(shù)也在索引范圍之內(nèi)時
if self.array[m][n]<self.target:#當右上角的數(shù)小于要查找的數(shù)字時
j+=1#刪除行
elif self.array[m][n]>self.target:
n-=1
else:
return True
return False
print ('the target was not in this aimed array')
def main():
array=np.arange(12).reshape((3,4))
s=search(array,8)
s.finder()
if __name__=='__main__':
main()
- 最近在看了不起的匠人,希望能夠靜心挪挤,2018新年的第一集:“非靜而無以為學(xué)叼丑,摒言、聽步扛门、聞鼠”
- 除去不可抗力因素外鸠信,希望能一日兩題,持續(xù)更新
- Freedom as autonomy