<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          筆試編程框架總結(jié)!

          共 2972字,需瀏覽 6分鐘

           ·

          2021-05-20 02:31

          ↑↑↑關(guān)注后"星標"Datawhale
          每日干貨 & 每月組隊學習,不錯過
           Datawhale干貨 
          作者:吳忠強,東北大學,Datawhale成員

          前面的話

          經(jīng)歷面試前,我一直埋頭刷題,到了面試才發(fā)現(xiàn),沒有一套應(yīng)對真實環(huán)境的編程框架,有孫悟空的本事也使不出來,憋得難受。

          痛定思痛,覺得要是早點有人告訴我就好了,整理下來,大家就不用再經(jīng)歷我當時的憋屈。

          為什么要面試專用編程框架

          在上篇刷LeetCode的六大誤區(qū)中有提到,筆試做題用的是純白板編程,要自己寫輸入輸出。這個是和平時LeetCode上的刷題有很大區(qū)別,??蜕嫌姓鎸嵉木幊棠J浇蠥CM,可以用來練習。

          這個編程環(huán)境長啥樣?我在??蜕辖亓藗€圖:


          筆試時,就是面對這個東西編程?,F(xiàn)在看著還沒啥,到了面試黑窗上再放個計時器,我滴媽,立馬腎上腺素飆升。下面整理我對于這個窗口悟到的編程框架。

          純白板模式下的編程框架

          首先,拿到黑窗口后,二話不說,直接把下面這段代碼寫上, 強調(diào):盡量用IDE!,這樣不同的大題,復(fù)制粘貼就完事,真正幫你節(jié)約大把時間來思考題目。

          import sys

          # 這里寫解決問題的代碼,和LeetCode就完全一樣了
          def solve(arr):
           pass


          if __name__ == '__main__':

           # 接收輸入的邏輯,這里先把輸入接收過來, 兩種選擇input()和sys.stdin.readline()
           group_nums = input()   #字符串形式,得轉(zhuǎn)成int
           
           group_nums = int(group_nums)
           
           # 對于每一組
           for i in range(group_nums):
            # 接收每一組的輸入, 這里不同的題目就不一樣了,但一定記住我們接收的還是一行,這是一個字符串
            arr = sys.stdin.readline().strip().split(' ')
            # 元素轉(zhuǎn)成int
            arr = list(map(int, arr))

            # 輸入接收過來之后,這里最好打印下看看接收的是不是正確,這個很重要
            # print(arr)

            # 處理具體的問題了
            res = solve(arr)

            # 輸出結(jié)果
            print(res)  

          上面這個模板,處理的是多組輸入,或者多行輸入;如果是一組輸入,僅僅幾行的話, 就不用外層for循環(huán)的, 一行行的接收即可。

          框架模板的優(yōu)勢

          這個框架做到了主函數(shù)與處理問題的邏輯分離開。接收輸入 -> 處理函數(shù) -> 調(diào)整輸出即可。 這么一來,我們在solve里就可以像在LeetCode上一樣,直接寫解決問題的函數(shù)。這樣的代碼看起來清晰,找bug時也好找。

          另外,就是一定要重視低耦合高內(nèi)聚的編程技巧。如果遇到處理不同的事情,盡量的寫成函數(shù)的方式,這樣調(diào)試起來會更加簡潔。

          框架模板的注意點

          邏輯通了,下面是細節(jié)上要注意的。首先是,接收輸入時都是一行一行地接收,這個是字符串形式,要先接收過來,再轉(zhuǎn)換格式。我個人習慣是先都接收了,然后統(tǒng)一轉(zhuǎn)換格式,比較清晰。只要保證接收正確,大家也可以在接收時直接轉(zhuǎn)。

          這里主要整理接收intput()sys.stdin.readline()兩種方式的區(qū)別。這兩個都是字符串格式,讀入一行,區(qū)別是后者會帶著一個換行符\n。啥意思?我們在輸入時,是把輸入輸完之后,敲一個回車告訴編譯器我敲完了。這倆的區(qū)別就是input()會過濾掉最后的回車,而sys.stdin.readline()會帶著后面的回車。

          一個最簡單的例子:

          arr = sys.stdin.readline().split(' ')
          print(arr)    # ['1', '2', '3', '4', '5\n']

          arr = input().split(' ')
          #arr = sys.stdin.readline().split(' ')
          print(arr)      # ['1', '2', '3', '4', '5']

          可以發(fā)現(xiàn),如果用上面那個代碼,接收的輸入可能是不正確的。比如,有時用下面這個代碼把每個元素轉(zhuǎn)成int時,會出現(xiàn)一些不知名的錯誤:

          list(map(int ,arr))

          比如這樣的錯誤:

          哈哈, 這里是我輸入時最后不小心多敲了個空格, 按照空格切分,把換行符單獨切成了一個元素,int轉(zhuǎn)換保留了這個錯誤。所以,如果想用sys接收輸入的話,更加魯棒性的代碼是:

          arr = sys.stdin.readline().strip().split(' ')

          也就是加一個strip函數(shù)去掉多余的空格或者換行符。還有一種魯棒性的寫法:

          arr = input().strip().split(' ')

          這兩個寫法都可以, 建議用input。

          同樣的輸出也有兩種方式:

          # sys.stdout.write(''.join(arr))
          # print(''.join(arr))

          這倆的區(qū)別是sys的那種,最后不會加一個換行,而print我們知道,輸出完畢之后,會自動加一個換行符。建議還是print吧,花里胡哨的多了,就容易出錯。

          好了, 有了這樣的一個框架,就把ACM模式轉(zhuǎn)成了我們常用的LeetCode模式了。最后再次強調(diào)IDE的重要性:自動補全,調(diào)試,保存代碼都非常方便。

          總結(jié)

          確實,有些坑,得需要自己去趟、去試, 可千萬不能小馬過河。接下來這段時間,我們一起再抓住最后一點機會,去試錯。過于謹慎和完美主義,往往會錯失良機。

          秋招在即,六月一定得趕早準備。現(xiàn)在大部分公司感覺都滿員了,壓力和競爭越來越大,又到了暴風雨前的寧靜,接下來,繼續(xù)加油, Rush!

          整理不易,三連
          瀏覽 58
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  成人毛片18毛片 | 很污的视频网站 | 午夜精品在线观看 | 欧美xxx一区二区三区 | 国产一卡二卡三卡免费观看 |