Python实现24点游戏的方法
最编程
2024-08-03 09:42:32
...
题目:
有四张扑克牌,每张为2-A,10以上的J、Q、K、A按1算,加减任意顺序组合,能否算出24点。
例如
10、10、3、A,10+10+3+A=24,返回true
A、A、A、A,算不出24,返回false
题意分析
1、4张牌最少要有3张相加才能等于24
2、加减任意那么有:A+B+C+D、-A+B+C+D、A-B+C+D、A+B-C+D、A+B+C-D 一共5种情况
代码实现1:直接套5种情况
def point24(string):
inp = (
string.replace("A", "1")
.replace("J", "1")
.replace("Q", "1")
.replace("K", "1")
.rsplit("、")
)
k = ["%s+%s+%s+%s", "-%s+%s+%s+%s", "+%s-%s+%s+%s", "+%s+%s-%s+%s", "%s+%s+%s-%s"]
flag = False
for i in range(len(k)):
a = eval(k[i] % (inp[0], inp[1], inp[2], inp[3]))
if a == 24:
flag = True
break
return flag
if __name__ == "__main__":
# 单元测试 覆盖
fn = point24_
assert fn("10、10、4、1") is False
assert fn("10、10、3、A")
assert fn("10、10、10、10") is False
assert fn("6、10、10、10")
assert fn("10、6、10、10")
assert fn("10、10、6、10")
assert fn("10、10、10、6")
assert fn("1、10、5、10")
代码实现2:排序后再进行运算
def point24_(string):
inp = (
string.replace("A", "1")
.replace("J", "1")
.replace("Q", "1")
.replace("K", "1")
.rsplit("、")
)
inp = [int(i) for i in inp]
inp.sort()
inp.reverse()
s = 0
for i in range(len(inp)):
if s < 24:
if (s + int(inp[i])) == 24 and i == 3:
return True
else:
s += int(inp[i])
elif (s - int(inp[i])) == 24:
return True
else:
print(inp)
return False
if __name__ == "__main__":
# 单元测试 覆盖
fn = point24_
assert fn("10、10、4、1") is False
assert fn("10、10、3、A")
assert fn("10、10、10、10") is False
assert fn("6、10、10、10")
assert fn("10、6、10、10")
assert fn("10、10、6、10")
assert fn("10、10、10、6")
assert fn("1、10、5、10")
推荐阅读
-
屏幕录制功能的 Python 实现
-
在 ts 中实现类 java hashmap 的简单方法
-
[阅读笔记 - 解密超大规模集成电路设计方法] 问题 6:实现超大规模集成电路(VLSI)设计的主要方法是什么?
-
算法 - 简单查找排序的 Python 实现
-
第一:C# 嵌入 Python 脚本进行图像处理并返回 C# 的构思和实现。
-
在 Spring Boot 中正确注入具有多个实现的接口的六种方法
-
Python 上手] Python 小程序计算对象数量、游戏更新得分的 Python 小程序
-
计算机毕业设计 基于 Flask + vue 的博客系统设计与实现 Python 毕业设计 Python 毕业设计题目 Flask 框架 Vue [含源代码 + 安装与调试]。
-
计算机毕业设计 基于深度学习的短视频内容理解与推荐系统的设计与实现 Python+Django+Vue 前后端分离,附源代码 讲座 文档
-
[JavaEE 入门] 深入了解多线程阻塞队列的工作原理、生产者-消费者模型的实现方法以及服务器崩溃的原因!!!!!