筱枭666 2022-09-21 15:32 采纳率: 71.4%
浏览 21
已结题

python 编写24点程序问题

即使输入对的公式也显示错误

from typing import List

# import keyboard
import random
import re
import itertools
import sys
import time
# import keyboard as keyboard

arr1 = []
# arr = [str(random.randint(1, 13)), str(random.randint(1, 13)), str(random.randint(1, 13)),
#        str(random.randint(1, 13)), ]
arr = [1,2,3,4]
print(f'四个随机数:{arr}')
expr = input("请输入计算式:")
print(expr)
print(eval(expr))
if sorted(arr) == sorted(re.split('[\+\-\*\/\(\)]', expr)):
    if eval(expr) == 24:
        print('恭喜你答对了哟!')
    else:
        print('对不起,你答错了!')
        for i in itertools.permutations(arr):
            for j in itertools.product(['+', '-', '*', '/'], repeat=3):
                expr = [f'(({i[0]}{j[0]}{i[1]}){j[1]}{i[2]}){j[2]}{i[3]}',  # 123
                        f'({i[0]}{j[0]}{i[1]}){j[1]}({i[2]}{j[2]}{i[3]})',  # 132
                        f'({i[0]}{j[0]}({i[1]}{j[1]}{i[2]})){j[2]}{i[3]}',  # 213
                        f'{i[0]}{j[0]}(({i[1]}{j[1]}{i[2]}){j[2]}{i[3]})',  # 231
                        f'{i[0]}{j[0]}({i[1]}{j[1]}({i[2]}{j[2]}{i[3]}))',  # 321
                        ]
                for k in expr:
                    try:
                        if eval(k) == 24:
                            line = k
                            arr1.append(line)
                    except:
                        pass
    if len(arr1) != 0:
        print("正解为:" + arr1[0])
    else:
        print("此题无解")

else:
    print ('你作弊了!')
    for i in itertools.permutations(arr):
        for j in itertools.product(['+', '-', '*', '/'], repeat=3):
            expr = [f'(({i[0]}{j[0]}{i[1]}){j[1]}{i[2]}){j[2]}{i[3]}',  # 123
                    f'({i[0]}{j[0]}{i[1]}){j[1]}({i[2]}{j[2]}{i[3]})',  # 132
                    f'({i[0]}{j[0]}({i[1]}{j[1]}{i[2]})){j[2]}{i[3]}',  # 213
                    f'{i[0]}{j[0]}(({i[1]}{j[1]}{i[2]}){j[2]}{i[3]})',  # 231
                    f'{i[0]}{j[0]}({i[1]}{j[1]}({i[2]}{j[2]}{i[3]}))',  # 321
                    ]
            for k in expr:
                try:
                    if eval(k) == 24:
                        line = k
                        arr1.append(line)
                except:
                    pass

if len(arr1) != 0:
    print("正解为:"+ arr1[0])
else:
    print("此题无解")
time.sleep(0.1)

img

img

  • 写回答

3条回答 默认 最新

  • honestman_ 2022-09-21 15:51
    关注
    
    from typing import List
    
    # import keyboard
    import random
    import re
    import itertools
    import sys
    import time
    
    # import keyboard as keyboard
    
    arr1 = []
    # arr = [str(random.randint(1, 13)), str(random.randint(1, 13)), str(random.randint(1, 13)),
    #        str(random.randint(1, 13)), ]
    arr = [1, 2, 3, 4]
    print(f'四个随机数:{arr}')
    expr = input("请输入计算式:")
    print(expr)
    print(eval(expr))
    if sorted(arr) == sorted([int(temp) for temp in re.split('[\+\-\*\/\(\)]', expr) if temp]):
        if eval(expr) == 24:
            print('恭喜你答对了哟!')
        else:
            print('对不起,你答错了!')
            for i in itertools.permutations(arr):
                for j in itertools.product(['+', '-', '*', '/'], repeat=3):
                    expr = [f'(({i[0]}{j[0]}{i[1]}){j[1]}{i[2]}){j[2]}{i[3]}',  # 123
                            f'({i[0]}{j[0]}{i[1]}){j[1]}({i[2]}{j[2]}{i[3]})',  # 132
                            f'({i[0]}{j[0]}({i[1]}{j[1]}{i[2]})){j[2]}{i[3]}',  # 213
                            f'{i[0]}{j[0]}(({i[1]}{j[1]}{i[2]}){j[2]}{i[3]})',  # 231
                            f'{i[0]}{j[0]}({i[1]}{j[1]}({i[2]}{j[2]}{i[3]}))',  # 321
                            ]
                    for k in expr:
                        try:
                            if eval(k) == 24:
                                line = k
                                arr1.append(line)
                        except:
                            pass
        if len(arr1) != 0:
            print("正解为:" + arr1[0])
        else:
            print("此题无解")
    
    else:
        print('你作弊了!')
        for i in itertools.permutations(arr):
            for j in itertools.product(['+', '-', '*', '/'], repeat=3):
                expr = [f'(({i[0]}{j[0]}{i[1]}){j[1]}{i[2]}){j[2]}{i[3]}',  # 123
                        f'({i[0]}{j[0]}{i[1]}){j[1]}({i[2]}{j[2]}{i[3]})',  # 132
                        f'({i[0]}{j[0]}({i[1]}{j[1]}{i[2]})){j[2]}{i[3]}',  # 213
                        f'{i[0]}{j[0]}(({i[1]}{j[1]}{i[2]}){j[2]}{i[3]})',  # 231
                        f'{i[0]}{j[0]}({i[1]}{j[1]}({i[2]}{j[2]}{i[3]}))',  # 321
                        ]
                for k in expr:
                    try:
                        if eval(k) == 24:
                            line = k
                            arr1.append(line)
                    except:
                        pass
    
    if len(arr1) != 0:
        print("正解为:" + arr1[0])
    else:
        print("此题无解")
    time.sleep(0.1)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月29日
  • 已采纳回答 9月21日
  • 创建了问题 9月21日

悬赏问题

  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法