2022-08-12 python暑期面試題目

題目1

現(xiàn)有函數(shù)mix和 f,代碼如下:

"""Question 1 Code"""

def mix(f):
    def g(x):
        def h(y):
            return f(x, y) 
        return h

    def x(f):
        f = lambda x, y: x * 2 + y
        return f

    def y(x):
        x = lambda x, y: x + y * 2
        return f

    f = y(x(f))

    return g


def f(x, y): 
    f = lambda x, y: x + y 
    return mix(f)(x)(y) 

res = f(2, 3)

【單選】運(yùn)行程序后,變量 res 的值是:( )
[A] 5
[B] 7
[C] 8
[D] 程序報(bào)錯(cuò)

題目1解析:本題目主要考察lambda函數(shù)與函數(shù)調(diào)用機(jī)制。
(1) 首先 f 作為一個(gè)函數(shù)被定義攒磨,其形參為 x 與 y 缺亮。在 f 函數(shù)體內(nèi)定義了一個(gè)局部變量 f。為避免混淆形庭,這時(shí)我們可以忽略前一個(gè)函數(shù)名 f,將其替換成 m 或者 n 也可以:

#將函數(shù)f名稱換位m
def m(x, y): 
    f = lambda x, y: x + y 
    return mix(f)(x)(y) 

res = m(2, 3)

(2) 然后我們重點(diǎn)關(guān)注這個(gè)局部變量f藻治,在m函數(shù)體其被賦值為一個(gè)lambda表達(dá)式碘勉,之后作為實(shí)參傳入了mix(f),mix()函數(shù)的形參名也是f桩卵,為了避免混淆验靡,我將形參f全部用n來代替,后面的x函數(shù)與y函數(shù)的形參我也分別換成了x1與x2:

def mix(n):
    def g(x):
        def h(y):
            return n(x, y) 
        return h

    def x(x1):
        x1 = lambda x, y: x * 2 + y
        return x1

    def y(x2):
        x2 = lambda x, y: x + y * 2
        nonlocal n
        n = x2
        return n  # 此時(shí)n作為mix函數(shù)的局部變量雏节,是y函數(shù)的外部函數(shù)中的一個(gè)變量胜嗓,可以直接訪問,但要修改需用nonlocal

    #print(f(2,3))
    n = y(x(n))

    return g # 返回的是一個(gè)函數(shù)钩乍,這個(gè)函數(shù)通過嵌套得到的是一個(gè)lambda函數(shù)辞州。


def m(x, y): 
    f = lambda x, y: x + y 
    return mix(f)(x)(y)   # 這里傳入mix函數(shù)的f就是上邊的lambda
                           # mix函數(shù)是m函數(shù)體內(nèi)的一部分,因此f對(duì)于m函數(shù)來說是一個(gè)局部變量
                           # f對(duì)于mix函數(shù)是一個(gè)傳入的實(shí)參
# print(f)  在m函數(shù)外部無法訪問其局部變量f

res = m(2, 3)
print(res)

上面程序的運(yùn)行結(jié)果與最初程序的運(yùn)行結(jié)果分別是5和8寥粹,讀者可以根據(jù)注釋仔細(xì)地品变过。其中用到了函數(shù)變量作用域的知識(shí)可以參考這篇文章:2022-08-12 python函數(shù)式編程 - 簡書 (jianshu.com)

題目2

字符串 s 只包括字符 ‘(’ 和 ‘)’,判斷s是否是有效的括號(hào)表示涝涤。有效的括號(hào)要求:每組括號(hào)成對(duì)出現(xiàn)媚狰,左括號(hào)一定可以找到與之匹配的、位置正確的右括號(hào)阔拳。補(bǔ)全下列函數(shù)崭孤。

"""Question 2 Code"""

def is_parentheses(s: str) -> bool:
    """ 
    Is Valid Parentheses
    
    >>> is_valid("()")
    True
    >>> is_valid("(()(()()))")
    True
    >>> is_valid(")(")
    False
    >>> is_valid("((")
    False
    >>> is_valid("(")
    False
    >>> is_valid("())(")
    False
    """

    """TODO: WRITE YOUR CODE HERE"""

【Tips】如何測(cè)試代碼是否正確:
若代碼文件名為 question2.py,可在命令行中執(zhí)行如下指令,進(jìn)行文檔測(cè)試辨宠。

 python3 -m doctest question2.py

題目2解析:本題目可以在leetcode找到類型原題遗锣,具體思路如下:利用一個(gè)棧,不斷地往里壓左括號(hào)嗤形,一旦遇上了一個(gè)右括號(hào)精偿,我們就把棧頂?shù)淖罄ㄌ?hào)彈出來,表示這是一個(gè)合法的組合赋兵,以此類推还最,直到最后判斷棧里還有沒有左括號(hào)剩余。
在python中使用list即可實(shí)現(xiàn)棧數(shù)據(jù)結(jié)構(gòu)毡惜,通過append()方法在棧頂增加一個(gè)元素,通過pop()方法在棧頂刪除一個(gè)元素斯撮,保證“后進(jìn)先出”经伙。以下是問題2的答案代碼:

# 上勘院暑期第二題
def is_parentheses(s: str) -> bool: # 輸入函數(shù)需要是一個(gè)字符串,返回值類型是bool
    if not isinstance(s, str):  # 判斷輸入的實(shí)參是否為字符串勿锅,不是字符串予以提示
        print('請(qǐng)輸入一個(gè)字符串實(shí)參')
        return False
    for i in s:
        if (i != '(') and (i != ')'):
            print('輸入的字符串元素只能是"("或者")"')
            return False
    lst = [i for i in s] #將字符串轉(zhuǎn)換為列表
    #print(lst)
    stack = [] # 建立一個(gè)空棧帕膜,用來處理字符串
    for i in lst:
        if i == '(':
            stack.append(i)  # 如果遇到了左括號(hào),就將其壓入棧中
        elif i == ')': # 如果遇到了右括號(hào)
            if lst.index(i) == 0: # 如果字符串第一個(gè)元素是右括號(hào)溢十,
                return False
            else:
                if stack == []:
                    return False # 如果此時(shí)棧中已經(jīng)沒有左括號(hào)垮刹,說明右括號(hào)多了
                else:
                    stack.pop() # 遇到一個(gè)右括號(hào)就彈出一個(gè)與之對(duì)應(yīng)的左括號(hào)
    if len(stack) == 0: # 遍歷完字符串所有元素后判讀棧中是否還有剩余的左括號(hào),沒有的話說明左右括號(hào)正好匹配
        return True
    else:
        return False
if __name__ == '__main__':
    print(is_parentheses('()'))  # 返回True
    print(is_parentheses('(()(()()))'))  # 返回True
    print(is_parentheses(')('))  # 返回False
    print(is_parentheses('(('))  # 返回False
    print(is_parentheses('('))   # 返回False
    print(is_parentheses('('))   # 返回False
    print(is_parentheses('())('))  # 返回False

題目3

現(xiàn)有一組傳感器在對(duì)某結(jié)構(gòu)變形進(jìn)行監(jiān)測(cè)张弛,傳感器id分別為1~10荒典。每隔一段時(shí)間,各個(gè)傳感器都會(huì)采集一次數(shù)據(jù)吞鸭,得到原始數(shù)據(jù)文件為 raw_data.csv寺董。
原始數(shù)據(jù)中包含三個(gè)字段:
? time: 本次測(cè)量的時(shí)間,timestamp格式
? id: 傳感器的id
? val: 本次測(cè)值
由于各個(gè)傳感器獲得采集信號(hào)的時(shí)間不一致刻剥,同一個(gè)測(cè)量指令下遮咖,各個(gè)傳感器時(shí)間的采集時(shí)間略有不同。你的任務(wù)是確定各傳感器的測(cè)量批次造虏,并輸出結(jié)果文件 result.csv御吞。結(jié)果文件會(huì)在原始數(shù)據(jù)的基礎(chǔ)上新增一列:
? batch: 測(cè)量批次,遞增整數(shù)
題目提供了如下的代碼框架漓藕,已經(jīng)實(shí)現(xiàn)了數(shù)據(jù)文件的讀取和結(jié)果文件的保存陶珠。你只需要完成文件中的 process() 函數(shù)部分。請(qǐng)將完成后的代碼和運(yùn)得到的結(jié)果文件粘貼在下方撵术。

【Tips】
? 由于硬件的不穩(wěn)定背率,部分傳感器的測(cè)值可能在某次測(cè)量時(shí)缺失
? 代碼框架:

"""Question 3 Code"""

import os
import numpy as np
import pandas as pd


def load_raw_data():
    """load raw data from `raw_data.csv` file, return DataFrame"""
    path = os.path.join(os.path.curdir, "raw_data.csv")
    print(path)
    assert os.path.exists(path), "未找到 [raw_data.csv], 請(qǐng)將csv文件與代碼文件放在同一目錄"
    data = pd.read_csv(path, encoding="utf-8")
    return data


def save_result(result: pd.DataFrame):
    """save processed data to `result.csv` file"""
    path = os.path.join(os.path.abspath("."), "result.csv")
    result.to_csv(path, encoding="utf-8", index=None)


def process(data: pd.DataFrame) -> pd.DataFrame:
    """TODO: WRITE YOUR CODE HERE"""


def main(file_name: str, depth: int):
    """main function to run the whole process"""
    data = load_raw_data()
    result = process(data)
    save_result(result)


if __name__ == "__main__":
    main()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子寝姿,更是在濱河造成了極大的恐慌交排,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,185評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件饵筑,死亡現(xiàn)場離奇詭異埃篓,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)根资,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,445評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門架专,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人玄帕,你說我怎么就攤上這事部脚。” “怎么了裤纹?”我有些...
    開封第一講書人閱讀 157,684評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵委刘,是天一觀的道長。 經(jīng)常有香客問我鹰椒,道長锡移,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,564評(píng)論 1 284
  • 正文 為了忘掉前任漆际,我火速辦了婚禮淆珊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘奸汇。我一直安慰自己施符,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,681評(píng)論 6 386
  • 文/花漫 我一把揭開白布擂找。 她就那樣靜靜地躺著操刀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪婴洼。 梳的紋絲不亂的頭發(fā)上骨坑,一...
    開封第一講書人閱讀 49,874評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音柬采,去河邊找鬼欢唾。 笑死,一個(gè)胖子當(dāng)著我的面吹牛粉捻,可吹牛的內(nèi)容都是我干的礁遣。 我是一名探鬼主播,決...
    沈念sama閱讀 39,025評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼肩刃,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼祟霍!你這毒婦竟也來了杏头?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,761評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤沸呐,失蹤者是張志新(化名)和其女友劉穎醇王,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體崭添,經(jīng)...
    沈念sama閱讀 44,217評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡寓娩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,545評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了呼渣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片棘伴。...
    茶點(diǎn)故事閱讀 38,694評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖屁置,靈堂內(nèi)的尸體忽然破棺而出焊夸,到底是詐尸還是另有隱情,我是刑警寧澤蓝角,帶...
    沈念sama閱讀 34,351評(píng)論 4 332
  • 正文 年R本政府宣布淳地,位于F島的核電站,受9級(jí)特大地震影響帅容,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜伍伤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,988評(píng)論 3 315
  • 文/蒙蒙 一并徘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧扰魂,春花似錦麦乞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,778評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蒋畜,卻和暖如春声畏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背姻成。 一陣腳步聲響...
    開封第一講書人閱讀 32,007評(píng)論 1 266
  • 我被黑心中介騙來泰國打工插龄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人科展。 一個(gè)月前我還...
    沈念sama閱讀 46,427評(píng)論 2 360
  • 正文 我出身青樓均牢,卻偏偏與公主長得像,于是被迫代替她去往敵國和親才睹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子徘跪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,580評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容