利用上一篇的框架,再写了个翻转棋的程序,为了调试minimax算法,花了两天的时间。几点改进说明:拆分成四个文件:board.py,player.py,ai.py,othello.py。使得整个结构更清晰,更通用,更易于维护。AI的水平跟minimax的递归深度,以及评价函数有关。基于此,我把minimax和评价函数都放到AI类里面AIPlayer使用了多重继承。继承了Player与AI两个类Game类中把原run函数里的生成两个玩家的部分提出来,写成一个
系统 2019-09-27 17:54:46 2032
python异步IO编程(一)基础概念协程:pythongenerator与coroutine异步IO(asyncIO):一种由多种语言实现的与语言无关的范例(或模型)。asyncio:Python3.4版本引入的标准库,直接内置了对异步IO的支持。异步IO线程,多线程多线程善于处理I/O密集型任务。多进程擅长处理计算密集型(CPU-bound)任务:强密集循环和数学计算都属于此类。并发是并行的一种特殊类型(或者说子类),多线程是并发的表现形式,多进程是并
系统 2019-09-27 17:54:15 2032
一、*args的使用方法*args用来将参数打包成tuple给函数体调用defargs_test(x,y,*args):print(x,y,args)args_test(1,2,3,4,5)12(3,4,5)二、**kwargs的使用方法**kwargs打包关键字参数成dict给函数体调用defkwargs_test(**kwargs):print(kwargs)kwargs_test(a=1,b=2,c=3){'a':1,'c':3,'b':2}三.参数
系统 2019-09-27 17:54:08 2032
一.问题描述Givenanintegerarraynums,findthecontiguoussubarray(containingatleastonenumber)whichhasthelargestsumandreturnitssum.Example:Input:[-2,1,-3,4,-1,2,1,-5,4],Output:6Explanation:[4,-1,2,1]hasthelargestsum=6.Followup:Ifyouhavefigur
系统 2019-09-27 17:53:31 2032
test.pyfromflaskimportFlask,gfromflask_restfulimportreqparse,Api,Resourcefromflask_httpauthimportHTTPTokenAuth#Flask相关变量声明app=Flask(__name__)api=Api(app)#RESTfulAPI的参数解析--put/post参数解析parser_put=reqparse.RequestParser()parser_put.a
系统 2019-09-27 17:51:12 2032
前言生成器是Python初级开发者最难理解的概念之一,虽被认为是Python编程中的高级技能,但在各种项目中可以随处见到生成器的身影,你得不得去理解它、使用它、甚至爱上它。提到生成器,总不可避免地要把迭代器拉出来对比着讲,生成器就是一个在行为上和迭代器非常类似的对象,如果把迭代器比作Android系统,那么生成器就是iOS,二者功能上差不多,但是生成器更优雅。什么是迭代器顾名思义,迭代器就是用于迭代操作(for循环)的对象,它像列表一样可以迭代获取其中的每
系统 2019-09-27 17:50:50 2032
Mock是什么Mock这个词在英语中有模拟的这个意思,因此我们可以猜测出这个库的主要功能是模拟一些东西。准确的说,Mock是Python中一个用于支持单元测试的库,它的主要功能是使用mock对象替代掉指定的Python对象,以达到模拟对象的行为。简单的说,mock库用于如下的场景:假设你开发的项目叫a,里面包含了一个模块b,模块b中的一个函数c(也就是a.b.c)在工作的时候需要调用发送请求给特定的服务器来得到一个JSON返回值,然后根据这个返回值来做处理
系统 2019-09-27 17:50:41 2032
迭代器和可迭代对象由for循环的内部原理说起list01=[2,434,5,6,8]foriteminlist01:print(item)大家有没有想过list类型对象为什么可以被for循环呢?能够被for循环的条件是:它是可迭代对象(iterable)。那么什么是可迭代对象呢?参考一下内置函数item()的官方说明文档:iter(object[,sentinel])返回一个iterator对象。根据是否存在第二个实参,第一个实参的解释是非常不同的。如果没
系统 2019-09-27 17:50:23 2032
1.冒泡排序1.1算法思想冒泡排序是一种简单的排序算法。通过重复地遍历要排序的数列,一次比较两个元素,从最开始的一对到最后的一对(相当于一个长度为2的滑动窗口),如果它们的顺序错误(看从小到达排列还是从大到小排列)就把它们交换过来。如果是升序排列的话,每次遍历都会把最大值交换到最右边。然后重复这个过程,直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的头部,就像冒泡一样。这个算法不需要额外的空间,
系统 2019-09-27 17:49:46 2032
这是一个我用于调试或分析工具概述,不一定是完整全面,如果你知道更好的工具,请在评论处标记。日志是的,的确,不得不强调足够的日志记录对应用程序是多么的重要。您应该记录重要的东西,如果你的记录足够好的话,你可以从日志中找出问题从而节省大量的时间。如果你曾经用print语句来调试代码现在停下吧,用logging.debug替代,开始可以慢慢来,以后完全禁用它...追踪有时看到程序如何被执行会很有帮助。你可以使用IDE的调试共轭ngn一步一步的运行程序,但你需要知
系统 2019-09-27 17:49:14 2032
1.计算机语言的基本概念计算机语言(ComputerLanguage)指用于人与计算机之间的通信。2.解释型和编译型语言的区别编译型语言:如:CC++(1)、只须编译一次就可以把源代码编译成机器语言,后面的执行无须重新编译,直接使用之前的编译结果就可以;因此其执行的效率比较高;(2)、程序执行效率比较高,但比较依赖编译器,因此跨平台性差一些;解释型语言、如:Python(1)源代码不能直接翻译成机器语言,而是先翻译成中间代码,再由解释器对中间代码进行解释运
系统 2019-09-27 17:49:07 2032
目录Python并发编程05/死锁/递归锁/信号量/GIL锁/进程池/线程池1.昨日回顾2.死锁现象与递归锁2.1死锁现象2.2递归锁3.信号量4.GIL全局解释器锁4.1背景4.2为什么加锁5.GIL与Lock锁的区别6.验证计算密集型IO密集型的效率6.1IO密集型6.2计算密集型7.多线程实现socket通信7.1服务端7.2客户端8.进程池,线程池Python并发编程05/死锁/递归锁/信号量/GIL锁/进程池/线程池1.昨日回顾#生产者消费者模型
系统 2019-09-27 17:49:06 2032
前言:自动化测试存在比较多的使用限制,会存在某段时间无法使用的生疏期。通过这篇文章记录项目编写程序中遇到的问题以及解决思路,希望对以后的自动化开发能有些帮助。问题11:python链接postgre数据库问题12:python单文件打包--可以研究下多文件打包,目前还没有解决多问题打包的问题问题13:python如何生成json文件?如何将生成的文件格式化问题14:python如何创建目录,创建文件问题15:python如何写入文件内容入门之---txt问
系统 2019-09-27 17:47:37 2032
splitlines()方法返回一个字符串的所有行,可选包括换行符列表(如果num提供,则为true)语法以下是splitlines()方法的语法:str.splitlines(num=string.count('\n'))参数num--这是任何数,如果存在它会被认为换行需要被包括行数。返回值如果找到匹配的字符串此方法返回true,否则为false。例子下面的例子显示splitlines()方法的使用。#!/usr/bin/pythonstr="Line1
系统 2019-09-27 17:47:07 2032
isdecimal()方法检查字符串是否仅由十进制字符组成。此方法只存在于unicode对象。注意:要定义一个字符串为Unicode,只需前缀分配'u'左引号。以下是示例。语法以下是isdecimal()方法的语法:str.isdecimal()参数NA返回值如果字符串中的所有字符为十进制此方法返回true,否则返回false。例子下面的例子显示了isdecimal()方法的使用。#!/usr/bin/pythonstr=u"this2009";print
系统 2019-09-27 17:47:04 2032