第1題:1行代碼實現1到100的和?
分析:這題考察的是對Python內置函數的了解程度
Python常見的內置函數有
官方查詢手冊如下
https://docs.python.org/3/library/functions.html
圖片中我框選的是比較常用的一些,你可能見過,這題考察的是sum也就是求和
具體的使用
sum(iterable[, start])
- iterable -- 可疊代對象,如:列表、元組、集合。
- start -- 指定相加的參數,如果沒有設置這個值,默認為0。
例如
sum([1,2,3]) # 結果為6
sum([1,2,3],5) # 結果為11
python一行代碼如何實現1~100的和
還要用到第二個內置函數 range()
range(start, stop[, step])
- start: 計數從 start 開始。默認是從 0 開始。例如range(5)等價於range(0, 5);
- stop: 計數到 stop 結束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]沒有5
- step:步長,默認為1。例如:range(0, 5) 等價於 range(0, 5, 1)
解答:
sum(range(1,101))
第2題:如何使用Python輸出一個[斐波那契數列]Fibonacci
斐波那契數列(Fibonacci sequence),又稱黃金分割數列、因數學家列昂納多·斐波那契(Leonardoda Fibonacci)以兔子繁殖為例子而引入,故又稱為「兔子數列」。
例子:1、1、2、3、5、8、13、21、34、……
解法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個辦法,實在高級,貼給大家
https://blog.csdn.net/chichu261/article/details/83589767
第3題:列出幾個python標準庫
你先明確的是什麼是Python標準庫
Python標準庫(standard library)。標準庫會隨著Python解釋器,一起安裝在你的電腦中的。它是Python的一個組成部分。這些標準庫是Python為你準備好的利器,可以讓編程事半功倍。
文檔手冊可以查閱 > https://docs.python.org/zh-cn/3.7/library/index.html
了解這個內容,這道題回答起來就非常簡單了
- os模塊
- re模塊
- pickle 模塊
- datetime模塊
- time模塊
- 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())
最後如果你依然在編程的世界裡迷茫,不知道自己的未來規劃,對python感興趣
記得私信小編【學習】就能和小編一起學Python啦,還有學習大禮包贈送,希望能幫助你更了解python,學習python