1. dna 排序
dna排序指確定dna分子中的腺嘌呤、胸腺嘧啶、胞嘧啶和鳥嘌呤鹼基的順序、標準表示法的基礎使用其首字母(atcg),所以dna是用4個字元構成的字串。dna字串可能會有百萬個單位(字元)長。
子串匹配(substring matching)是乙個過程,確定乙個較短的字串(子串)是否包含在乙個較長的字串中。子串匹配在從片段重構未知的dna串和在已知的dna串中尋找感興趣的子串等應用中都起著重要作用。
python提供了find(subsring,start,end)字串方法,返回子串的最小索引位置(整數在start≤index≤end範圍內)。start和end引數是可選的,在這個聯絡中,要求輸入它們。如果沒有找到子串,則返回-1.
(a)不使用find字串方法,編寫函式,實現與find字串方法相同的功能。由於函式不是字串方法,一次要搜尋的字串必須作為第乙個引數。函式的最終格式將是:find(somestring,substring,start,end)。
(b)生物學的研究人員需要找到所有子串的位置,而不只是第一次出現的位置,編寫名為multifind(somesrting,substring,start,end)的函式,不返回整數索引,而是返回字串,其中包含用逗號分隔的零個或多個索引位置。在此例中,該字串將包含代表整數索引的數字。如果沒有找到子串,則返回空串。可以使用前面自己編寫的find方法。
def find(somestr, substr, start = 0, end = 'max'):
if end == 'max':
end = len(somestr)
index = start
for char in somestr[start: end]:
if char == substr[0] and somestr[index:index+len(substr)] == substr:
return index
index += 1
return -1
def multifind(somestr, substr, start=0, end='max'):
if end == 'max':
end = len(somestr)
index = start
indexstr = ''
indexlist =
indexlistcopy =
for char in somestr[start:end]:
result = str(find(somestr, substr, index,end))
if result != '-1':
index += 1
for i in indexlist:
if i not in indexlistcopy:
indexstr = ''.join(indexlistcopy)
return indexstr
2. 豆堆
我們要玩的遊戲稱為《豆堆》。遊戲開始(現在堆裡有16顆豆子)時,有兩個玩家。每個玩家都可以從堆中的16顆豆子中取出1顆、2顆或者3顆豆子。每個玩家在每回合中必須從堆中取出一定數目的豆子。玩家輪流取出豆子,取到最後一顆豆子的玩家是輸家。
每個玩家用乙個函式表示,因此將有兩個函式。每個函式都接受乙個引數,表示目前豆子的數目,並返回player函式輪流執行後剩餘的豆子數目、在player函式的操作後,函式輸出豆子的數目。
此外還需要住程式。主程式將豆堆中豆子數量初始化為16,然後交替呼叫第乙個player函式和第二個player函式,知道某個玩家取到最後一顆豆子時結束。主函式輸出誰是輸家,然後退出。
(a)編寫簡單的player函式,例如總是取出一顆豆子。它不是很有趣,但可以用來測試程式。
(b)現在做有趣的部分。比如「smart player」函式,與其他玩家比較,看誰能獲勝
測試**:
import random
def player_human(n):
print '-'*26
print 'in human process:'
while(1):
guess_human = int(raw_input('the human guess is: '))
if 1 <= guess_human <= 3:
break
else:
print 'the input must greater than 0 and less than 4!'
print 'the remaining is', (n - guess_human)
return (n - guess_human)
def player_computer(n):
print '-' * 26
print 'in computer process:'
guess_computer = random.randint(1,3)
print 'the computer guess is:',guess_computer
print 'the remaining is', (n - guess_computer)
return n - guess_computer
def main():
computer_win = false
total = 16
while(1):
total = player_human(total)
if total <= 0:
computer_win = true
break
total = player_computer(total)
if total <= 0:
computer_win = false
break
if computer_win:
print 'computer win!!!'
else:
print 'human win!!!'
要想電腦必勝,電腦必須是後手。**部分只修改了player_computer()函式
smart player版本:
def player_human(n):
print '-'*26
print 'in human process:'
while(1):
guess_human = int(raw_input('the human guess is: '))
if 1 <= guess_human <= 3:
break
else:
print 'input error!'
print 'the remaining is', (n - guess_human)
return (n - guess_human)
def player_computer(n):
print '-' * 26
print 'in computer process:'
guess_computer = n % 4
print 'the computer guess is:',guess_computer
print 'the remaining is', (n - guess_computer)
return n - guess_computer
def main():
computer_win = false
total = 16
print 'the total beans is', total
print 'the input should greater than 0 and less than 4'
while(1):
total = player_human(total)
if total <= 0:
computer_win = false
break
total = player_computer(total)
if total == 0:
computer_win = true
break
if computer_win:
print 'computer win!!!'
else:
print 'human win!!!'
入門經典程式設計題
編寫乙個靜態方法histogram 接收乙個整型陣列a和乙個整型m返回乙個大小為m的陣列 其中第i個元素的值為整數i在引數陣列 現的次數。如果a中的值均在到0到m 1之間,返回陣列中所有元素之和應該和a.length相等.讀題是真的費勁,整個例子吧 陣列a m 7,新陣列b 第0個元素的值為整數0在...
Python 入門之經典函式例項(三)
r星校長 第3關 map reduce 對映與歸約的思想 python 中有兩個非常常見的內建函式 map 和reduce 函式。這兩個函式都是應用於序列的處理函式,map 用於對映,reduce 用於歸併。本關目標就是讓學習者了解並掌握map 和reduce 函式的相關知識。map 函式 map ...
十本經典教材帶你入門Python程式設計
本文介紹了十本python程式語言的入門書籍,其中不乏經典。我在這裡分享的,大部分是這些書的英文版,如果有中文版的我也加上了。有關書籍的介紹,大部分擷取自是官方介紹。福利獲取方法見文末。python基礎教程的封面 評語 python入門佳作 經典教程的全新修訂 10個專案引人入勝 python基礎教...