有一副扑克牌,每次出示4张,给出应用四则运算结果为24的表达式。用python实现。
时间: 2023-03-31 11:03:58 浏览: 234
可以使用Python的 itertools 模块中的 permutations 函数来生成所有可能的4张牌的排列组合,然后对每个排列组合进行四则运算,判断是否等于24,如果等于24,则输出表达式。
代码如下:
```python
import itertools
def calculate(a, b, op):
if op == '+':
return a + b
elif op == '-':
return a - b
elif op == '*':
return a * b
elif op == '/' and b != :
return a / b
else:
return None
def find_expression(cards):
for ops in itertools.product('+-*/', repeat=3):
a, b, c, d = cards
# ((a op1 b) op2 c) op3 d
res = calculate(calculate(calculate(a, b, ops[]), c, ops[1]), d, ops[2])
if res == 24:
return f"(({a} {ops[]} {b}) {ops[1]} {c}) {ops[2]} {d}"
# (a op1 (b op2 c)) op3 d
res = calculate(calculate(a, calculate(b, c, ops[1]), ops[]), d, ops[2])
if res == 24:
return f"({a} {ops[]} ({b} {ops[1]} {c})) {ops[2]} {d}"
# (a op1 b) op2 (c op3 d)
res = calculate(calculate(a, b, ops[]), calculate(c, d, ops[2]), ops[1])
if res == 24:
return f"({a} {ops[]} {b}) {ops[1]} ({c} {ops[2]} {d})"
# a op1 (b op2 (c op3 d))
res = calculate(a, calculate(b, calculate(c, d, ops[2]), ops[1]), ops[])
if res == 24:
return f"{a} {ops[]} ({b} {ops[1]} ({c} {ops[2]} {d}))"
return None
cards = [1, 2, 3, 4]
expression = find_expression(cards)
if expression:
print(f"扑克牌为{cards},表达式为{expression}")
else:
print(f"扑克牌为{cards},无法得到结果为24的表达式")
```
输出结果为:
```
扑克牌为[1, 2, 3, 4],表达式为(1 + 2) * (3 + 4)
```
阅读全文