一读标题笑死自己哈哈哈,最近猪哥(玩得敲好的彭友)找我帮忙解决他不会作业哈哈哈,他们公司自己出的笔试题哈哈哈,希望别被他们出题人看见哈哈哈,回想猪哥说的一句话,万一这就是以后你遇到的试题呢哈哈哈。突然发现自己已经小半年没玩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宝藏女孩 欢迎您的关注!
欢迎关注微信公众号:宝藏女孩的成长日记
让这个可爱的宝藏女孩在努力的道路上与你一起同行!
如有转载,请注明出处(如不注明,盗者必究)

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

  1. 看我如何用python来玩百万英雄

    最近答题游戏可谓火爆至极,一时间刷爆了朋友圈,在感叹自己已经跟不上互联网思维,为各位金主大大疯狂"撒币"行为所震惊.振奋的同时,也在想怎么用时下热门的人工智能技术来辅助我们的答题呢 ...

  2. Python print 玩转点阵字

    Python print 玩转点阵字 效果图 点阵字 HZK16字库 实现单字 单字代码 命令行中效果 pycharm编辑器中效果 实现多字 多字代码 多字命令行效果 pycharm编辑器多字效果 最 ...

  3. 人生苦短,似乎python也解决不了人到中年的问题

    人生苦短,似乎python也解决不了人到中年的问题 感觉人一过了30岁,这时间就像原来的涓涓细流,变成洪水猛兽,越来越快,对于一个80后来说,仿佛社会上所有的一切,都在渐渐遗忘你,从不停的得到,到不断 ...

  4. 一篇长文带你在python里玩转Json数据

    Json简介 Json(JavaScript Object Notation) 很多网站都会用到Json格式来进行数据的传输和交换. 这因为Json是一种轻量级的数据交换格式,具有数据格式简单,读写方 ...

  5. go加载python_人生苦短我用python(02)动态加载模块-Go语言中文社区

    文章内容为原创,欢迎转载请注明出处 作者: EflyPro->晦明禅师 文章来源:公众号"睿江云计算" 继第一期[人生苦短我用Python系列专栏]发布后,深受广大睿普迷的一 ...

  6. “Python来玩微信跳一跳”教程(问题总结)

    原文:<"Python来玩微信跳一跳"教程> 在上一篇文章中,收到了大家大量的问题反馈,因为问题比较多,并且有很多重复的问题,所以并没有一一回复,这里表示一下歉意,并整 ...

  7. nginx配合python_人生苦短我用python[0x02] nginx与python结合

    原标题:人生苦短我用python[0x02] nginx与python结合 **文章内容为原创,欢迎转载请注明出处** 背景 nginx是一款高性能的http服务器,python是一门无论做系统开发还 ...

  8. python边玩边学_边听边学数据科学

    python边玩边学 Podcasts are a fun way to learn new stuff about the topics you like. Podcast hosts have t ...

  9. **print('人生苦短 我爱Python')**

    print('人生苦短 我爱Python') 一.变量 **""" 1.代码自上而下执行 2_运算符和表达式.一行一句,不要把多个语句写到一行上,可读性不好 3中文只能出 ...

最新文章

  1. python拷贝linux文件到windows_windows python文件拷贝到linux上执行问题
  2. 点击出现黑色背景的解决:-webkit-tap-highlight-color:rgba(0,0,0,0)
  3. ssl2295-暗黑破坏神【dp练习】
  4. cepl进程 Linux,Ubuntu下NS2-2.33安装过程
  5. Miller_Rabin算法
  6. BZOJ1299 [LLH邀请赛]巧克力棒
  7. DIV Scroll属性
  8. 服务器双cpu性能强不,双CPU的电脑用起来,性能和功耗都是原来的两倍?
  9. 蓝桥杯 ADV-118 算法提高 3-2字符串输入输出函数
  10. Think in Java ---Chapter 8 多态 [基础的混凝土大厦]
  11. 新手如何发布第一个Python项目开源包?这里有一份详细指南
  12. python调用so文件
  13. websockets_WebSockets简介
  14. 用Hbuilder实现:一行HTML代码+tab快捷键,快速创建HTML结构
  15. 最新微软产品MAK激活密钥
  16. 君莫笑:小白的堆(bai_dui)
  17. 泰康人寿java开发待遇怎么样_宋晓伟-泰康人寿-5年Java开发高级工程师-猿急送
  18. 谷歌浏览器复制禁止复制文字网页上的文字
  19. 浪潮配置ipim_NF5280M3 – IPMI设置
  20. Codevs 1038 一元三次方程求解 NOIP 2001(导数 牛顿迭代)

热门文章

  1. linux shell 执行目录,bash shell脚本执行的几种方法
  2. 系统辨识理论及应用_控制理论学习书单推荐(值得一读)
  3. bootstrap 输入错误提示_win7系统提示explorer.exe应用程序错误怎么办
  4. java callable接口_Java多线程之Callable接口的实现有返回值的线程
  5. jsch mysql_java JDBC 连接MySql
  6. mc用云服务器搭建_最全的云服务器架设我的世界私服教程,不看后悔哦!
  7. 基于javaSpringboot+mybatis+layui的装修验收管理系统设计和实现
  8. 熟悉c语言运行环境实验原理,c语言实验报告1
  9. c语言文件读写_学生信息管理系统(C语言\单向链表\文件读写)
  10. 360手机浏览器_网信办:UC、QQ、360、搜狗等8款手机浏览器被纳入首批整治范围...