一、選擇題(32分)
1、python不支持的數據類型有 A
A、char
B、int
C、float
D、list
2. E
x = “foo”
y = 2
print(x+y)
A.foo B.foofoo C.foo2 D.2 E.An exception is thrown
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'}
5.Kvps = {‘1’:1,’2’:2} D
theCopy = kvps
kvps[‘1’] = 5
sum = kvps[‘1’] + theCopy[‘1’]
Print sum
A.1 B.2 C.7 D.10
6、以下何者是不合法的布爾表達式: B
A.x in range(6) B.3=a
C.e>5 and 4==f D(x-6)>5
7、下列表達式的值⼀定為True的是 B
A.5+4j>2-3j B.3>2==2
C. e>5 and 4==f D.(x-6)>5
8、已知x=43,ch=‘A’,y = 1,則表達式(x>=y and ch<‘b’ and y)的值是 B
A、0
B、1
C、出錯
D、True
9、下列表達式中返回 為True的是: C
A、3>2>2 #2是等於2的
B、’abc’>’xyz’ 比較的是ascii
C、0x56 > 56
D、(3,2)>(‘a’,’b’) #數字和字符串是不能進行比較的
10、下列Python語句正確的是(多選) AD
A、min = x if x < y else y
B、max = x > y ? x : y
C、if(x>y) print(x)
D、while True:pass
11.若k為整形,下述while循環執⾏的次數為: B
k=1000
while k>1:
print k
k=k/2
A.9 B.10 #python2中先是先有print k的,python是向下取整的,所以選9也是對的
C.11 D.100 #python中是print(k)
12、以下敘述正確的是: B
A、continue語句的作用是結束整個循環的執行 #本次循環
B、只能在循環體內使用break語句
C、在循環體內使用break語句或continue語句的作用相同
D、從多層循環嵌套中退出時,只能使用goto語句 #goto是C語言中的
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) 取第一到第三個元素___list(L[:3])___
2) 取倒數第二個元素__l[-2]_____
3) 取后十個元素_ l[-11:-1]______
4) 把L復制給L1用__l1 = list(l).copy()_____
3、判斷dict有沒有某個key用的方法是__get__in(in比較好)___
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
print “list2 = %s”%list2
print “list3 = %s”%list3
結果是:list1 = [10, 'a']
list2 = [123]
list3 = [10, 'a']
6.下⾯程序的輸出結果是:____yes_____
x=True
y=False
z=False
if x or y and x:
print("yes")
else:
print('no')
三、簡答題(20分)
1、如何判斷一個變量是不是字符串
答,假設變量a
使用print(type(a))方法,如果返回結果為str就說明該變量是字符串類型的
2、is 和 == 的區別
對於數字來說,is和==是沒有區別的
對於is判斷的是內存地址,==判斷的是值
3、Python⾥⾯如何實現tuple和list的轉換。
元祖轉換成列表list(tuple)
列表轉換成元祖tuple(list)
4、list和tuple有什么不同
list是可變類型
tuple是不可變類型
5、如何得到列表list的交集與差集。
列表先轉換為集合
集合相減得到差集
集合&集合得到交集
然后再將集合轉為列表
6、Python中定義函數時如何書寫可變參數和默認參數?
*args,key=1,**kwargs
7、*args和**kwargs在什么情況下會使⽤到?請給出使⽤**kwargs的事例
參數個數不確定的時候會用到,*args 在按位置傳入的參數
**kwargs在按關鍵字傳入參數
8、請描述unicode,utf-8,gbk等編碼之間的關系?
9、如何使用python刪除一個文件
import os
os.remove()
10、def func(a,b,c=0,*args,**kwargs):
pass
*args,**kwargs的作用是什么?
答:*args接收按位置傳參時傳入的多余的參數,**kwargs接收按關鍵字傳參時,傳入的多余的參數
四、寫代碼(38分)
1、d={‘a’:1,’b’:2,’c’:3}請打印出key、value對(3分)
d={'a':1,'b':2,'c':3} for key in d: print(key,d[key]) #這種方法好的原因是,節約內存
2、請寫出⼀段Python代碼實現刪除⼀個list⾥⾯的重復元素。(6分)
set1 = set(list) list = list(set1) 方法二: list = [1,2,3,4,1] new_list = [] for i in list: if i not in new_list: new_list.append(i) print(new_list)
3、使⽤Python/C 上機解決以下題⽬(13分)
1)
斐波那契數列1,2,3,5,8,13,21.....根據這樣的規律,編程求出400萬以內最⼤的斐波那契數,並求出他
是第⼏個斐波那契數。
方法一: count = 0 a = 1 b = 0 c=0 while c < 4000001: count += 1 c = a+b b = a a = c print(count-1) 方法二: count = 2 a,b = 1,2 while a+b < 4000000: c = a+b a = b b = c count += 1 print(c) print(count)
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"}
方法一:
dic={} dicta = {"a":1,"b":2,"c":3,"d":4,"f":"hello"} dictb = {"b":3,"d":5,"e":7,"m":9,"k":"world"} for i in dicta: if dictb.get(i): dic[i]=dicta[i]+dictb[i] dicta.update(dictb) dicta.update(dic) dic = dicta print(dic)
方法二
dicta = {"a":1,"b":2,"c":3,"d":4,"f":"hello"} dictb = {"b":3,"d":5,"e":7,"m":9,"k":"world"} dic = dicta for key in dictb: if key in dic: dic[key] = dic[key]+dictb[key] else: dic[key] = dictb[key] print(dic)
5、什么是裝飾器?寫⼀個裝飾器,可以打印輸出⽅法執⾏時長的信息(8分)
import time def wrapper(func): def inner(*args,**kwargs): start_time = time.clock() time.sleep(2) ret = func(*args,**kwargs) end_time = time.clock() new_time = (end_time - start_time) return print(new_time) return inner @wrapper def func(): print('aaa') func()
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 now():') ret = func(*args,**kwargs) return ret return inner @log def now(): print('2017-08-31') now()
附加題(20分)
有⼀個數據結構如下所⽰,請編寫⼀個函數從該結構數據中返回由指定的字段和對應的值組成的字
典。如果指定字段不存在,則跳過該字段。(10分)
data:{"time":"2016-08-05T13:13:05",
"some_id":"ID1234",
"grp1":{ "fld1":1,
"fld2":2},
"xxx2":{ "fld3":0,
"fld5":0.4},
"fld6":11,
"fld7":7,
"fld46":8}
fields:由"|"連接的以"fld"開頭的字符串,如:fld2|fld3|fld7|fld19
def select(data,fields):
# TODO:implementation
return result
def select(data,fields):
fields_lst = fields.split(‘|’)
for key in data:
if type(data[key]) == dict:
pass
return result
fileds = 'fld2|fld3|fld7|fld19' data={"time":"2016-08-05T13:13:05","some_id":"ID1234","grp1":{ "fld1":1,"fld2":2},"xxx2":{ "fld3":0,"fld5":0.4},"fld6":11,"fld7":7,"fld46":8} def select(*args,**kwargs): result = {} filed_list = fileds.split('|') for key in data: if key in filed_list: result[key] = data[key] elif type(data[key]) == dict: for inner_key in data[key]: if inner_key in filed_list: result[inner_key] = data[key][inner_key] return result print(select(data,fileds)) data={"time":"2016-08-05T13:13:05", "some_id":"ID1234", "grp1":{ "fld1":1,"fld2":2}, "xxx2":{ "fld3":0,"fld5":0.4}, "fld6":{ "key":{"fld19":1}}, "fld7":7,"fld46":8}
# 壓棧思想,也可以使用遞歸的方法去寫
def select(data,fileds): l = [data] field_lst = fileds.split('|') result = {} while l: s = l.pop() for key in s: if type(s[key])==dict: l.append(s[key]) elif key in field_lst: result[key] = s[key] return result fileds = 'fld2|fld3|fld7|fld19' print(select(data,fileds))