1. 程式人生 > >Python筆試題(一)

Python筆試題(一)

1.列表(list)和元組(tuple)的區別

列表是可以修改的
元組不能修改

定義:
list: 連結串列, 有序的專案, 通過索引進行查詢, 使用方括號"[]";
tuple:元組, 元組將多樣的物件集合到一起, 不能修改, 通過索引進行查詢, 使用括號"()";
dict:字典, 字典是一組鍵(key)和值(value)的組合, 通過鍵(key)進行查詢, 沒有順序, 使用大括號"{}";
set:集合,無序, 元素只出現一次, 自動去重, 使用"set([])"; 應用場景:
1. list, 簡單的資料集合, 可以使用索引;
2. tuple, 把一些資料當做一個整體去使用, 不能修改;
3. dict, 使用鍵值和值進行關聯的資料; 4. set, 資料只出現一次, 只關心資料是否出現, 不關心其位置;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

2. 集合(set)是怎樣的一種資料型別,何時使用?


set集合,是一個無序且不重複的元素集合。
集合物件是一組無序排列的可雜湊的值,集合成員可以做字典中的鍵。集合支援用innot in
操作符檢查成員,由len()內建函式得到集合的基數(大小), 用 for 迴圈迭代集合的成員。但是
因為集合本身是無序的,不可以為集合建立索引或執行切片(slice)操作,也沒有鍵(keys)可用
來獲取集合中元素的值。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

3.請在下面的空白處填寫執行結果


>>>seq = [1, 2, 3, 4]
>>>seq[:2]
_____________________________
>>>seq[-2:]
_____________________________
>>>seq[10:]
_____________________________
>>>seq[::-1]
_____________________________
>>>seq[:]
_____________________________
>>> id(seq[:]
) == id(seq) _____________________________ >>> seq = [1, 2, 3, 4] >>> seq[-2] 3 >>> seq[10:] [] >>> seq[10] Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: list index out of range >>> seq[::-1] [4, 3, 2, 1] >>> seq[:] [1, 2, 3, 4] >>> id(seq[:]) == id(seq) False >>>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

4.優化以下程式

result = []
for x in range(10):
result.append(x ** 2)
print(result)
優化後
>>> result = [x**2 for x in range(10)]
>>> print result
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

5.函式、類方法定義中如何實現可選引數、可選關鍵詞引數

deffuncArgsTest(a,b,c=100,*argc,**kwarg):
    sum = a + b + c
    for d in argc:
        sum += d
    for v in kwarg.itervalues():
        sum += v
    return sum

print funcArgsTest(100,200,300,500,600,aa=700,bb=900,cc=1000)

==>4300
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

6.請解釋classmethod和staticmethod的區別

classClassTest(object):
    def__init__(self,a):
        self.a = a
    defprintk(self):
        print "a is ",self.a

    @classmethod
    defclass_method(*args):
        print  "args is ",args


    @classmethod
    defclass_method2(cls):
        print "cls is ",cls


    @staticmethod
    defstatic_method(*args):
        print "args is ",args

ct = ClassTest(100)
ct.printk()
ct.class_method()
ct.static_method()
ct.class_method2()

==>
a is  100
args is  (<class '__main__.ClassTest'>,)
args is  ()
cls is  <class '__main__.ClassTest'>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

7. 請給出下列程式的執行結果

>>>x = 0.5
>>>while x != 1.0
>>>print(x)
>>> x += 0.1
此題考查浮點數比較相等的情況,x != 1.0 這樣程式並不會結束
因為浮點數相等比較不能通過==,應該是一個範圍,可以使用 x <= 1.0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

8.請寫一段程式,包含迭代器和生成器的使用

>>> for xa in (x for x in range(10)):
...    print xa
... 
0
1
2
3
4
5
6
7
8
9

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

9.請根據age分別對student_tuples及student_objects進行排序

>>>student_tuples = [
('john', 'A', 15),
('jane', 'B', 12),
('dave', 'B', 10),
]
說明:每一行的三個元素分別代表name, grade, age.
>>> classStudent:
def__init__(self, name, grade, age):
self.name = name
self.grade = grade
self.age = age
def__repr__(self):
return repr((self.name, self.grade, self.age))
>>>student_objects = [
Student('john', 'A', 15),
Student('jane', 'B', 12),
Student('dave', 'B', 10),


sorted(student_tuples,key = lambda x : x[2])
sorted(student_objects,key = lambda s : s.age)


classStudent:

   def__init__(self, name, grade, age):

      self.name = name

      self.grade = grade

      self.age = age

   def__repr__(self):
      return repr((self.name, self.grade, self.age))

student_objects = [

Student('john', 'A', 15),

Student('jane', 'B', 12),

Student('dave', 'B', 10),
]
print sorted(student_objects,key = lambda s:s.age)


[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50

10.如何使用匿名函式


>>> map(lambda x : x**2,[1,2,3])
[1, 4, 9]
>>> filter(lambda x: x >1 ,[1,2,3])
[2, 3]
>>> map(lambda x : x**2,[1,2,3])
[1, 4, 9]
>>> reduce(lambda x,y: x + y,[1,2,3])
6
>>> filter(lambda x: x >1 ,[1,2,3])
[2, 3]
>>> 

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

11.何時使用標準庫 collections 中的deque?

deque其實是 double-ended queue 的縮寫,翻譯過來就是雙端佇列,它最大的好處就是實現了從佇列 頭部快速增加和取出物件: 
.popleft(), 
.appendleft()
但是值得注意的是,list物件的這兩種用法的時間複雜度是 O(n) ,也就是說隨著元素數量的增加耗時呈 線性上升。而使用deque物件則是 O(1) 的複雜度,所以當你的程式碼有這樣的需求的時候, 一定要記得使用deque。

deque還可以限制佇列長度,如果長於佇列則會刪除

如果是是append則會刪除最左端的元素
如果是apppendleft則會刪除最右端的元素

>>> dq = deque([],3)
>>> dq.append(1)
>>> dq.append(2)
>>> dq.append(3)
>>> print dq
deque([1, 2, 3], maxlen=3)
>>> dq.append(4)
>>> print dq
deque([2, 3, 4], maxlen=3)

>>> dq = deque([],3)
>>> print dq
deque([], maxlen=3)
>>> dq.append(1)
>>> dq.append(2)
>>> dq.append(3)
>>> print dq
deque([1, 2, 3], maxlen=3)
>>> dq.appendleft(4)
>>> print dq
deque([4, 1, 2], maxlen=3)
>>> 


collections中有幾個非常好用的資料型別
Python擁有一些內建的資料型別,比如str, int, list, tuple, dict等, collections模組在這些內建資料型別的基礎上,提供了幾個額外的資料型別:

    namedtuple(): 生成可以使用名字來訪問元素內容的tuple子類
    deque: 雙端佇列,可以快速的從另外一側追加和推出物件
    Counter: 計數器,主要用來計數
    OrderedDict: 有序字典
    defaultdict: 帶有預設值的字典
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

12.標準庫 copy 中的 copy 和deepcopy的區別

copy.copy()是淺拷貝
copy.deepcopy()是深拷貝
>>> import copy
>>> lista = [1,2,3,['a','b']]
>>> listb = copy.copy(lista)
>>> listc = copy.deepcopy(lista)
>>> lista
[1, 2, 3, ['a', 'b']]
>>> listb
[1, 2, 3, ['a', 'b']]
>>> listc
[1, 2, 3, ['a', 'b']]
>>> lista.append(5)
>>> lista
[1, 2, 3, ['a', 'b'], 5]
>>> listb
[1, 2, 3, ['a', 'b']]
>>> listc
[1, 2, 3, ['a', 'b']]
>>> id(lista)
3085189868L
>>> id(listb)
3084763820L
>>> id(listc)
3085198380L

>>> lista[3].append('c') 
>>> lista
[1, 2, 3, ['a', 'b', 'c'], 5]
>>> listb
[1, 2, 3, ['a', 'b', 'c']]
>>> listc
[1, 2, 3, ['a', 'b']]
>>> 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

13.標準庫 re 正則表示式 match 和 search 區別


re.match是從字串首字母處匹配
re.search是遍歷整個字串匹配


>>> str1 = "<abc>aaa</abc>"
>>> re.match("<",str1)
<_sre.SRE_Match object at 0xb7dd7e90>
>>> m = re.match("<",str1)
>>> m.group()
'<'
>>> str1 = "xyz<abc>aaa</abc>"
>>> m = re.match("<",str1)
>>> m.group()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
>>> re.search("<",str1)
<_sre.SRE_Match object at 0xb7dd2988>
>>> ms = re.search("<",str1)
>>> ms.group()
'<'
>>> 


>>> import re
>>> help(re.match)
Help on function match in module re:

match(pattern, string, flags=0)
    Try to apply the pattern at the start of the string, returning
    a match object, or None if no match was found.

>>> help(re.search)
Help on function search in module re:

search(pattern, string, flags=0)
    Scan through string looking for a match to the pattern, returning
    a match object, or None if no match was found.

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

14.使用正則表示式在’’’待處理

OPTION’’’字串中, 獲取OPTION的value屬性值.注意: OPTION中可能有其他的標籤屬性,如: 或者


>>> str1 = '<OPTION value="TBD">TBD</OPTION>OPTION'

>>> m = re.match(r"(<OPTION\s+[a-z]*[=]*\w*\s*)(value=)(\"\w+\")",str1)
>>> m.group(3)
'"TBD"'


>>> str1 = '<OPTION  aa=2 value="TBD">TBD</OPTION>OPTION'
>>> m = re.match(r"(<OPTION\s+[a-z]*[=]*\w*\s*)(value=)(\"\w+\")",str1)
>>> m.group(3)
'"TBD"'



>>> str1 = '<OPTION  aa=2 value="TBD" bb=2>TBD</OPTION>OPTION'
>
>>> m = re.match(r"(<OPTION\s+[a-z]*[=]*\w*\s*)(value=)(\"\w+\")",str1)
>>> m.group(3)
'"TBD"'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

15.如何使用標準庫pdb除錯 Python 程式

在python中使用pdb模組可以進行除錯
import pdb
pdb.set_trace()

也可以使用python -m pdb myscript.py這樣的方式
  • 1
  • 2
  • 3
  • 4
  • 5

16.什麼是裝飾器,如何使用裝飾器

deflog(level):
    defdec(func):
        defwrapper(*kargc,**kwargs):
            print "before func was called"
            func(*kargc,**kwargs)
            print "after func was called"
        return wrapper
    return dec

@log(2)
deffuncLog():
    print "funcLog was called"

funcLog()

==>
before func was called
funcLog was called
after func was called
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

17.請解釋with關鍵字的用法

with關鍵字的前提是類需要實現__enter__和__exit__
>>> with open("test.sh") as f:
...    f.read()
  • 1
  • 2
  • 3
  • 4

18.引數傳遞使用的是傳遞引用還是傳遞值?為什麼?

對於變數(與物件相對的概念),其實,python函式引數傳遞可以理解為就是變數傳值操作

不可變物件引數呼叫

defChangeInt( a ):
    a = 10
nfoo = 2 
ChangeInt(nfoo)
print nfoo #結果是2


可變物件引數呼叫

defChangeList( a ):
    a[0] = 10
lstFoo = [2]
ChangeList(lstFoo )
print nfoo #結果是[10]

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

19.在類的方法定義中’self’是怎樣的一個引數


selfPython裡不是關鍵字。self代表當前物件的地址。self能避免非限定呼叫造成的全域性變數。
self在定義時需要定義,但是在呼叫時會自動傳入。
self的名字並不是規定死的,但是最好還是按照約定是用self
self總是指呼叫時的類的例項
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

20.說明CPython的記憶體管理機制


變數的儲存有三個區域,事先分配的靜態記憶體、事先分配的可重複利用記憶體以及需要通過mallocfree來控制的自由記憶體。
python的記憶體在底層也是由mallocfree的方式來分配和釋放,只是它代替程式設計師決定什麼時候分配什麼時候釋放,同時也提供介面讓使用者手動釋放,因此它有自己的一套記憶體管理體系,主要通過兩種機制來實現,一個是引用計數,一個是垃圾回收。前者負責確定當前變數是否需要釋放,後者解決前者解決不了的迴圈引用問題以及提供手動釋放的介面del。
  • 1
  • 2
  • 3
  • 4

相關推薦

Python試題

1.列表(list)和元組(tuple)的區別 列表是可以修改的 元組不能修改 定義: list: 連結串列, 有序的專案, 通過索引進行查詢, 使用方括號"[]"; tuple:元組, 元組將多樣的物件集合到一起, 不能修改, 通過索引進行查詢, 使用括

Java試題

1.關於抽象類與最終類,下列說法錯誤的是?  A. 抽象類能被繼承,最終類只能被例項化  B. 抽象類和最終類都可以被宣告使用  C. 抽象類中可以沒有抽象方法,最終類中可以沒有最終方法  D. 抽象類和最終類被繼承時,方法可以被子類覆蓋   答案:

某找房網 試題

一、題目描述:  給你一個合法的算術表示式,只包含整數和加號,減號。但整數不一定都是十進位制的數,可能是八進位制,十六進位制,規定包含字首0x的是十六進位制,包含字首0的是八進位制,其他情況是十進位制。現在你能計算出這個式子的最終的值嗎? 說明:輸入的表示式式子只會是整數

No.23 經典試題:用巨集來計算偏移量,判斷大小端聯合體法,指標法

寫一個巨集,計算結構體中某變數相對於首地址的偏移,並給出說明 判斷大小端 程式碼1: //寫一個巨集,計算結構體中某變數相對於首地址的偏移,並給出說明 //定義的這個巨集將結構體裡邊的變數的地址取出後再強轉成char型,然後進行相減。 //注意:&s ==

軟體測試工程師試題

軟體測試筆試題(答案) 判斷題1.軟體測試的目的是儘可能多的找出軟體的缺陷。(Y) 2.Beta 測試是驗收測試的一種。(Y) 3.驗收測試是由終端使用者來實施的。(N) 4.專案立項前測試人員不需要提交任何工件。(Y) 5.單元測試能發現約80%

木子網羅java試題

1.問:Java提供哪幾種運算子? 答:算術運算子、關係運算符、位運算子、邏輯運算子、賦值運算子、其他運算子。 答案相關連結 2.問:從下列選項選出java.lang包中的方法,用來比較兩個物件是否相等,相等返回true。 A.toString() B.equals() C.compare

木子網羅資料庫試題

1.問:刪除表資料,同時保留表結構,()方法比()方法效率高 A.delete B.drop table C.truncate table D.delete all 答:C,A 解析: truncate table 命令將快速刪除資料表中的所有記錄,但保留

網易遊戲2016校園招聘試題

網易線上遊戲是網易公司的一個重要組成部分,在開發實力、產品線和市場佔有率上均是國產網遊的領軍者。正在運營的廣受中國玩家歡迎的遊戲包括《新大話西遊2》、《夢幻西遊2》、《天下3》等等。 小Z一直是網易的粉絲,從網易97年6月成立開始他就一直關注著它的發展,並且玩過幾乎所有的網易遊戲。同時他也是一名數學愛好者,

美團試題-[程式設計題] 拼湊錢幣

[程式設計題] 拼湊錢幣 給你六種面額 1、5、10、20、50、100 元的紙幣,假設每種幣值的數量都足夠多,編寫程式求組成N元(N為0~10000的非負整數)的不同組合的個數。 輸入描述: 輸入包括一個整數n(1 ≤ n ≤ 10000) 輸出描述:

2017京東實習生試題

下面程式的返回值是什麼? #include "stdafx.h" #include<iostream> using namespace std; int func(int x) {

JAVA實習生/應屆生面試試題

一:單選題1. 下列哪一種敘述是正確的(D )A. abstract修飾符可修飾字段、方法和類B. 抽象方法的body部分必須用一對大括號{ }包住C. 宣告抽象方法,大括號可有可無D. 宣告抽象方法不可寫出大括號2. 如下程式碼public class Test {publ

C語言經典試題

1、請填寫bool , float, 指標變數 與“零值”比較的if 語句。 提示:這裡“零值”可以是0, 0.0 , FALSE 或者“空指標” 。例如int 變數n 與“零值”比較的if 語句為: if ( n == 0 ) if ( n

【nowcoder】9.5 阿里巴巴2017實習生試題

http://www.nowcoder.com/questionTerminal/0cd6af2fd4374df597b49e09302b1a5a - 使用 inline 關鍵字的函式只是使用者希望

web前端試題

-i 索引 可選參數 null 響應 浪費 name屬性 person 獲得 1、javascript中如何對一個對象進行深度clone? //深度克隆 function deepClone(obj){ var result,oClass=isClass(ob

試題

1. 以下程式的輸出: #include <iostream> using namespace std; class Base { public: Base(int j) : i(j) {} virtual ~Base() {}

Java學習總結第十六天Java類與物件試題

1) 在Java類中,使用以下( )宣告語句來定義公有的int型常量MAX。 A. public int MAX = 100; B. final int MAX = 100; C. public static int MAX = 100; D. public static

python爬蟲常見面試題

前言   之所以在這裡寫下python爬蟲常見面試題及解答,一是用作筆記,方便日後回憶;二是給自己一個和大家交流的機會,互相學習、進步,希望不正之處大家能給予指正;三是我也是網際網路寒潮下崗的那批人之一,為了找工作而做準備。 一、題目部分 1、python中常用的資料結構有哪些?請簡要介紹一下。 2、

換了個地方,來北京工作,面試了4家python爬蟲,寫一些這四家記得的試題1

1、請簡要說明檢視的作用 資料庫檢視,隱藏資料複雜性;有利於使用者對於資料庫中某些列資料的訪問 使使用者查詢變得簡單 2、列舉您使用過的python網路爬蟲所用到的網路資料包(最熟悉的在前):  requests,urllib2,urllib 3、列舉您使用過的python

python試題

以及 args 空格 代碼實現 spa adding 技術分享 變量作用域 區別 Python中基本數據結構的操作 元組 列表 字典 集合 定義

Python 學習筆記

pytho oat 變量 情況 class 弱類型 定義 寫代碼 基本上 為什麽學習Python?因為Python 的用處太多了。 本想學會一們語言就好好的維持下去,但是最近Python太火啦,什麽人工智能、網絡爬蟲的,耳濡目染的,心想多學習一些東西總是好的,於是就抽空學習