猫史档案馆


用python解24点(教程)

用户:一只敲代码的华南虎一只敲代码的华南虎查看:1 回复:1 评论:1 创建时间:2022-06-27T21:45:04


如果要转发请标注:原作者华南虎

# 原作者华南虎
print('原作者华南虎')
h = [] #解法列表
fh = ['+', '-', '*', '/'] #运算符号
def ys(a, f, b): #计算的函数
    if f == '+':
        return a+b
    elif f == '-':
        return a-b
    elif f == '*':
        return a*b
    elif f == '/':
        if b == 0:
            return 0
        else:
            return a/b
a = input('请你输入24点的4个数字(用 英文“,” 隔开):').split(',') #获取24点的4个数
if len(a) != 4: #判断是否有4个数
    print('你输入的有问题')
    exit() #结束程序
for i in a: #遍历4个数获取i
    b = a[:]
    b.remove(i) #获取除了i的3个数
    for j in b: #遍历3个数获取j
        #到这里我们就获得了i和j两个数字
        for f in fh: #这个循环是把i和j加减乘除全部算一遍
            c = b[:]
            c1 = ys(float(i), f, float(j))
            c.append(c1)
            c.remove(j)
            #现在我就把4个数变成了3个数
            for i1 in c: #重复上面的操作
                d = c[:]
                d.remove(i1)
                for j1 in d:
                    for f1 in fh:
                        e = d[:]
                        e1 = ys(float(i1), f1, float(j1))
                        e.append(e1)
                        e.remove(j1)
                        #现在剩2个数
                        if len(e) == 2:
                            for k in [1, 2]: #两种运算方式,1是正着,2是倒着
                                for f2 in fh:
                                    if k == 1:
                                        #正着运算两个数
                                        g = ys(float(e[0]), f2, float(e[1]))
                                        g1 = str(i)+f+str(j)+'='+str(c1), '→', str(i1)+f1+str(
                                            j1)+'='+str(e1), '→', str(e[0])+f2+str(e[1])+'='+str(g)
                                    elif k == 2:
                                        #倒着运算两个数
                                        g = ys(float(e[1]), f2, float(e[0]))
                                        g1 = str(i)+f+str(j)+'='+str(c1), '→', str(i1)+f1+str(
                                            j1)+'='+str(e1), '→', str(e[1])+f2+str(e[0])+'='+str(g)
                                    if float(g) == 23.99999999999999:
                                        #因为电脑是把1/3算成1÷3=0.33333333333333所以23.99999999999999就是24
                                        g = 24
                                    if float(g) == 24.0 and g1 not in h: #判断是否等于24
                                        h.append(g1) #添加到解法列表
                                        # 打印出来
                                        if k == 1:
                                            print(str(i)+f+str(j)+'='+str(c1), '→', str(i1)+f1+str(
                                                j1)+'='+str(e1), '→', str(e[0])+f2+str(e[1])+'='+str(g))
                                        elif k == 2:
                                            print(str(i)+f+str(j)+'='+str(c1), '→', str(i1)+f1+str(
                                                j1)+'='+str(e1), '→', str(e[1])+f2+str(e[0])+'='+str(g))
if len(h) == 0: #如果一个解法都没有
    print('这道题无解')

制作不易,支持一下吧


回复

上一页1 页 / 共 1下一页
堂主の犬堂主の犬

我说你die码岛人没了,原来来学Python了()()()

点赞1


评论