Python面試題庫學習1-5

1.對1-100求和?

方法1 遞歸

def get_sum(n):
    """遞歸解法關鍵點:做什麼/什麼時候結束"""
    return n + get_sum(n-1) if n else 0
print(get_sum(100))

方法2 庫函數


print(sum(range(101)))

方法3 循環

sum = 0
for i in range(101):
    sum += i
print(sum)

2. 求n的階乘

方法1 庫函數

print(math.factorial(3))

方法2 遞歸

def my_factorial(n):
    return n * my_factorial(n-1) if n else 1

print(my_factorial(3))

3.如何在一個函數內部修改全局變量

a = dict(a=1)
b = 2

def test_global():
    global b
    b += 3
    a.update(aa=2)

test_global()
print("a:", a)
print("b:", b)

輸出

a: {'a': 1, 'aa': 2}
b: 5

4. 儘可能多的列出Python內置模塊

  • os 操作系統相關的模塊,常用os.path目錄操作、os.environ系統變量、os.mkdir創建目錄、os.getcwd獲取當前目錄、os.remove刪除文件等等;
  • datetime 日期和時間相關的操作;
  • time 時間戳相關的操作,time.time當前時間戳, time.sleep線程休眠;
  • sys Python環境相關的模塊,sys.path模塊導入搜索路徑,sys.getsizeof對象佔用內存數量,sys.maxsize最大數值;
  • functools 函數式編程的部分常用的函數工具, functools.portial偏函數,functools.reducefunctools.wraps
  • struct 用於十六進制打包轉換,如果int和十六進制互轉;
  • shutil 更高級的目錄和文件操作
  • peckle Python對象系列化和存儲到文件
  • sqlite3 SQLite數據庫接口
  • logging 日誌操作
  • ctype Python與C交互接口
  • threadding 線程操作
  • multiprocessing 進程操作
  • queue 隊列
  • josn json編解碼
  • random 隨機數
  • urllib HTTP網絡請求
  • base64 baseb編碼
  • socket 底層網絡接口

5.字典如何刪除鍵和合並兩個字典

刪除key

d = dict(a=1, b=2)
print("before del:{}".format(d))
d.pop('a')
del d['b']
print("after del:{}".format(d))

before del:{'a': 1, 'b': 2}
after del:{}

以上方法如果刪除一個不存在的key可能會引發KeyError異常,推薦做法是使用d.pop(key_name, default_value), pop其實是從字典裏取這個key的值並刪除,如果不存在的話返回default_value

print({}.pop("my_key", "not exist!"))

not exist!

合併或更新

d1 = dict(c=3, d=4)
d2 = dict(e=5, f=6)
print("d1={}, d2={}".format(d1, d2))
d2.update(d1)
print("d1 merge d2:{}".format(d2))

d1={'c': 3, 'd': 4}, d2={'e': 5, 'f': 6}
d1 merge d2:{'e': 5, 'f': 6, 'c': 3, 'd': 4}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章