❤️震惊!人生苦短,我用python来玩田忌赛马❤️

一读标题笑死自己哈哈哈,最近猪哥(玩得敲好的彭友)找我帮忙解决他不会作业哈哈哈,他们公司自己出的笔试题哈哈哈,希望别被他们出题人看见哈哈哈,回想猪哥说的一句话,万一这就是以后你遇到的试题呢哈哈哈。突然发现自己已经小半年没玩Python了,一上手手都生了,还真是那句话,三天不摸手生了都。

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注!
欢迎关注微信公众号:宝藏女孩的成长日记
让这个可爱的宝藏女孩在努力的道路上与你一起同行!
如有转载,请注明出处(如不注明,盗者必究)

在这里插入图片描述

关于田忌赛马的拙见

  • 使用 python 函数实现田忌赛马
    • 要求一
    • 要求二
    • 要求三

使用 python 函数实现田忌赛马

要求一

现在我们
将田忌的马抽象为一个列表 [2,5,8],
齐王的马抽象为另一个列表 [3,6,9],
分别代表各自的下、中、上等马(我自己读到这里就记住值越大,马越好,这样理解就不会错了)。
设计一个函数 race(),将两个列表作为参数传递给race(),将策略抽象为代码使田忌赢得比赛,函数返回每轮对阵情况:
上代码

# coding=utf-8
from typing import *def race(tian: List[int], qi: List[int]) -> List[List[int]]:# 给两个列表的数排序tian.sort()qi.sort()# 把最弱的放到最后# 这里运用了索引的知识,第一个索引是除了第一个元素不取(也就是索引为0的)其他的都取;# 第二个是取到第一个元素,然后作为一个列表里面的一个元素tian = tian[1:] + [tian[0]]# 返回每轮对阵情况return list(zip(tian, qi))if __name__ == '__main__':tianji = [2, 5, 8]qiwang = [3, 6, 9]result = race(tianji, qiwang)print(result)

要求二

现在将马分为 劣 、下、中、上、优五等,五局三胜制,抽象为列表[2,4,6,8,10] 与 [1,3,5,7,9] ,其他条件不变(齐王仍然准守规则,田忌继续不按照套路出牌),计算出田忌有多少种赢得比赛的可能
上代码

# coding=utf-8
import itertoolsdef race(qiwang, tianji):# 用迭代获取田忌所有派遣马匹的方式(['13579',5])tianji_l = list(itertools.permutations(tianji, len(tianji)))# 全部赛果result = []# 遍历所有的赛马方式for i in tianji_l:# 一轮的比赛结果result_1 = []# 一轮比拼中,双方马匹对阵情况,i为tianji(i是从tianji_l获取的)for horses in zip(i, qiwang):# 如果田忌的马值比齐王的小if horses[0] < horses[1]:# 那这一轮就是田忌输result_1.append('lose')else:# 反之,这一轮就是田忌赢result_1.append('win')# 如果这一轮赢三次及以上if result_1.count('win') >= 3:# 田忌就赢了,将赢了的追加到result里面result.append('win')return len(result)if __name__ == '__main__':tian = [1, 3, 5, 7, 9]qi = [2, 4, 6, 8, 10]all_result = race(qi, tian)print(all_result)

要求三

如果你是齐王,已知同级别中己方的马优于田忌的马,事先不知道对方派遣顺序,不过可以根据上一轮对方的派出的马匹制定本轮的选择。制定一种派遣策略,使赢得比赛的几率最大。

第三题我是真不知道咋做了(想这个脑子都长草了!这是亲爷熬夜给我想出来的,可能不是最优,需要点聪明脑子,如果有更好的想法可以私信我,欢迎讨论)

解题思路
田忌以劣胜优的策略在于输的时候输的比较多,但是赢的时候只是微弱优势赢
如 10-1 8-9 6-7 4-5 2-3 (齐王1:田鸡4)
那想让齐王尽可能获胜的办法就是拉开这个「微弱优势」

方法
齐王第一次排出2的
往后每次分两种情况,
1.田忌赢了,那我们就可以拿出上轮田忌的x-1的参加下一轮。
2.田忌输了,可以继续拿当前最小的出来。
如果x-1的没了,就出最差的那匹,如此循环

这种方法仍然会失败 如田忌按照3 5 7 9 1这样出

上代码

# coding=utf-8from itertools import permutations
from typing import *tian = [1, 3, 5, 7, 9]
qi = [2, 4, 6, 8, 10]def play() -> float:global qiwin_count = 0cnt = 0for a, b, c, d, e in permutations(tian, 5):qi = [2, 4, 6, 8, 10]  # 复原cnt += 1tian_rank = [a, b, c, d, e]qi_rank = [qi.pop(0)]  # 初始化for index, last_tian in enumerate(tian_rank[:4]):qi_rank.append(strategy(last_tian, qi_rank[index] > tian_rank[index]))  # 每次根据上一次tian的和输赢制定策略# 根据两个rank算输赢win_count += winner(qi_rank, tian_rank)# 返回概率return float(win_count) / float(cnt)def strategy(last_tian: int, is_win: bool) -> int:global qi# 如果齐王上轮赢了,继续拿最小的出来if is_win:return qi.pop(0)# 如果齐王上轮输了else:# 如果x-1的存在,就拿出来if last_tian - 1 in qi:return qi.pop(qi.index(last_tian - 1))# 否则还是拿最小的else:return qi.pop(0)def winner(qi: List[int], tian: List[int]) -> bool:cnt = 0for q, t in zip(qi, tian):cnt += q > treturn cnt >= 3if __name__ == '__main__':print(play())

这样算出来的概率是0.075,
在这里插入图片描述

感觉前面两个算法题加油扣脑壳是可以凑合写出来的,第三个是真难度(当然对于大佬来说小事一桩)

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注!
欢迎关注微信公众号:宝藏女孩的成长日记
让这个可爱的宝藏女孩在努力的道路上与你一起同行!
如有转载,请注明出处(如不注明,盗者必究)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/568650.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【测试】软件测试 QA、QC、QM的关系与区别?

质量体系之&#xff1a;软件测试 QA、QC、QM的关系与区别&#xff1f; 关键词&#xff1a;QA是未雨绸缪&#xff0c;测试是亡羊补牢 经常看到有些人把QA、QC、QM的概念搞混&#xff0c;认为他们是同一个概念的不同描述&#xff0c;由于这三者都是舶来品&#xff0c;并且翻译者在…

错误之data_insertt() takes 1 positional argument but 2 were given解决方法

1、首先检测函数与调用直接的参数是否匹配。 2、若为python环境。 函数定义如下&#xff1a; 调用如下&#xff1a; 显示如下错误&#xff1a; 解决方法&#xff1a;在函数定义时添加self。即为&#xff1a; 则问题解决。 这是一个很基本的&#xff0c;但是很严重的错误。只…

【测试】优秀软件测试工程师必备的8个能力

作为一名软件工程师&#xff0c;需要的能力并不多&#xff0c;但是要成为一名优秀的软件测试工程师&#xff0c;需要的能力就比较多了。 一、业务分析能力 1、分析整体业务流程 不了解整个公司的业务&#xff0c;根本就没办法进行测试。 2、分析被测业务数据 了解整个业务里…

python将Unix时间戳转换成时间

将时间戳转换成时间 在时间戳转换成时间中&#xff0c;首先需要将时间戳转换成localtime&#xff0c;再转换成时间的具体格式&#xff1a; 利用localtime()函数将时间戳转化成localtime的格式利用strftime()函数重新格式化时间 #coding:UTF-8 import timetimestamp 15324990…

【Python爬虫】爬虫程序的简单处理过程

一月份的时候有写过一篇文章&#xff0c;是关于如何解析网站&#xff0c;然后将图片下载下来&#xff0c;爬虫爬取美女图片存入到动态的文件夹中 今天主要总结的是爬虫的一个基本思路&#xff0c;主要有&#xff1a; 1.获取一个网页get_one_page() 我们知道一个网页可能由多个…

错误之Only one usage of each socket address (protocol/network address/port)解决办法

错误如下&#xff1a; 解决方案&#xff1a;这个错误是端口占用导致。我们应找到此应用程序对应端口号的pid然后kill掉&#xff0c;即可ok

【测试】用例设计思路-六方面

有这样一个面试题&#xff1a;在一个Web测试页面上&#xff0c;有一个输入框&#xff0c;一个计数器&#xff08;count&#xff09;按钮&#xff0c;用于计算一个文本字符串中字母a出现的个数。 请设计一系列测试用例用以测试这个Web页面。 有经验的测试人员可能会问面试官&…

Django在根据models生成数据库表时报 __init__() missing 1 required positional argument: 'on_delete'

code: 1 #encodingutf-82 from django.db import models3 # Create your models here.4 class BookInfo(models.Model): #创建书本信息类&#xff0c;继承models.Model5 booktitlemodels.CharField(max_length20)6 bookdatamodels.DateField()7 class HeroInfo(model…

【职场】高薪的条件你满足几条?

生活中时常听到人们抱怨工资少&#xff0c;但是抱怨归抱怨&#xff0c;你是否意识到自身的一些问题呢&#xff1f;高薪的条件你又满足几条一、忠诚 单位可能开除有能力的员工&#xff0c;但对一个忠心耿耿的人&#xff0c;不会有领导愿意让他走&#xff0c;他会成为单位这个铁打…

【Excel】函数DateDif查看两个日期之间的间隔

Excel中的DateDif函数是一个隐藏函数&#xff0c;在excel的公式以及帮助中是找不到的&#xff0c;必须要手工输入才可以。 此函数的格式为datedif&#xff08;"开始日期"&#xff0c;"结束日期"&#xff0c;"参数"&#xff09;&#xff0c;说明如…

跟老齐学python Django实战第一章错误解决

我使用的是 Django 2.0 版本&#xff0c;在按第一章所说的做&#xff0c;出现了三个大问题&#xff0c;并找了答案&#xff0c;现在贴上来&#xff0c;希望能给大家小小帮助&#xff1a; 1&#xff09; 写 models.py 的时候&#xff0c;执行“python manage.py makemigrations …

【技巧】搜狗输入法特殊技巧

有时候我们报销或者其他情况下需要对金额进行大写&#xff0c;这时我们可以通过搜狗输入法进行转换;阅读的时候&#xff0c;我们会遇到一些特殊而且复杂的字&#xff0c;这个时候我们也可以通过搜狗输入法知道这个字怎么读。 先下载搜狗拼音输入法&#xff1a; 数字金额进行转换…

【商业】梳理你的商业模式

商业模式一直是一个好像每个人都能说两句&#xff0c;但是总也说不清楚的话题。 商业模式是企业的立身之本&#xff0c;也是企业的本质和核心。商业模式是人们商业智慧的集中体现&#xff0c;也是商业中最令人兴奋的部分。在商业模式的背后&#xff0c;有着太多的成功与失败、欢…

Django View和URL

网页程序的逻辑&#xff1a;request进来 -> 从服务器获取数据 -> 处理数据 -> 把网页呈现出来 url 设置相当于客户端向服务器发出request请求的入口&#xff0c;并用来指明要调用的程序逻辑 views 用来处理程序逻辑&#xff0c;然后呈现到template&#xff08;一般为…

Django配置bootstrap

1、下载bootstrap文件。https://getbootstrap.com/docs/3.3/getting-started/ 下载的文件夹可以看出有css、fonts、js三个文件&#xff0c;这就是Bootstrap 3的全部 2、 自定义静态文件&#xff08;css&#xff0c;js&#xff0c;image&#xff09;位置 根目录下新建 static…

同步与异步以及线程与进程

写过爬虫的都知道&#xff0c;爬虫的性能瓶颈在于IO&#xff0c;因为爬虫是一个IO密集型业务&#xff0c;程序需要发起网络请求&#xff0c;必然就有IO阻塞&#xff0c; 通常请求一个URL耗时要几百毫秒到几秒不等&#xff0c;而我们的CPU处理速度惊人&#xff0c;两者的速度就好…

Django 新建account应用

一、应用基本配置 1、在根目录下新建account应用。python manage.py startapp account 2、在项目根目录的项目目录的setting下的INSTALLED_APPS中添加 ‘account’ 3、在项目根目录的项目目录的url.py中进行URL配置。添加 url(r^account/,include(account.urls,namespaceac…

【Python爬虫】Windows环境下wxpy不需每次登陆重新扫描

有时候我们想每天向你女朋友或者某人发送一条信息&#xff08;通过线程控制或者每天自动任务&#xff09;;此外我们可以通过更改wxpy中Bot()中参数&#xff0c;保存缓存不用每次都扫描二维码。 以下代码来源于&#xff1a;http://www.cnblogs.com/botoo/p/8622379.html from …

pycharm中windows找不到chrome解决办法

这种问题主要是因为在pycharm中关于chrome的安装路径配置不正确造成的&#xff0c;具体的解决办法为&#xff1a; 打开pycharm–》File–》setting–》Tools–》Web Browsers 然后添加chrome安装路径&#xff0c;然后就成功啦~ 转载自&#xff1a;https://blog.csdn.net/csz…

Win10系统设置任务计划执行python脚本

上一篇文章说了通过Python中的wxpy在微信每天发送一条消息到女朋友或者某个人&#xff0c;通过线程方式每天发送次消息。 这里主要说如何通过window10自带的“任务计划程序”&#xff0c;每天在指定时间发送一条消息。 1. 首先通过windows 10系统左下角输入框输入“任务计划程…