Python基礎面試,看這篇文章畫重點吧,Python面試題No1

爲何有這個系列的文章

一直想寫一些更加基礎的文章,可是老是想不到好的點子,最近到了就業季,一大堆學生面臨就業了,正好,從Python的面試題出發,分析和解答一些常見的面試題,而且總結一些文字。html

每一講涉及5~10道面試題,整個系列的文章初步規劃有20篇。python

今天的面試題

第1題:1行代碼實現1到100的和?

分析:這題考察的是對Python內置函數的瞭解程度c++

Python常見的內置函數有 程序員

python內置函數
官方查詢手冊以下 docs.python.org/3/library/f…

圖片中我框選的是比較經常使用的一些,你可能見過,這題考察的是sum也就是求和 具體的使用面試

sum(iterable[, start])編程

  1. iterable -- 可迭代對象,如:列表、元組、集合。
  2. start -- 指定相加的參數,若是沒有設置這個值,默認爲0。

例如app

sum([1,2,3]) # 結果爲6
sum([1,2,3],5) # 結果爲11
複製代碼

python一行代碼如何實現1~100的和編程語言

還要用到第二個內置函數 range()函數

range(start, stop[, step])工具

  1. start: 計數從 start 開始。默認是從 0 開始。例如range(5)等價於range(0, 5);
  2. stop: 計數到 stop 結束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]沒有5
  3. step:步長,默認爲1。例如:range(0, 5) 等價於 range(0, 5, 1)

解答:

sum(range(1,101))
複製代碼

第2題:如何使用Python輸出一個[斐波那契數列]Fibonacci

斐波那契數列(Fibonacci sequence),又稱黃金分割數列、因數學家列昂納多·斐波那契(Leonardoda Fibonacci)以兔子繁殖爲例子而引入,故又稱爲「兔子數列」。

例子:一、一、二、三、五、八、1三、2一、3四、……

解法1:

100之內的斐波那契數列

x=1
y=1
print(x,end=" ")
print(y,end=" ")
while(True):
    z=x+y
    x=y
    y=z
    if(z>100):   #當z>100的時候,終止循環
        break

    print(z,end=" ")

複製代碼

解法2:

遞歸的辦法,這個須要數學公式的記憶了

在數學上,斐波納契數列以以下被以遞歸的方法定義:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)

#遞歸
def fibo(n):
	
    if n <= 1:
        return n
    else:
        return (fibo(n - 1) + fibo(n - 2))
 
m = int(input("打印前多少項?"))
if m <= 0:
    print("請輸入正整數!")
else:
    print("fibo:")
    for i in range(1,m):
        print(fibo(i))

複製代碼

解法3:

迭代,用遞歸當數據大的時候,會出現效率問題

def fibo(max):
    n, a, b = 0, 0, 1
    while n < max:
        yield b
        a, b = b, a + b
        n = n + 1  # 退出標識
for n in fibo(5):
    print (n)
複製代碼

通過試驗,比迭代速度快不少 time.clock()說明

  • cpu 的運行機制:cpu是多任務的,例如在多進程的執行過程當中,一段時間內會有對各進程被處理。一個進程從從開始到結束實際上是在這期間的一些列時間片段上斷斷續續執行的。因此這就引出了程序執行的cpu時間(該程序單純在cpu上運行所需時間)和牆上時鐘wall time。
  • time.time()是統計的wall time(即牆上時鐘),也就是系統時鐘的時間戳(1970紀元後通過的浮點秒數)。因此兩次調用的時間差即爲系統通過的總時間。
  • time.clock()是統計cpu時間 的工具,這在統計某一程序或函數的執行速度最爲合適。兩次調用time.clock()函數的插值即爲程序運行的cpu時間。
import time
def fibo(max):
    n, a, b = 0, 0, 1
    while n < max:
        yield b
        a, b = b, a + b
        n = n + 1
t1 = time.clock()
for n in fibo(100):
    print (n)
    
t2 = time.clock()

print(t2-t1)
複製代碼

解法4: 使用列表查看一下速度

import time
def fibo(n):

    result_list = []
    a, b = 0, 1
    while n > 0:
        result_list.append(b)
        a, b = b, a + b
        n -= 1
    return result_list

t1 = time.clock()
print(fibo(1000))
t2 = time.clock()
print(t2-t1)
複製代碼

固然,我看到一篇比較牛X的博客,博主後面2個辦法,實在高級,貼給你們

blog.csdn.net/chichu261/a…

第3題:列出幾個python標準庫

你先明確的是什麼是Python標準庫

Python標準庫(standard library)。 標準庫會隨着Python解釋器,一塊兒安裝在你的電腦中的。它是Python的一個組成部分。 這些標準庫是Python爲你準備好的利器,可讓編程事半功倍。

文檔手冊能夠查閱 > docs.python.org/zh-cn/3.7/l…

瞭解這個內容,這道題回答起來就很是簡單了

  1. os模塊
  2. re模塊
  3. pickle 模塊
  4. datetime模塊
  5. time模塊
  6. math模塊

第4題:下面Python代碼的運行結果是?

這種題目,考察的是代碼默讀能力

def f(x,l=[]):
    for i in range(x):
        l.append(i*i)
    print(l)
f(2)   
f(3,[3,2,1])
f(3)

複製代碼
  • f(2)
def f(2,l=[]):
    for i in range(2): # i=0,1
        l.append(i*i) # [0,1]
    print(l)
複製代碼
  • f(3,[3,2,1])
def f(3,l=[3,2,1]):
    for i in range(3): # i=0,1,2
        l.append(i*i) # [3,2,1,0,1,4]
    print(l)
複製代碼
  • f(3)
def f(3,l=[]):
    for i in range(3): # i=0,1,2
        l.append(i*i) # [0,1,4] ???對嗎?
    print(l)
複製代碼

這個地方,你須要避免踩坑,必定要注意列表是可變的,若是單獨的寫沒有任何問題,可是函數調用的三行代碼放在一塊兒就有點意思了

f(3,[3,2,1]) 將l進行了從新賦值。可是第三次調用函數使用的依舊是第一次的l,因此避免踩坑哦~~~~

f(3)運行的正確結果是[0,1,0,1,4]

在這裏插入圖片描述

第5題:python實現列表去重的方法?

簡單直接的辦法,集合裏面的元素不能夠重複

my_list = [1,1,2,2,3,3,5,6,7,88]
my_set = set(my_list)
my_list = [x for x in my_set]
my_list
複製代碼

循環判斷去重

ids = [1,1,2,2,3,3,5,6,7,88]
news_ids = []
for id in ids:
    if id not in news_ids:
        news_ids.append(id)
print(news_ids)

複製代碼

字典的fromkeys方法實現

my_list=[1,1,2,2,3,3,5,6,7,88]
d = {}.fromkeys(my_list)
print(d.keys())
複製代碼

今天的5道面試題答題完畢

nice girl 今天的5道面試題回答完畢~不知道你學到了多少,下篇博客見哦!

她專科學歷 27歲從零開始學習c,c++,python編程語言 29歲編寫百例教程 30歲掌握10種編程語言, 用自學的經歷告訴你,學編程就找夢想橡皮擦

歡迎關注她的公衆號,非本科程序員

掃碼關注非本科程序員
相關文章
相關標籤/搜索