首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

斗地主老是输?一起用 Python 做个 AI 出牌器!

确认好地主和农民的各个角色,告诉它三个人对应的关系,这样就可以确定队友和对手。 我们还要将每一轮其他两人的出牌输入,这样出牌器就可以根据出牌数据,及时提供给我们最优出牌决策,带领我们取得胜利!...img = pyautogui.screenshot(region=pos) for card in AllCards: result = pyautogui.locateAll(needleImage...='pics/m' + card + '.png', haystackImage=img, confidence=self.MyConfidence) user_hand_cards_real...坐标调整确认 我们可以打开游戏界面,将游戏窗口模式下最大化运行,把AI出牌器程序窗口需要移至右下角,不能遮挡手牌、地主标志、底牌、历史出牌这些关键位置。 其次我们要确认屏幕截图获取的各个区域是否正确。...当玩家就位,手牌分发完毕,地主身份确认之后,我们就可以点击画面开始按钮,让AI来帮助我们斗地主了。

1.8K20

python之文件操作

打开\创建文件 在python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件,默认在当前程序所在文件夹下创建新文件。...每次都要关闭文件操作 ''' ''' # 读取,read方法,读取指定的字符,开始时定位在文件头部,每执行一次向后移动指定字符数 f = open("test.txt","r") str = f.read...(5) # 指定读取五个字符 print(str) str = f.read(5) # 再读取五个字符,使用文件指针,依次往后读,并不是每次都从开头读 print(str) f.close() ''...os库的rename()可以完成对文件的重命名。...格式:rename(需要修改的文件名,新的文件名) import os os.rename("毕业论文.txt","毕业论文-最终版.txt")| 删除文件 os模块的remove()可以完成对文件的删除操作

35021
您找到你想要的搜索结果了吗?
是的
没有找到

Django使用redis缓存服务器

每次都从硬盘读取一次,浪费服务器资源、拖慢响应速度。 2)数据更新频率较高,服务器负担比较大。 这些数据只需每天更新一次。而我每次都从数据库获取相应的数据,计算统计排行情况和阅读数。...解决方法是定时统计一次数据,保存到数据库或文件每次读取数据从中获取。 若保存到数据库,还需要额外建立一张对应的表存储数据。在Django建立表通常做法是建立一个模型。...毕竟一开始访问量不是很多。后来不少网友访客打开慢(当然服务器在国外也是个原因),查了资料发现Redis内存数据库。可以将数据写入到内存,再进行读写。减少计算量,可以有效提高服务器响应速度。...安装完毕之后,给Django项目的settings.py文件添加如下配置。...不是每个时区都和我一样在0点的时候看到更新结果。我们是东八区,我们0点的时候,东九区是1点。所以,每1小时更新一次的频率较为合适,你可以直接设置60*60秒。

2.4K10

基于word2vec的词语相似度计算

但实际上可以把“椅子”的结果返回给用户参考。这种泛化的能力,通过简单的字符串匹配是显然不能实现的。 词语相似度计算 在上面的例子,“凳子”跟“椅子”的语意更相近,跟“香蕉”或“冰箱”的语意相对较远。...在商品搜索的过程可以计算用户输入的关键字与数据库商品名间的相似度,在商品数据库找出相似度最大的商品,推荐给用户。这种相近的程度就是词语的相似度。...在实际的工程开发可以通过word2vec实现词语相似度的计算。 代码实现 运行结果 调试技巧 在开发调试的过程,会出现错误,需要重新运行程序。...如果每次修改后,都从头开始执行,肯定会消耗很多无用的时间。...比如,预处理后的文本结果和word2vec的训练参数,这些中间结果可以保持下来,当遇到问题时,就可以文件读取结果,不需要每次都从头开始。

2.6K50

Python文件定位函数seek的讲解

上一篇文章我们在读写文件内容的时候会出现后写入的内容覆盖原有的内容,或者每次读取文件的时候都从第一个字符开始读起,这样一来我们就没办法准确的操纵读写规律,所以这里再介绍一个Python文件定位(seek...通过seek方法我们可以指定读取内容的开始位置,或者从哪里写入文本内容,下面就来详细学习一下。...方法构造:def seek(self, offset: int, whence: int = 0) f = open('a.txt', 'r+') f.seek(2) # 从左向右偏移2个字符,注意这里不是移动下标...() print(f.tell()) # 读取文件指针到6的位置 print(content) f.close() f = open('a.txt', 'rb') f.seek(-3, 2) # 2代表结尾位置...= f.read(3) # 3表示读取3个字节,同时下标会向右移动三个字节print(content) f.close()

1.5K20

一日一技:这个使用场景,etcd 比 Redis 强。

现在我有一个过滤程序:trash_filter.py,它一条一条从 Redis 读取数据,判断字符串是否有特定的关键词,如果有,那么直接丢弃。如果没有,那么把数据存入 MongoDB。...每次为了修改这些词,你都需要重启一下这个程序吗? 可能有同学提到,可以把这些词存放到数据库里面,每次从数据库里面读取可以了。...每读取到一个句子,都从 Redis 里面再次读取这个过滤词列表,然后进行检查。 这样做,实时性确实得到了保障,每次只要trash_word字符串一发生修改,程序立刻就能获取到最新的过滤词。...但这样做有一个问题——每次读取trash_words是需要请求网络的,网络 IO 是非常费时间的。 那么我们是不是可以每5分钟获取一次最新的trash_words呢?...但是当我们中途修改了 etcd ,名为test这个 key 的值以后,我们发现回调函数被运行了,如下图所示: 可以看到,etcd 监控一个 key 是否变化,它不像 Redis 的blpop这样阻塞式地监控

4.2K30

一日一技:这个使用场景,etcd 比 Redis 强

现在我有一个过滤程序:trash_filter.py,它一条一条从 Redis 读取数据,判断字符串是否有特定的关键词,如果有,那么直接丢弃。如果没有,那么把数据存入 MongoDB。...每次为了修改这些词,你都需要重启一下这个程序吗? 可能有同学提到,可以把这些词存放到数据库里面,每次从数据库里面读取可以了。...每读取到一个句子,都从 Redis 里面再次读取这个过滤词列表,然后进行检查。 这样做,实时性确实得到了保障,每次只要trash_word字符串一发生修改,程序立刻就能获取到最新的过滤词。...但这样做有一个问题——每次读取trash_words是需要请求网络的,网络 IO 是非常费时间的。 那么我们是不是可以每5分钟获取一次最新的trash_words呢?...但是当我们中途修改了 etcd ,名为test这个 key 的值以后,我们发现回调函数被运行了,如下图所示: 可以看到,etcd 监控一个 key 是否变化,它不像 Redis 的blpop这样阻塞式地监控

50920

FileReader 和FileInputStream的区别

File 不属于文件流 , 只能代表一个文件或是目录的路径名而已。 提示:如果处理文件或者目录名,就应该使用 File 对象,不是字符串。...String 指定路径就可以了,一直不明白为什么很多人都先构造一个 File 对象,现在终于明白了,“如果处理文件或者目录名,就应该使用 File 对象,不是字符串。”!...=-1 ) 循环来读取文件可以使用BufferedReader 的 readLine() 方法一行一行的读取文本。...它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。每次调用 InputStreamReader 的一个 read() 方法都会导致从底层输入流读取一个或多个字节。...,而且提供了很实用的readLine,读取分行文本很适合,BufferedReader是针对Reader的,不直接针对文件,也不是只针对文件读取

57920

服务化构建-服务的无状态化能带来什么?

HTTP 的无状态理解为单次 HTTP 请求响应 可以独立完成,每次请求不需要与上次请求有太多的关联和牵扯。...编程的本质是实现控制和逻辑分离和解耦,无状态是实现数据和程序的分离,这两个一起理解,有没有异曲同工之妙?...有几个特点,你不妨对应一下,是否存在。 系统中有个导出文件功能,文件会存储到项目工程的指定目录下,每次读取都从这里下载。 多个服务共同访问服务器上某个文件,实现权限的控制和记录。...微服务四步法 ❝从架构设计层面,可以把系统分为有状态部分和无状态部分❞ 服务是无状态化的,业务必定是有状态的,所以一个应用系统必定可以分为有状态部分和无状态部分。这也是一种架构切割方案。...现实开发,并不是所有的公司都能撑得起服务的完全无状态,然而这并不影响我们趋向于无状态化的设计我们的系统。 ❝指导思想不会变,服务无状态,业务有状态。❞ 还是那句话合适的就是最好的。

1.5K10

volatile关键字解析~高级java必问

可见性即用volatile关键字修饰的成员变量表明该变量不存在工作线程的副本,线程每次直接都从主内存读取每次读取的都是最新的值,这也就保证了变量对其他线程的可见性。...volatile使用场景 如果正确使用volatile的话,必须依赖下以下种条件: 1、对变量的写操作不依赖当前变量的值; 2、该变量没有包含在其他变量的不变式。...第1个条件就说明了volatile不是原子性的操作,不能使用n++类似的计数器,它不是线程安全的。 1、状态的改变 有些场景肯定会有状态的改变,完成一个主线程的停止等。...首先我们开启了一个无限循环的主线程,判断变量isStop变量是否为true,如果true的话就退出程序,否则就一直循环,所以这个isStop的值是别的线程改变的。...像n++不是原子类的操作,其实可以通过synchronized对写方法锁住,再用volatile修饰变量,这样就保证了读线程对变量的可见性,又保证了变量的原子性。

46760

DotNET企业架构应用实践-系统架构与性能-缓存技术与ORM的缓存查询技术

我们大家都知道,计算机结构的高速缓存是一项非常成熟的技术,那么我们是否可以说把这样的技术应用于我们的应用软件之上呢,或者说在应用软件之中应用类似这样的技术呢?...那么我们是否可以构建一种这样的机制或者应用组件/软件,能大大的减少对数据库的访问,以提高性能的目的呢?       ...,不是每次都从数据库服务器读取,即形成下图的结构: ?       ...通过这种改造和应用,那么我们业务处理需要的一些数据,就不必每次都从数据库重复读取,而是可以把很大一部的数据经由缓存系统(组件读取)处理,这样就可以为我们减少数据库的压力。...简单的缓存系统/组件       既然我们已经知道了缓存是什么东西,并且是如何提高性能的,那么我们是不是可以自己搞出这样的缓存系统呢,当然是可以的,一个简单的缓存系统(组件)可以由以下接口定义:   1

85870

每个学习多线程的Java程序员都必须掌握的volatile关键字解析

可见性即用volatile关键字修饰的成员变量表明该变量不存在工作线程的副本,线程每次直接都从主内存读取每次读取的都是最新的值,这也就保证了变量对其他线程的可见性。...volatile使用场景 如果正确使用volatile的话,必须依赖下以下种条件: 1、对变量的写操作不依赖当前变量的值; 2、该变量没有包含在其他变量的不变式。...第1个条件就说明了volatile不是原子性的操作,不能使用n++类似的计数器,它不是线程安全的。 一、状态的改变 有些场景肯定会有状态的改变,完成一个主线程的停止等。...首先我们开启了一个无限循环的主线程,判断变量isStop变量是否为true,如果true的话就退出程序,否则就一直循环,所以这个isStop的值是别的线程改变的。...像n++不是原子类的操作,其实可以通过synchronized对写方法锁住,再用volatile修饰变量,这样就保证了读线程对变量的可见性,又保证了变量的原子性。

55550

前端性能优化(三)——浏览器九大缓存方法

web缓存发现请求资源已经被存储,它会拦截请求,返回资源副本,不会去服务器重新请求资源。 具体的缓存设置,如何判断是否有缓存?等,上一篇文章以详细介绍,可点击《浏览器缓存机制》查看。...websql主要特点: Web Sql数据库 API 不是HTML5的一部分,在H5之前就已经存在了。 将数据以数据库的形式存储在客户端,按需读取。 数据便于检索,允许使用sql语句。...,页面打开时通过mainfest文件读取本地文件或请求服务器资源。...application cache特点: mainfest文件必须有变化时才会更新。 一次必须更新mainfest文件的所有文件才能生效。 当网络断开时,可以继续访问页面。...文件缓存到本地,不需要每次都从网络上请求。 稳定性比较好,遇网络故障或服务器故障可以继续访问本地缓存。 加载速度快,缓存资源为本地资源,因此加载速度较快。

1.8K30

前端性能优化(三)——浏览器九大缓存方法

web缓存发现请求资源已经被存储,它会拦截请求,返回资源副本,不会去服务器重新请求资源。 具体的缓存设置,如何判断是否有缓存?等,上一篇文章以详细介绍,可点击《浏览器缓存机制》查看。...websql主要特点: Web Sql数据库 API 不是HTML5的一部分,在H5之前就已经存在了。 将数据以数据库的形式存储在客户端,按需读取。 数据便于检索,允许使用sql语句。...,页面打开时通过mainfest文件读取本地文件或请求服务器资源。...application cache特点: mainfest文件必须有变化时才会更新。 一次必须更新mainfest文件的所有文件才能生效。 当网络断开时,可以继续访问页面。...文件缓存到本地,不需要每次都从网络上请求。 稳定性比较好,遇网络故障或服务器故障可以继续访问本地缓存。 加载速度快,缓存资源为本地资源,因此加载速度较快。

1.3K30

前端性能优化(三)——浏览器九大缓存方法

web缓存发现请求资源已经被存储,它会拦截请求,返回资源副本,不会去服务器重新请求资源。 具体的缓存设置,如何判断是否有缓存?等,上一篇文章以详细介绍,可点击《浏览器缓存机制》查看。...websql主要特点: Web Sql数据库 API 不是HTML5的一部分,在H5之前就已经存在了。 将数据以数据库的形式存储在客户端,按需读取。 数据便于检索,允许使用sql语句。...,页面打开时通过mainfest文件读取本地文件或请求服务器资源。...application cache特点: mainfest文件必须有变化时才会更新。 一次必须更新mainfest文件的所有文件才能生效。 当网络断开时,可以继续访问页面。...文件缓存到本地,不需要每次都从网络上请求。 稳定性比较好,遇网络故障或服务器故障可以继续访问本地缓存。 加载速度快,缓存资源为本地资源,因此加载速度较快。

2K20

计网 - 流和缓冲区:缓冲区的 flip 是怎么回事?

比如你可以设计一个读文件的流,每次至少会读出 4k 大小,也可以设计一个读文件的程序,每次读出一个字节大小。 通常情况读取数据的流,是读取流;写入数据的流,是写入流。...读取流的本质当然是内存的一个对象。当用户读取文件内容的时候,实际上是通过流进行读取,看上去好像从流读取了数据,本质上读取的是文件的数据。...比如流对象只设计一个整数型指针,一开始指向文件的头部,每次发生读取都从文件读出内容,然后再返回给用户线程。做完这次操作,指针自增。通过这样的设计,流中就不需要再有数据了。...因为从文件读取数据这个操作,是一次磁盘的 I/O 操作,非常耗时。正确的做法是每次读取 2k、4k 这样大小的数据,这是因为操作系统的内存分页通常是这样的大小,磁盘的读写往往是会适配页表大小。...而且现在的文件系统主要都是日志文件系统,存储的并不是原始数据本身,也就是说多数情况下你看到的文件不是一个连续紧密的字节线性排列,而是日志。

59820

音视频面试题集锦第 21 期

这种方法可以在不损失细节的情况下提供非常高质量的图像,但性能消耗很高,因为它需要渲染更多的像素。 SSAA 通常用于离线渲染,不是实时渲染,因为它对硬件资源的要求非常高。...MSAA(多重采样抗锯齿): MSAA 是一种在渲染过程应用的抗锯齿技术,它只对每个像素的多个样本进行计算,不是对整个像素进行计算。这可以减少几何锯齿,但对纹理锯齿的效果有限。...例如,当更新纹理时,可以先将数据复制到 PBO,然后由 GPU 直接从 PBO 读取不是每次都从 CPU 内存复制。...优化显存利用:使用 PBO 可以避免在每次更新纹理时销毁和重新创建纹理内存,从而优化显存的利用率。...适用场景:对于需要频繁更新或读取大量像素数据的应用程序,如图像处理、计算机视觉或大规模渲染任务,PBO 可以显著提高性能。 3、iOS 如何使用分段转码,如何设置分片大小?

11710
领券