CS50 wk6 Python課程筆記和學習心得

心得:

本週從C語言轉到Python,一開課教授就說:過去的六週通過學習C語言學了很多語言的基礎,之後學任何語言靠google和stackoverflow學一下句法就可以了。經過這一個多月的學習,好像對Python稍微有點感覺了。

一週學習Python一門語言的基本語法,這節課課程本身簡單了很多,不像之前的課程,得分好幾次看,這週課程可以一口氣看完。但是這週的作業,尤其是DNA還是有一定難度。

筆記:

本週的內容主要是通過用python來改寫之前用C寫過的程式來學習python,課程不難,但是進度超快,一節課的時間涉及全部基礎python coding內容,很多知識點老師只是點一下,需要自己課外學習。

1.Python和C語言的不同之處

1)句法的不同

indentation和{ }

2)Python為翻譯型語言,C為編譯型語言

Python本身有一個用C語言編寫的interpretor。

3)開發時間和程式運行時間

整體來說,Python的軟體開發時間短於C語言,因為可以大量使用library,相當於撿現成的hash table/function來用。

但是Python的程式運行時間要大於同樣的C的程式運行時間。

如果是處理非常大的數據,而且需要一直不斷的處理,比如google公司要處理海量的數據,有海量的人不斷的使用,那麼前期費多些時間用C語言開發,成功後即可大幅提高程式反應時間。

或者是在有容量限制(智能家電)或者電量限制(手錶)的設備上,使用底層的C語言讓程式越快運行越好。

不過Python也可以通過優化interpreter(interpreter都是用C撰寫),或者使用CACHE來降低第二次以後的軟體運行時間,相當於翻譯一次就夠了。

所以,C和Python各有優點,都屬於大量使用的語言。

2.list/tuple/set/dictionary

list:用[ ]表示,值可變,可以通過索引進行查找。

tuple:用()表示,值不可變。

set:用set()表示,值可變無序且不重複。

dictionary:用{}表示,每個item用逗號做區隔,冒號前面表示key,冒號後面表示value。可變,通過key查找值,也可以用key來loop。

empty_list = []
empty_list = list()
students = ['Amy',18,['basketball','badminton']]
nums = [x for x in range(100)]
students = [(Amy,20),(Bob,19),(Ben,21)]
empty_tuple = ()
empty_tuple = tuple()
student = [(),(),()]
empty_set = set()
empty_dict = {}
students = {'name':Amy,'gender':female,'age':18,'hobby':['basketball ','badminton']}
student['name'] = Amy
pizzas = {'cheese':9,'pepperoni':10,'vegetable':11,'buffalo chicken':12}
for pie, price in pizzas.items():
    print("A whole {}pizza costs {}".format(pie, price))

3.發現Python 官方的Tutorial簡單明瞭易讀。

https://docs.python.org/3/tutorial/introduction.html

作業心得:

1.Mario,變簡單了,2個總共花費不到半小時

2.Credit 花費2個半小時

大部分時間花在學習re和string slicing。

3.Readability 花費50分鐘

4.DNA,總共花了7個小時,邊解題邊google學習相關內容。

最後很囉嗦的寫完了程式碼。

def main():
    # TODO: Check for command-line usage
    n = len(sys.argv)
    if n < 3:
        print('Usage: python dna.py data.csv sequence.txt')
        sys.exit()
    # TODO: Read database file into a variable
    with open(sys.argv[1],'r') as file:
        database = DictReader(file) # convert to dict with string format
        data_dict = list(database)
    # TODO: Read DNA sequence file into a variable
        with open(sys.argv[2],'r') as dna:
            dna_sequence = dna.read()
            # TODO: Find longest match of each STR in DNA sequence
            dict = {}
            for subsequence in ['AGATC','TTTTTTCT','AATG','TCTAG','GATA','TATC','GAAA','TCTG']:
                dict[subsequence] = longest_match(dna_sequence, subsequence)
    # TODO: Check database for matching profiles
        found = 0
        for i in range(0, len(data_dict)):
            count = 0
    #check for large database
            if len(data_dict) == 23:
                for fieldname in ['AGATC','TTTTTTCT','AATG','TCTAG','GATA','TATC','GAAA','TCTG']:
                    if dict[fieldname] == int(data_dict[i][fieldname]):
                        count = count + 1
                        if count == 8:
                            found = found + 1
                            name = data_dict[i]['name']
    #check for small database
            elif len(data_dict) == 3:
                for fieldname in ['AGATC','AATG','TATC']:
                    if dict[fieldname] == int(data_dict[i][fieldname]):
                        count = count + 1
                        if count == 3:
                            found = found+1
                            name = data_dict[i]['name']
        if found == 1:
            print(name)
        else:
            print('No match')
    return

1 thought on “CS50 wk6 Python課程筆記和學習心得”

Leave a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *