【每周一坑】田忌赛马

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


本周的题目取自著名的历史典故:田忌赛马


背景资料如下


田忌经常与齐国众公子赛马,设重金赌注。田忌的上宾孙膑发现他们的马脚力都差不多,马分为上、中、下三等,于是对田忌说:“您只管下大赌注,我能让您取胜。”田忌相信并答应了他,与齐王和各位公子用千金来赌注。比赛即将开始,孙膑说:“现在用您的下等马对付他们的上等马,用您的上等马对付他们的中等马,用您的中等马对付他们的下等马。”已经比了三场比赛,田忌一场败而两场胜,最终赢得齐王的千金赌注。


现在我们将齐王的马抽象为一个列表 [3,6,9],田忌的马抽象为另一个列表 [2,5,8],分别代表各自的下、中、上等马。设计一个函数 race(),将两个列表作为参数传递给 race(),将背景资料的策略抽象为代码使田忌赢得比赛,函数返回每轮对阵情况,结果示例:


def race(qiwang,tianji):
    '''
    >>> race([3,6,9],[2,5,8])
    [(9,2),(6,8),(3,5)]
    '''


附加题:


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


提示:田忌的策略可用 random 确定


import random
g = [3,6,9]
t = [2,5,8]
# 田忌的策略
def tianji_s():
    return random.shuffle(t)
# 公子的策略
def gongzi_s():
    '''
    your code here 
    '''
# 至少 1000 次测试
for i in range(1000):
    '''
    your code here
    '''


2、现在将马分为 优、上、中、下、劣 五等,五局三胜制,抽象为列表[2,4,6,8,10][1,3,5,7,9] ,其他条件不变,计算出田忌有多少种赢得比赛的可能。


期待各位同学对于本周题目的代码提交。


提交代码可以使用 paste.ubuntu.com codeshare.io 等代码分享网站,只需将代码复制上去保存,即可获得一个分享地址,非常方便。


往期问题可通过公众号菜单栏“课外辅导”栏目中进入查看。




【乒乓数】 解答


乒乓序列从1开始计数,并且始终向上或向下计数。在元素k处,如果k是7的倍数或包含数字7,方向将切换,定义一个函数 pingpong ,传入一个正整数参数 n ,返回第 n 个乒乓数。


def pingpong(n,k=7):
    '''传入一个正整数参数 n 和特殊数 k,返回第 n 个乒乓数
    n - 第 n 个乒乓数
    k - 给定的特殊数,默认为 7
    '''
    # count 计数,随着循环增加
    # num 为 第 count 个数时的乒乓数
    # status 为增或减状态,在 正负 1 之间切换,默认为 1
    count,num,status = 1,1,1
    # 断言 n,k 为正整数,否则抛出错误
    assert isinstance(n,int) and n > 0 ,'input error'
    assert isinstance(k,int) and k > 0 ,'input error'
    while count < n:
        # 判断切换条件
        if str(k) in str(count) or count % k == 0:
            status *= -1
        # 累加或累减
        num += status
        count += 1
    return num


这道题的关键在于预设一个递增或递减的状态,结合 if 判断下一次运算是加 1 还是减 1 ,很多同学都采取了相同的计算原理,写出了比较简洁的代码,参考:


@皮特尔https://codeshare.io/5vAV3l

@bolinhttp://paste.ubuntu.com/24332853/

@LDJhttps://github.com/NyanCat12/CrossinWeekly/blob/master/20170407/pingpong.py

@Nickedhttps://github.com/nicktimebreak/CrossinWeekly/blob/master/pingpong.py

另外 @徐大龙 同学使用了 generator 的方式计算,也值得参考:

https://github.com/PeytonXu/learn-python/blob/master/cases/pingpong/pingpong.py


近期文章推荐阅读:

喏,你们要的 PyCharm 快速上手指南

给伸手党的福利:Python 新手引导

只学2个月编程能写出什么代码?他们表示:You can you code!

如何用100行Python代码做出魔性声控游戏“八分音符酱”

数据分析:当赵雷唱民谣时他唱些什么?

一行代码扫出“敬业福”

我扒了杜蕾斯的微博

Python 爬虫爬取美剧网站

今天,你抢到票了吗?

爆款游戏《贪吃蛇大作战》的 Python 实现

相关文章
|
机器学习/深度学习 算法 前端开发
公交站间的距离
公交站间的距离
200 0
|
内存技术
STM32内存管理
* 根据需要分配內存和回收内存 通常在一块较大且连续的内存空间上进行分配和回收 * 动态内存管理解决的问题 内存资源稀缺,通过内存复用增加任务的并发性 * 动态内存管理的本质 时间换空间,通过动态分配和回收“扩大”物理内存
446 0
STM32内存管理
|
SQL 关系型数据库 分布式数据库
从Citus深度解密如何基于PostgreSQL做分布式数据库
前言分布式数据库能够解决海量数据存储、超高并发吞吐、大表瓶颈以及复杂计算效率等单机数据库瓶颈难题,当业务体量即将突破单机数据库承载极限和单表过大导致性能、维护问题时,分布式数据库是解决上述问题的高性价比方案。数据库作为分布式改造的最大难点,就是&quot;和使用单机数据库一样使用分布式数据库&quot;,这也一直是广大...
5682 0
从Citus深度解密如何基于PostgreSQL做分布式数据库
|
定位技术 C# 开发者
阿里云 Aliplayer高级功能介绍(二):缩略图
基本介绍 Aliplayer提供了缩略图的功能,让用户在拖动进度条之前知道视频的内容,用户能够得到很好的播放体验,缩略图是显示在Controlbar的上面,并且包含当前的时间,阿里云的媒体处理服务提供接口可以生成缩略图的功能, 先看一下基本的效果: 缩略图的格式 WebVTT介绍 缩略图采用...
4938 0
|
11天前
|
人工智能 自然语言处理 Shell
🦞 如何在 OpenClaw (Clawdbot/Moltbot) 配置阿里云百炼 API
本教程指导用户在开源AI助手Clawdbot中集成阿里云百炼API,涵盖安装Clawdbot、获取百炼API Key、配置环境变量与模型参数、验证调用等完整流程,支持Qwen3-max thinking (Qwen3-Max-2026-01-23)/Qwen - Plus等主流模型,助力本地化智能自动化。
🦞 如何在 OpenClaw (Clawdbot/Moltbot) 配置阿里云百炼 API
|
6天前
|
人工智能 安全 机器人
OpenClaw(原 Clawdbot)钉钉对接保姆级教程 手把手教你打造自己的 AI 助手
OpenClaw(原Clawdbot)是一款开源本地AI助手,支持钉钉、飞书等多平台接入。本教程手把手指导Linux下部署与钉钉机器人对接,涵盖环境配置、模型选择(如Qwen)、权限设置及调试,助你快速打造私有、安全、高权限的专属AI助理。(239字)
4085 11
OpenClaw(原 Clawdbot)钉钉对接保姆级教程 手把手教你打造自己的 AI 助手
|
7天前
|
人工智能 机器人 Linux
保姆级 OpenClaw (原 Clawdbot)飞书对接教程 手把手教你搭建 AI 助手
OpenClaw(原Clawdbot)是一款开源本地AI智能体,支持飞书等多平台对接。本教程手把手教你Linux下部署,实现数据私有、系统控制、网页浏览与代码编写,全程保姆级操作,240字内搞定专属AI助手搭建!
4604 14
保姆级 OpenClaw (原 Clawdbot)飞书对接教程 手把手教你搭建 AI 助手
|
9天前
|
人工智能 JavaScript 应用服务中间件
零门槛部署本地AI助手:Windows系统Moltbot(Clawdbot)保姆级教程
Moltbot(原Clawdbot)是一款功能全面的智能体AI助手,不仅能通过聊天互动响应需求,还具备“动手”和“跑腿”能力——“手”可读写本地文件、执行代码、操控命令行,“脚”能联网搜索、访问网页并分析内容,“大脑”则可接入Qwen、OpenAI等云端API,或利用本地GPU运行模型。本教程专为Windows系统用户打造,从环境搭建到问题排查,详细拆解全流程,即使无技术基础也能顺利部署本地AI助理。
7135 16
|
5天前
|
人工智能 机器人 Linux
OpenClaw(Clawdbot、Moltbot)汉化版部署教程指南(零门槛)
OpenClaw作为2026年GitHub上增长最快的开源项目之一,一周内Stars从7800飙升至12万+,其核心优势在于打破传统聊天机器人的局限,能真正执行读写文件、运行脚本、浏览器自动化等实操任务。但原版全英文界面对中文用户存在上手门槛,汉化版通过覆盖命令行(CLI)与网页控制台(Dashboard)核心模块,解决了语言障碍,同时保持与官方版本的实时同步,确保新功能最快1小时内可用。本文将详细拆解汉化版OpenClaw的搭建流程,涵盖本地安装、Docker部署、服务器远程访问等场景,同时提供环境适配、问题排查与国内应用集成方案,助力中文用户高效搭建专属AI助手。
2826 7