心得:
本週從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
So you are a man or woman?