面試Python工程師,這幾道編碼題有必要背背,Python面試題No8

来源:https://www.cnblogs.com/happymeng/archive/2019/05/15/10867318.html
-Advertisement-
Play Games

第1題:列表[1,2,3,4,5],請使用map()函數輸出[1,4,9,16,25],並使用列表推導式提取出大於10的數,最終輸出[16,25]。 map是python高階用法,字面意義是映射,它的作用就是把一個數據結構映射成另外一種數據結構。 map用法比較繞,最好是對基礎數據結構很熟悉了再使用 ...


第1題:列表[1,2,3,4,5],請使用map()函數輸出[1,4,9,16,25],並使用列表推導式提取出大於10的數,最終輸出[16,25]。

map是python高階用法,字面意義是映射,它的作用就是把一個數據結構映射成另外一種數據結構。

map用法比較繞,最好是對基礎數據結構很熟悉了再使用,比如列表,字典,序列化這些。

map的基本語法如下:

map(函數, 序列1, 序列2, ...)

Python 2.x 返回列表。
Python 3.x 返回迭代器。

list = [1,2,3,4,5]
def fn(x):
    return x ** 2

res = map(fn,list)
res = [i for i in res]
print(res)

res = [i for i in res if i > 10]
print(res)

第2題:設計一個函數返回給定文件名的尾碼?

考察字元串操作

  1. rfind() # 右側字元出現的位置
  2. 註意下麵的0<pos<2 用法
  3. if ... else用法
def get_suffix(filename, has_dot=False):
    """
    獲取文件名的尾碼名

    :param filename: 文件名
    :param has_dot: 返回的尾碼名是否需要帶點

    :return: 文件的尾碼名
    """
    pos = filename.rfind('.')
    if 0 < pos < len(filename) - 1:
        index = pos if has_dot else pos + 1
        return filename[index:]
    else:
        return ''

第3題: 這兩個參數是什麼意思:*args,**kwargs?我們為什麼要使用它們?

  1. 如果我們不確定要往函數中傳入多少個參數,或者我們想往函數中以列表元組的形式傳參數時,那就使要用*args;
  2. 如果我們不知道要往函數中傳入多少個關鍵詞參數,或者想傳入字典的值作為關鍵詞參數時,那就要使用**kwargs。
  3. args和kwargs這兩個標識符是約定俗成的用法,你當然還可以用*tom和**jarry,但是這樣顯的不專業。

下麵是具體的示例: 案例來源互聯網搜索,都書寫一遍即可掌握

def f(*args,**kwargs): 
    print(args, kwargs)

l = [1,2,3]
t = (4,5,6)
d = {'a':7,'b':8,'c':9}

f()
f(1,2,3)                    # (1, 2, 3) {}
f(1,2,3,"groovy")           # (1, 2, 3, 'groovy') {}
f(a=1,b=2,c=3)              # () {'a': 1, 'c': 3, 'b': 2}
f(a=1,b=2,c=3,zzz="hi")     # () {'a': 1, 'c': 3, 'b': 2, 'zzz': 'hi'}
f(1,2,3,a=1,b=2,c=3)        # (1, 2, 3) {'a': 1, 'c': 3, 'b': 2}

f(*l,**d)                   # (1, 2, 3) {'a': 7, 'c': 9, 'b': 8}
f(*t,**d)                   # (4, 5, 6) {'a': 7, 'c': 9, 'b': 8}
f(1,2,*t)                   # (1, 2, 4, 5, 6) {}
f(q="winning",**d)          # () {'a': 7, 'q': 'winning', 'c': 9, 'b': 8}
f(1,2,*t,q="winning",**d)   # (1, 2, 4, 5, 6) {'a': 7, 'q': 'winning', 'c': 9, 'b': 8}

def f2(arg1,arg2,*args,**kwargs): 
    print(arg1,arg2, args, kwargs)

f2(1,2,3)                       # 1 2 (3,) {}
f2(1,2,3,"groovy")              # 1 2 (3, 'groovy') {}
f2(arg1=1,arg2=2,c=3)           # 1 2 () {'c': 3}
f2(arg1=1,arg2=2,c=3,zzz="hi")  # 1 2 () {'c': 3, 'zzz': 'hi'}
f2(1,2,3,a=1,b=2,c=3)           # 1 2 (3,) {'a': 1, 'c': 3, 'b': 2}

f2(*l,**d)                   # 1 2 (3,) {'a': 7, 'c': 9, 'b': 8}
f2(*t,**d)                   # 4 5 (6,) {'a': 7, 'c': 9, 'b': 8}
f2(1,2,*t)                   # 1 2 (4, 5, 6) {}
f2(1,1,q="winning",**d)      # 1 1 () {'a': 7, 'q': 'winning', 'c': 9, 'b': 8}
f2(1,2,*t,q="winning",**d)   # 1 2 (4, 5, 6) {'a': 7, 'q': 'winning', 'c': 9, 'b': 8}

第4題: 求出0~n的所有正整數中數字k(0~9)出現的次數。編程語言不限,Python優先。

舉例

例如:k=1,n=12,那麼 1 在 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]一共出現5次[1,10,11,12]
輸入:k=1,n=12
輸出:5

解答思路:

統計數字 1 在 [1,10,11,12]出現的次數這非常像Python中統計字元串a在字元串b中出現的次數:
b.count(a)
所以我們將把數字轉為字元串來做統計。


def digit_count(k,n):
    listn = []
    count = 0
    for i in range(0,n+1):
        count += str(i).count(str(k))
        if str(k) in str(i):
            listn.append(str(i))
            
    return count,listn


c,ls = digit_count(1,12)
print(c,ls)

第5題: 如何在python中使用三元運算符?

python中沒有其他語言中的三元表達式,不過有類似的實現方法

句法:

三元操作符語法如下,
[on_true] if [expression] else [on_false]

例:

x,y = 15,22
big = x if x < y else y

如果x <y為真,則返回值為big = x,如果不正確則返回big = y作為結果。

她專科學歷
27歲從零開始學習c,c++,python編程語言
29歲編寫百例教程
30歲掌握10種編程語言,
想瞭解她嗎?歡迎關註她的公眾號,非本科程式員


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 目標 用最少的人力成本滿足構建和維護該系統的需求 目標 衡量指標 版本迭代 -- 工程師團隊規模 版本迭代 -- 代碼總行數 版本迭代 -- 代碼變更行數 衡量指標 軟體系統的價值 行為價值 按需求文檔編寫代碼 可用性 功能性bug 性能 穩定性 緊急,但是並不總是重要,在緊急重要矩陣中占據A、C位 ...
  • 狀態模式就是將狀態的條件判斷語句轉化成其函數重寫形式,利用了面向對象語言的多態性,本文根據https://blog.csdn.net/lm324114/article/details/78819602的情景將狀態模式用Matlab語言實現。 根據上圖情景,用傳統的方法實現如下: RoomState. ...
  • 本博文僅僅是筆者自己的學習路線,歸納整理了一些好的設計模式資料。 1、策略模式 參考資料: "c 設計模式 策略模式"   "c 設計模式之策略模式"   "C 設計模式(20)——策略者模式(Stragety Pattern)" 策略模式主要是將產品共有的部分抽象出來,不同的行 ...
  • 背景 ENode是一個CQRS+Event Sourcing架構的開發框架,Event Sourcing需要持久化事件,事件可以持久化在DB,但是DB由於面向的是CRUD場景,是針對數據會不斷修改或刪除的場景,所以內部實現會比較複雜,性能也相對比較低。而Event Store實際上對數據只有新增和查 ...
  • 兩台宿主機 一臺:作為伺服器 另一臺:作為客戶端 伺服器的步驟: 打開【控制面板】 點擊【程式】 點擊程式和功能中【打開或關閉Windows功能】 點擊【Telnet伺服器】--點擊【確定】 右擊【電腦】 點擊【管理】 將【Telnet】啟動類型改為自動(延遲啟動) 點擊【應用】 點擊【啟動】 在 ...
  • 不少Python新手經常問到學Python到底需不需要學習Linux? Python不是支持Windows和Linux操作系統嗎?能在Windows下開發為什麼還要學習Linux? ...
  • 對於應屆生來說,Java基礎和項目哪個更重要?這可能是眾多困惑中關心的人數比較多的一個。主要關心這個問題的有兩種 ...
  • 在本教程中,我們將討論java中的do-while迴圈。do-while迴圈類似於while迴圈,但是它們之間有一個區別:在while迴圈中,迴圈條件在迴圈的主體執行之前進行評估,而在do-while迴圈中,迴圈條件在迴圈的主體執行之後再進行評估。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...