【Dison夏令营 Day 17】使用 Python Turtle 的 24 游戏求解器

24 点 是一个数学谜题,用基本算术运算符(+、-、×、÷)将 4 个数字运算成 24。例如,给定 4 个数字 1,5,5,5,我们可以得到表达式 (5-(1÷5))×5,等于 24。

在这里插入图片描述

我们可以用 Python 程序暴力解决这个问题。最多有 24×5×4×4×4 = 7,680 个不同的表达式可以用 4 个数字组成。这对我们来说似乎很难,但对计算机程序来说应该很容易解决。下面是这个项目的源代码:

import turtle
screen = turtle.Screen()
screen.setup(500,500)
screen.title("24 Game Solver - PythonTurtle.Academy")
turtle.hideturtle()
turtle.speed(0)
turtle.up()def permutation(a):if len(a) == 1: return [[a[0]]]res = permutation(a[1:])r = []for x in res:# need to insert n into x: into all possible positionfor i in range(len(x)+1):y = x.copy()y.insert(i,a[0])if y not in r:r.append(y)return rop = ['+', '−', '×', '÷']
def evaluate(a):v = []for x in a:if type(x) is int:v.append(x)else:num2 = v.pop()num1 = v.pop()if x=='+': v.append(num1+num2)elif x=='−': v.append(num1-num2)elif x=='×': v.append(num1*num2)else:if num2 != 0: v.append(num1/num2)else: return 0return v[0]class tree_node:def __init__(self,value,left,right):self.value = valueself.left = leftself.right = rightdef inorder(root):if type(root.value) is int: return str(root.value)if type(root.left.value) is not int: left = '('+inorder(root.left)+')'else: left = inorder(root.left)if type(root.right.value) is not int: right = '('+inorder(root.right)+')'else: right = inorder(root.right)    return left + root.value + rightdef convert_to_infix(a):# convert to infix# convert to tree firstv = list()for x in a:if type(x) is int:v.append(tree_node(x,None,None))else:t2 = v.pop()t1 = v.pop()v.append(tree_node(x,t1,t2))return inorder(v[0])def twentyfour(a):# postfix# try n,n,n,n, p,p,pfor i in range(4):for j in range(4):for k in range(4):b = a.copy()b.append(op[i])b.append(op[j])b.append(op[k])v = evaluate(b)if v==24.0:return(convert_to_infix(b))# try n,n,n,p,p,n,pfor i in range(4):for j in range(4):for k in range(4):b = a[:3]b.append(op[i])b.append(op[j])b.append(a[3])b.append(op[k])v = evaluate(b)if v==24.0:return(convert_to_infix(b))# try n,n,n,p,n,p,pfor i in range(4):for j in range(4):for k in range(4):b = a[:3]b.append(op[i])b.append(a[3])b.append(op[j])b.append(op[k])v = evaluate(b)if v==24.0:return(convert_to_infix(b))# try n,n,p,n,p,n,pfor i in range(4):for j in range(4):for k in range(4):b = a[:2]b.append(op[i])b.append(a[2])b.append(op[j])b.append(a[3])b.append(op[k])v = evaluate(b)if v==24.0:return(convert_to_infix(b))# try n,n,p,n,n,p,pfor i in range(4):for j in range(4):for k in range(4):b = a[:2]b.append(op[i])b.append(a[2])b.append(a[3])b.append(op[j])b.append(op[k])v = evaluate(b)if v==24.0:return(convert_to_infix(b))return ''            while True:fournumbers = []while len(fournumbers) != 4:numbers = screen.textinput("24 Game Solver", "Enter four numbers separated by spaces: ")fournumbers = list(map(int,numbers.split()))p = permutation(fournumbers)foundsolution = Falseturtle.clear()for a in p:r = twentyfour(a)if len(r)>0:turtle.goto(0,0)turtle.color('royal blue')turtle.write(r,font=('Courier', 45, 'bold'), align='center')foundsolution = Truebreakif not foundsolution:turtle.color('red')turtle.write("No solution",font=('Courier', 45, 'bold'), align='center')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/45663.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue的生命周期函数有哪些?详细说明

Vue.js 的生命周期函数包括以下几个阶段,每个阶段都有相应的钩子函数可以用来在特定时机执行自定义的逻辑。这些生命周期钩子函数使得我们可以在组件的不同阶段进行操作,从而管理组件的状态和行为。 1. beforeCreate: - 描述:…

【游戏客户端】大话slg玩法架构(三)建筑控件

【游戏客户端】大话slg玩法架构(三)建筑控件 大家好,我是Lampard家杰~~ 今天我们继续给大家分享SLG玩法的实现架构,关于SLG玩法的介绍可以参考这篇上一篇文章:【游戏客户端】制作率土之滨Like玩法 PS:和之前…

谈谈软件交互设计

谈谈软件交互设计 交互设计的由来 交互设计(Interaction Design)这一概念,最初是由IDEO创始人之一Bill.Moggridge(莫格里奇)1984年在一次会议上提出。他设计了世界上第一台笔记本电脑Compass,并写作出版了在交互设计领域影响深远的《Designing Interactions》一书,被称…

使用 Akshare 下载国内的期货(主力连续)、股票和指数的历史行情数据

本文介绍如何使用 akshare 下载国内期货、股票和指数的历史行情数据。 Akshare 是一个丰富的金融数据查询的 Python 库,提供了大量的金融数据接口。本文将详细介绍如何使用 Akshare 下载期货、股票和指数数据,并提供完整的代码示例,以求大家…

当需要在不同操作系统和编程语言环境中共享和处理 XML 数据时,可能会遇到哪些兼容性问题,以及如何解决?

在不同操作系统和编程语言环境中共享和处理 XML 数据时,可能会遇到以下兼容性问题: 编码问题:不同操作系统和编程语言对于 XML 文件的默认编码可能不同。如果使用不同的编码方式,可能会导致乱码或无法正确解析 XML 数据。解决方法…

Java算法题-找到数组所有左边数都比它小, 右边数都比它大的数

实例1: 输入:[1,2,4,3,7,8,9] 输出:[1,2,7,8,9] 条件一:左边的数都比他小 条件二:右边的数都不比他大 思路:遍历两次,一次从左往右,找到满足条件一的数,一次从后往前找到满足条件二的数,两次遍…

微服务架构实战:案例分析与解决方案探讨

摘要 微服务架构以其模块化和灵活性在软件开发领域迅速崛起。然而,这种架构模式并非没有挑战。本文通过深入分析几个实际的微服务项目案例,探讨了在设计、开发和部署过程中遇到的问题,以及相应的解决方案。同时,文章还展示了微服…

请不要把「团队」二字挂在嘴边上

请不要把「团队」二字挂在嘴边上 什么是团队? 团队(Team)是由 基层和 管理层人员组成的一个 共同体,它合理利用每一个 成员的知识和技能协同工作,解决问题,达到 共同的目标。 团队的构成要素总结为5P,分别为目标、人、 定位、权限、计划。 群体不是团队 “团队”和“…

智能合约和分布式应用管理系统:技术革新与未来展望

引言 随着区块链技术的不断发展,智能合约和分布式应用(DApps)逐渐成为数字经济中的重要组成部分。智能合约是一种自执行的协议,能够在预设条件满足时自动执行代码,而无需人工干预或中介机构。这种自动化和信任机制极大…

使用Apache服务部署静态网站

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 目录 一、网站服务程序 ​二、配置服务文件参数 ​三、SELinux安全子系统 四、个人用户主页功能 ​五、虚拟网站主机功能 六、Apache的访问控制…

DOM 实例:深入理解文档对象模型

DOM 实例:深入理解文档对象模型 引言 文档对象模型(DOM,Document Object Model)是处理可扩展标记语言(XML)的标准编程接口。在网页开发中,DOM 被广泛应用于 HTML 和 XML 文档的交互。本文将深入探讨 DOM 的概念、实例及其在网页编程中的应用。 DOM 基础概念 什么是 …

nx上darknet的使用-目标检测-在python中的使用

1 内置的代码 在darknet中已经内置了两个py文件 darknet_video.py与darknet_images.py用法类似,都是改一改给的参数就行了,我们说一下几个关键的参数 input 要预测哪张图像weights 要使用哪个权重config_file 要使用哪个cfg文件data_file 要使用哪个da…

基于AT89C51单片机篮球计时计分器的设计(含文档、源码与proteus仿真,以及系统详细介绍)

本篇文章论述的是基于AT89C51单片机篮球计时计分器的设计的详情介绍,如果对您有帮助的话,还请关注一下哦,如果有资源方面的需要可以联系我。 目录 绪论 原理图 ​编辑 仿真图 系统总体设计图 代码实现 系统论文 资源下载 绪论 本次…

postgresql创建只读权限的用户

在PostgreSQL中,创建具有只读权限的用户是一个常见的安全需求,以确保某些用户只能查询数据库中的数据,而不能修改或删除数据。以下是如何在PostgreSQL中创建只读用户的方法: 以下是创建PostgreSQL只读用户的步骤: 使…

cf957---D. Test of Love

恩科尔愿意为朱伦做任何事,甚至愿意游过鳄鱼出没的沼泽。我们决定测试一下这份爱。恩科尔必须游过一条宽 11 米、长 𝑛𝑛 米的河流。 河水非常冷。因此,***(即从 00 游到 𝑛1𝑛1 的整个过程)恩科尔在水里游…

通用详情页的打造

背景介绍 大家都知道,详情页承载了站内的核心流量。它的量级到底有多大呢? 我们来看一下,日均播放次数数亿次,这么大的流量,其重要程度可想而知。 在这样一个页面,每一个功能都是大量业务的汇总点。 作为…

【Web开发手礼】探索Web开发的魅力(三)-html基础标签(3)

上述主要是对html标签的介绍和一些基本练习可以当作日常笔记收藏一下!!! 目录 前言 html基础标签 前言 上述主要是对html标签的介绍和一些基本练习可以当作日常笔记收藏一下!!! 提示:以下是本…

克隆某个特定的分支而不是默认分支(master)

当你克隆一个远程仓库时,默认情况下 Git 会克隆整个仓库并将 master(或 main,取决于默认分支的名称)分支检出为当前分支。如果你想直接克隆某个特定的分支而不是默认分支,可以使用 --branch 或 -b 选项来指定分支。 克…

PostgreSQL 怎样处理数据仓库中维度表和事实表的关联性能?

文章目录 PostgreSQL 中维度表和事实表关联性能的处理 PostgreSQL 中维度表和事实表关联性能的处理 在数据仓库的领域中,PostgreSQL 作为一款强大的关系型数据库管理系统,对于处理维度表和事实表的关联性能是一个关键的问题。维度表和事实表的关联是数据…

【手写数据库内核组件】0301 动态内存池,频繁malloc/free让系统不堪重负,动态内存池让应用自由使用动态内存

动态内存管理 ​专栏内容: postgresql使用入门基础手写数据库toadb并发编程 个人主页:我的主页 管理社区:开源数据库 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 文章目录 动态内存管…