Python入門経典——プログラミングプロジェクト(三)

4857 ワード

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':
            indexList.append(result)
        index += 1

    for i in indexList:
        if i not in indexListCopy:
            indexListCopy.append(i)

    indexStr = ''.join(indexListCopy)
    
    
    return indexStr

2.豆の山
私たちが遊ぶゲームは「豆の山」と呼ばれています.ゲームが始まると(今は16粒の豆が積まれています)、2人のプレイヤーがいます.各プレイヤーは、山の中の16粒の豆から1粒、2粒、または3粒の豆を取り出すことができます.各プレイヤーはラウンドごとに山から一定数の豆を取り出さなければならない.プレイヤーは交代で豆を取り出し、最後の豆を取ったプレイヤーは負け者だ.
各プレイヤーは1つの関数で表されるため、2つの関数があります.各関数は、現在の豆の数を表すパラメータを受け入れ、player関数が順番に実行した後の残りの豆の数を返し、player関数の操作後、関数は豆の数を出力します.
また、プログラムが必要です.メインプログラムは豆の山の中の豆の数を16に初期化し、最初のプレイヤー関数と2番目のプレイヤー関数を交互に呼び出し、あるプレイヤーが最後の豆を取ったときに終了することを知る.プライマリ関数は、誰が負けたかを出力し、終了します.
(a)単純なプレイヤー関数を記述し、例えば常に豆を取り出す.面白くありませんが、プログラムをテストすることができます.
(b)今面白い部分を作ります.例えば「スマートプレイヤー」関数は、他のプレイヤーと比較して、誰が勝つかを見ます.
テストコード:
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!!!'

これはTake-Away Gamesで、まずこの英語の論文を見てみることを強くお勧めします.中国語の翻訳よりも紹介が強すぎます.
http://www.math.ucla.edu/~tom/Game_Theory/Contents.html
コンピューターが必ず勝つためには、コンピューターは後手でなければならない.コード部分は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!!!'