一、選擇題(32分)
1、python不支持的數據類型有:(A)
A、char B、int C、float D、list
2、x = “foo”
y = 2
print(x+y) (E)
A.foo B.foofoo C.foo2 D.2 E.An exception is thrown
解釋:不同數據類型不可以相加,但是字符串可以與數字相乘,以上例題若改為print(x*y),結果為B答案
3、關於字符串下列說法錯誤的是:(B)
A、字符應該視為長度為1的字符串 B、字符串以\0標志字符串的結束
C、既可以用單引號,也可以用雙引號創建字符串 D、在三引號字符串中可以包含換行回車等特殊字符
4、以下不能創建一個字典的語句是:(C)
A、dic1 = {} B、dic2 = {123:345} C、dic3 = {[1,2,3]:'uestc'} D、dic3 = {(1,2,3):'uestc'}
解釋:字典的key值必須為不可變數據類型
5.答案為:(D)
Kvps = {‘1’:1,’2’:2} theCopy = kvps kvps[‘1’] = 5 sum = kvps[‘1’] + theCopy[‘1’] Print sum
A.1 B.2 C.7 D.10
解釋:kvps與thecopy是賦值關系,指向的為同一個內存地址,一個發生變化,則均會發生變化
6、以下何者是不合法的布爾表達式:(B)
A.x in range(6) B.3=a C.e>5 and 4==f D(x-6)>5
解釋:py2中range()為列表類型,xrange()為一個生成器,py3中只有range(),與py2中的xrange()性質基本相同,A答案在這三種環境中均為合法的bool值,
bool表達式即有判斷作用的語句,B答案為賦值,無判斷作用
7、下列表達式的值為True的是:(無答案)
A.5+4j>2-3j B.3>2>2 C.e>5 and 4==f D.(x-6)>5
解釋:A答案為復數,復數不可以比大小
8、已知x=43,ch=‘A’,y = 1,則表達式(x>=y and ch<‘b’ and y)的值是:(B)
A、0 B、1 C、出錯 D、True
解釋:結果與y值相同,若表達式改為:(x>=y and ch<‘b’ and y>0),則結果為:True
9、下列表達式中返回 為True的是:(C)
A、3>2>2 B、’abc’>’xyz’ C、0x56 >56 D、(3,2)<(‘a’,’b’)
解釋:A、B結果為False,正確答案為C,十六進制數字比十進制大,D答案不合法,int與str數據類型不可以比較,若改為('a',2)<('b',3)則輸出True
10、下列Python語句正確的事:(AD)
A、min = x if x < y else y B、max = x > y ? x : y (c語言三元運算符) C、if(x>y) print(x) D、while True:pass
11.若k為整形,下述while循環執的次數為:(A)
k=1000 while k>1: print k k=k/2
A.9 B.10 C.11 D.100
解釋:通過print語句判斷為py2中代碼,py2中除法為向下取整
12、以下敘述正確的是:(B)
A、continue語句的作用是結束整個循環的執行 B、只能在循環體內使用break語句
C、在循環體內使用break語句或continue語句的作用相同 D、從多層循環嵌套中退出時,只能使用goto語句
13、關於python中的復數,下列說法錯誤的是:(B)
A、表示復數的語法是real+image j B、實部和虛部都是浮點數 C、虛部必須后綴j且j不區分大小寫 D、方法conjugate返回復數的共軛復數
14、下面的語句哪個會無限循環下去:(B)
A、for a in range(10):
time.sleep(10)
B、while 1<10:
time.sleep(10)
C、while True:
break
D、a = [3,-1,',']
for i in a[:]:
if not a:
break
15、下面的代碼,哪些會輸出1,2,3三個數字(多選,選錯不得分):(BD)
A 、for i in range(3):
print(i)
B、aList = [0,1,2]
for i in aList:
print(i+1)
C、i = 1
while i < 3:
print(i) i+=1
D、for i in range(3):
print(i+1)
16、Python如何定義一個函數:(C)
A、class <name>(<type> arg1,<type> arg2,…<type> argN) B、function <name>(arg1,arg2,…argN)
C、def <name>(arg1,arg2,…argN) D、def <name>(<type> arg1,<type> arg2,…<type> argN)
二、填空題(10分)
1、以下函數需要在其中飲用一個全局變量k,請填寫語句: def fun():
_____#global.k
k = k+1
2、L=range(100) #生成器可以可以直接作為列表取值
1) 取第一到第三個元素_______L[0:4]
2) 取倒數第二個元素_______L[-2]
3) 取后十個元素_______L[-10:]
4) 把L復制給L1用_______L1=L.copy()
3、判斷dict有沒有某個key用的方法是_______dic.get(key)
4、獲取list的元素個數,和向末尾追加元素的方法分別是______len() _______append()
5.以下的代碼的輸出將是什么: _______
def extendList(val,list=[]): list.append(val) return list list1 = extendList(10) list2 = extendList(123, []) list3 = extendList('a') print('list1 = % s' %list1) #輸出結果為:list1 = [10, 'a'] print('list2 = % s' %list2) #輸出結果為:list2 = [123] print('list3 = % s' %list3) #輸出結果為:list3 = [10, 'a']
解釋:函數中可變默認參數存在陷阱,重復調用會使原默認參數發生變化
6.下 程序的輸出結果是:_________yes
x=True y=False z=False if x or y and x: print "yes" else: print "no"
三、簡答題(20分)
1、如何判斷一個變量是不是字符串。------if type(name)==str
2、is 和 == 的區別。
3、Python 如何實現tuple和list的轉換。------tuple(),list()
4、list和tuple有什么不同。------list為可變數據類型,tuple為不可變數據類型
5、如何得到列表list的交集與差集。------利用set(),將列表轉換為集合數據類型,利用difference()方法求差集,利用intersection()方法求交集
6、Python中定義函數時如何書寫可變參數和關鍵字參數?------順序為(位置參數,*args,關鍵參數,**kwargs)
7、*args和**kwargs在什么情況下會使 到?請給出使 **kwargs的事例------定義函數時參數不確定時用,例裝飾器
8、請描述unicode,utf-8,gbk等編碼之間的關系?
9、如何使用python刪除一個文件
import os
os.remove(‘file’)
10、def func(a,b,*args,c=0,**kwargs):pass ,*args,**kwargs的作用是什么?
四、寫代碼(38分)
1、d={‘a’:1,’b’:2,’c’:3}請打印出key、value對(3分)
#思路一: d={'a':1,'b':2,'c':3} for i in d: print(i,d[i]) #思路二: d = {'a': 1, 'b': 2, 'c': 3} for a,b in d.items(): print(a, b)
2、請寫出 段Python代碼實現刪除 個list 的重復元素。(6分)
#方法一: li=[1,'a',2,4,2,'a'] se=set(li) li=list(se) print(li) #方法二: li=[1,'a',2,4,2,'a'] result=[] for i in range(0,len(li)): for j in range(i+1,len(li)): if li[i]==li[j]: result.append(li[i]) for i in li: if i not in result: result.append(i) print(result)
3、使 Python/C 上機解決以下題 (13分)
1)、斐波那契數列1,2,3,5,8,13,21.....根據這樣的規律,編程求出400萬以內最大的斐波那契數,並求出他是第 個斐波那契數。
li=[1,2] while li[-1]<4000000: li.append(li[-1]+li[-2]) del li[-1] print(li[-1]) print(len(li))
2)、dicta = {"a":1,"b":2,"c":3,"d":4,"f":"hello"} ,dictb = {"b":3,"d":5,"e":7,"m":9,"k":"world"}
要求寫 段代碼,實現兩個字典的相加,不同的key對應的值保留,相同的key對應的值相加后保留,如果是字符串就拼接,如上 例得到結果為:
dictc = {"a":1,"b":5,"c":3,"d":9,"e":7,"m":9,"f":"hello","k":"world"}
dicta={'a':1,'b':2,'c':3,'d':4,'f':'hello'} dictb={'b':3,'d':5,'e':7,'m':9,'k':'world'} dic={} for key1 in dicta: for key2 in dictb: if key1==key2: dic[key1]=dicta[key1]+dictb[key2] for a in dicta: if a not in dic: dic[a]=dicta[a] for b in dictb: if b not in dic: dic[b]=dictb[b] print(dic)
5、什么是裝飾器?寫 個裝飾器,可以打印輸出 法執 時長的信息(8分)
裝飾器:在不修改原函數內容及調用方式上,實現函數的功能擴展
import time def timmer(func): def inner(*args,**kwargs): start=time.time() ret=func(*args,**kwargs) end=time.time() print(end-start) return ret return inner @timmer def name(a,b): print('%s+%s等於%s' %(a,b,a+b)) name(3,5)
6、請寫出log的實現(主要功能是打印函數名)(8分)
@log
def now():
print ‘2017-08-31’
>>>now()
輸出: call now():
2017-08-31
def log(func): def inner(*args,**kwargs): print('call %s()' %func.__name__) ret=func(*args,**kwargs) return ret return inner @log def now(): print('2017-08-31') now()
data={'time':'2016-08-05T13;13:05', 'some_ID':'ID1234', 'graps1':{'fld1':1,'fld2':2}, 'xxx2':{'fld3':0,'fld5':0.4}, 'fld6':11, 'fld7':7, 'fld':8 } # 類遞歸思想 # 棧的思想 fields = 'fld2|fld3|fld7|fld9' fields_lst = fields.split('|') #['fld2', 'fld3', 'fld7', 'fld9'] result = {} data_lst = [1] while data != 1: for key in data: if key in fields_lst: result[key] = data[key] if type(data[key]) == dict: data_lst.append(data[key]) data = data_lst.pop() print(result)