王濤12.17作業
阿新 • • 發佈:2018-12-17
1.以下程式輸出結果是什麼 a = 1 def fun(a): a = 2 fun(a) print (a) a = [] def fun(a): a.append(1) fun(a) print(a) 1 [1]
2.請簡要說明什麼是類變數,什麼是例項變數,並觀察以下程式的輸出結果 class Person: name="aaa" p1=Person() p2=Person() p1.name="bbb" print(p1.name) print(p2.name) print(Person.name) 類變數所有例項都可以用 例項變數只能在變數自身使用 bbb aaa aaa
3.以下語句有什麼弊端,name是元祖的時候,程式會是什麼樣的結果,如何避免 "hi there %s" % name 報錯 將name轉換成str
4.閱讀下面的程式碼,寫出A0,A1至An的最終值。 A0 = dict(zip(('a','b','c','d','e'),(1,2,3,4,5))) A1 = range(10) A2 = [i for i in A1 if i in A0] A3 = [A0[s] for s in A0] A4 = [i for i in A1 if i in A3] A5 = {i:i*i for i in A1} A6 = [[i,i*i] for i in A1] {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5} (0,1,2,3,4,5,5,,6,7,8,9) [] [1, 2, 3, 4, 5] [1, 2, 3, 4, 5] {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81} [[0, 0], [1, 1], [2, 4], [3, 9], [4, 16], [5, 25], [6, 36], [7, 49], [8, 64], [9, 81]]
5.你如何管理不同版本的程式碼? 分開存放,命名
6.下面程式碼會輸出什麼: def f(x,l=[]): for i in range(x): l.append(i*i) print(l) f(2) f(3,[3,2,1]) f(3) [0,1] [3,2,1,0,1,4] [0,1,0,1,4]
7.這兩個引數是什麼意思:*args,**kwargs?我們為什麼要使用它們? 可變引數 關鍵字引數 因為好用,包含了所有引數變數
8.閱讀下面的程式碼,它的輸出結果是什麼? class A(object): def go(self): print "go A go!" def stop(self): print "stop A stop!" def pause(self): raise Exception("Not Implemented") class B(A): def go(self): super(B, self).go() print "go B go!" class C(A): def go(self): super(C, self).go() print "go C go!" def stop(self): super(C, self).stop() print "stop C stop!" class D(B,C): def go(self): super(D, self).go() print "go D go!" def stop(self): super(D, self).stop() print "stop D stop!" def pause(self): print "wait D wait!" class E(B,C): pass a = A() b = B() c = C() d = D() e = E() # 說明下列程式碼的輸出結果 a.go() b.go() c.go() d.go() e.go() a.stop() b.stop() c.stop() d.stop() e.stop() a.pause() b.pause() c.pause() d.pause() e.pause()
9.請寫出一段Python程式碼實現刪除一個list裡面的重複元素 s = [2,3,2,4,6,7,5,2,] for i in s: if s.count(i) > 1: s.remove(i) print(s)
10.單引號,雙引號,三引號的區別 單引號雙引號一樣,寫法不同 三引號是註釋且可以換行
11.寫一個函式, 輸入一個字串, 返回倒序排列的結果 輸入: string_reverse(‘abcdef') , 返回: ‘fedcba',寫出你能想到的多種方法 a= input("輸入一個字串") n = list(a) n.reverse() l = "" for i in range(len(n)): l += n[i] print(l) n = input("輸入一個字串:") print(n[::-1])
12. 單例模式(Singleton Pattern)是一種常用的軟體設計模式,該模式的主要目的是確保某一個類只有一個例項存在。利用當前我們所學知識,嘗試使得所建立的類是單例項模式
程式設計練習
1.定義一個點(Point)類和直線(Line)類,使用 getLen 方法可以獲得直線的長度。`?^$q=:dI
提示:
- 設點 A(X1,Y1)、點 B(X2,Y2),則兩點構成的直線長度 |AB| = √((x1-x2)2+(y1-y2)2)
- Python 中計算開根號可使用 math 模組中的 sqrt 函式
- 直線需有兩點構成,因此初始化時需有兩個點(Point)物件作為引數
2.列表[1,2,3,4,5],請使用map()函式輸出[1,4,9,16,25],並使用列表推導式提取出大於10的數,最終輸出[16,25] a=[1,2,3,4,5] n=map(lambda x : x**2, [1,2,3,4,5]) print(n) s = [i for i in n if i > 10] print(s)
坦克
某次戰役中,為便於資訊互動,我軍偵察部門將此次戰役的關鍵高地座標設定為(x=0,y=0)並規定,每向東增加100米,x加1,每向北增加100米,y加1。同時,我軍情報部門也破譯了敵軍向坦克傳送的指揮訊號,其中有三種訊號(L,R,M)用於控制坦克的運動,L 和 R 分別表示使令坦克向左、向右轉向,M 表示令坦克直線開進100米,其它訊號如T用於時間同步,P用於位置較準。
一日,我軍偵察兵發現了敵軍的一輛坦克,偵察兵立即將坦克所在座標(P, Q)及坦克前進方向(W:西,E:東,N:北,S:南)傳送給指揮部,同時啟動訊號接收器,將坦克接收到的訊號實時同步發往指揮部,指揮部根據這些資訊得以實時掌控了該坦克的位置,並使用榴彈炮精準地擊毀了該坦克。
請設計合理的資料結構和演算法,根據坦克接收到的訊號,推斷出坦克所在的位置。
設計時請考慮可能的擴充套件情況,並體現出您的設計風格。
假設,偵察兵傳送給指揮部的資訊如下:
坦克座標:(11,39)
坦克執行方向:W
坦克接收到的訊號為:MTMPRPMTMLMRPRMTPLMMTLMRRMP
其位置應該是(9,43),運動方向為E