Python入門經典 程式設計專案(三)

2021-06-22 04:22:53 字數 4161 閱讀 3421

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基礎教...