点击上方“
何俊林
”,马上关注,每天早上
8:50
准时推送
真爱,请置顶或星标
周末闲来无事,看到隔壁家的老王在和隔壁家的媳妇玩24点,就进屋看了看。
发现老王是真不行啊,那不行,这也不行。
就连个24点都玩不过他媳妇,给他媳妇气的,啥都不能满足,这不能,那也不能。
我坐下来和他媳妇玩了两把,那都是无出其右,把把赢!
我要走的时候,他媳妇还挽留我多玩几把,有意思。 为了能让老王在他媳妇面前抬起头来,我决定帮他一把……就用python写了个算24点的玩意,老王对我感激涕零。
什么是24点
我们先来约定下老王和他媳妇玩的24点规则:给定4个任意数字(0-9),然后通过`+,-,*,/`,将这4个数字计算出24。 小时候玩的都是这个规则,长大了才有根号,才有各种莫名其妙的高级算法,不好玩了,因为我不会。 可能有人会觉得很简单,但是真的简单吗?
结果显示
`itertools.product`,返回传入所有序列中笛卡尔积的元祖,repeat参数表示传入序列的重复次数。 返回的是一个生成器。 那么获取所有的操作运算符就可以通过这个函数来获取了
3、现在我们已经拿到了所有可能组合的操作符和数字了,接下来就需要对他们进行拼接了。 然后执行运算。
这一步操作我们会用到 `itertools.zip_longest()` 和 `itertools.chain.form_iterable()` 函数。
结果显示
zip_longest() 其实和 python 内置的 zip() 函数用法差不多,只是 zip_longest 是以最长的一个序列为基准,缺失值就使用 `fillvalue` 参数的值进行填充
2、math.isclose(): 为什么这里需要使用 math.isclose() ,而不是直接使用`==`运算符呢? 这是因为最后算出来的表达式可能有精度问题,例如23.9...或者24.0...等数字,所以我们就需要使用math.isclose()函数来帮助我们判断两个数字是否相等了,这个函数就有一个精度范围。 这样出现上面情况的时候,我们也能匹配得到条件了。 我们运行代码,然后测试代码是否能达到我们的需求。 首先我们测试1,2,3,4四个数字, 程序出来了结果 `1*2*3*4` 24 看来好像我们写的代码是正确的
就连个24点都玩不过他媳妇,给他媳妇气的,啥都不能满足,这不能,那也不能。
我坐下来和他媳妇玩了两把,那都是无出其右,把把赢!
我要走的时候,他媳妇还挽留我多玩几把,有意思。 为了能让老王在他媳妇面前抬起头来,我决定帮他一把……就用python写了个算24点的玩意,老王对我感激涕零。
什么是24点
我们先来约定下老王和他媳妇玩的24点规则:给定4个任意数字(0-9),然后通过`+,-,*,/`,将这4个数字计算出24。 小时候玩的都是这个规则,长大了才有根号,才有各种莫名其妙的高级算法,不好玩了,因为我不会。 可能有人会觉得很简单,但是真的简单吗?
结果显示
`itertools.product`,返回传入所有序列中笛卡尔积的元祖,repeat参数表示传入序列的重复次数。 返回的是一个生成器。 那么获取所有的操作运算符就可以通过这个函数来获取了
3、现在我们已经拿到了所有可能组合的操作符和数字了,接下来就需要对他们进行拼接了。 然后执行运算。
这一步操作我们会用到 `itertools.zip_longest()` 和 `itertools.chain.form_iterable()` 函数。
结果显示
zip_longest() 其实和 python 内置的 zip() 函数用法差不多,只是 zip_longest 是以最长的一个序列为基准,缺失值就使用 `fillvalue` 参数的值进行填充
2、math.isclose(): 为什么这里需要使用 math.isclose() ,而不是直接使用`==`运算符呢? 这是因为最后算出来的表达式可能有精度问题,例如23.9...或者24.0...等数字,所以我们就需要使用math.isclose()函数来帮助我们判断两个数字是否相等了,这个函数就有一个精度范围。 这样出现上面情况的时候,我们也能匹配得到条件了。 我们运行代码,然后测试代码是否能达到我们的需求。 首先我们测试1,2,3,4四个数字, 程序出来了结果 `1*2*3*4` 24 看来好像我们写的代码是正确的