Python入门经典——编程项目(三)
来源:互联网 发布:网络词草根是什么意思 编辑:程序博客网 时间:2024/05/29 04:10
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 -1def 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颗豆子)时,有两个玩家。每个玩家都可以从堆中的16颗豆子中取出1颗、2颗或者3颗豆子。每个玩家在每回合中必须从堆中取出一定数目的豆子。玩家轮流取出豆子,取到最后一颗豆子的玩家是输家。
每个玩家用一个函数表示,因此将有两个函数。每个函数都接受一个参数,表示目前豆子的数目,并返回player函数轮流执行后剩余的豆子数目、在player函数的操作后,函数输出豆子的数目。
此外还需要住程序。主程序将豆堆中豆子数量初始化为16,然后交替调用第一个player函数和第二个player函数,知道某个玩家取到最后一颗豆子时结束。主函数输出谁是输家,然后退出。
(a)编写简单的player函数,例如总是取出一颗豆子。它不是很有趣,但可以用来测试程序。
(b)现在做有趣的部分。比如“smart player”函数,与其他玩家比较,看谁能获胜
测试代码:
import randomdef 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!!!'
- Python入门经典——编程项目(三)
- Python入门经典——编程项目(一)
- Python入门经典——编程项目(二)
- 《Python编程入门经典》笔记
- Java\Scala\Python三种语言求解经典编程实例(三)—— 不重复的3位数
- 《python编程入门经典》学习笔记第九章(一)
- Java\Scala\Python三种语言求解经典编程实例(一)——求水仙花数
- Java\Scala\Python三种语言求解经典编程实例(二)—— 尾数前移
- Java\Scala\Python三种语言求解经典编程实例(四)—— 求10000以内的自守数
- C#编程之经典算法——排序(三)
- C#编程之经典算法——查找(三)
- Python 定向爬虫入门—Python(三)
- python入门(三)
- python入门(三)
- python入门(三)
- Python入门(三)
- PYTHON入门(三)
- python入门经典(一)
- 【redis源码分析】redis对象和hash表---redisObject+hashType
- linux下的C语言开发(开篇)
- 9.7 偷懒的办法处理拷贝构造函数与赋值函数
- Android实现推送方式解决方案
- 设计模式之策略模式
- Python入门经典——编程项目(三)
- 利用SecureCRT上传、下载文件(使用sz与rz命令)
- JAX-WS和WSDL两个概念的理解
- 【剑指offer】二叉搜索树转双向链表
- 9.8 如何在派生类中实现类的基本函数
- 练习6.19
- OpenGL code resources
- ThreadX线程的执行和调度
- WPF 2