1. 程式人生 > >王濤12.17作業

王濤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