本周的题目取自著名的历史典故:田忌赛马 背景资料如下
现在我们将齐王的马抽象为一个列表 def race(qiwang,tianji):
'''
>>> race([3,6,9],[2,5,8])
[(9,2),(6,8),(3,5)]
''' 附加题: 1、如果你是某公子手下的谋士,已知同级别中己方的马优于田忌的马,事先不知道对方派遣顺序,不过可以根据上一轮对方的派出的马匹制定本轮的选择。为公子制定一种派遣策略,使赢得比赛的几率最大。 import random
g = [3,6,9]
t = [2,5,8] 2、现在将马分为 优、上、中、下、劣 五等,五局三胜制,抽象为列表 期待各位同学对于本周题目的代码提交。 提交代码可以使用 paste. 或 等代码分享网站,只需将代码复制上去保存,即可获得一个分享地址,非常方便。 往期问题可通过公众号菜单栏“课外辅导”栏目中进入查看。 【乒乓数】 解答 乒乓序列从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 判断下一次运算是加 1 还是减 1 ,很多同学都采取了相同的计算原理,写出了比较简洁的代码,参考: @皮特尔:https:///5vAV3l 另外 @徐大龙 同学使用了 generator 的方式计算,也值得参考: |
|