没有合适的资源?快使用搜索试试~ 我知道了~
埃及信息学杂志24(2023)191编程入门练习用嵌套循环综合练习Chinedu Wilfred Okonkwo,Abejide Ade-Ibijola南非约翰内斯堡大学约翰内斯堡商学院数据、人工智能和数字化转型创新研究小组阿提奇莱因福奥文章历史记录:2022年5月13日收到2023年2月27日修订2023年3月1日接受保留字:新手程序员嵌套循环练习练习问题入门编程上下文无关语法过程内容生成A B S T R A C T新手程序员很难理解特定的编程结构,如数组、递归和循环。解决这一挑战的一种方法是为学生提供这些主题中被认为难以理解的练习问题-例如嵌套循环。实践证明,实践有助于程序理解,因此,由于手动创建许多实践问题是耗时的;合成这些问题是一个值得研究的专家人工智能任务在本文中,我们提出了在Python中使用上下文无关语法进行嵌套循环练习的综合。我们定义了建模程序模板的语法规则基于上下文无关文法的产生式规则,设计并实现了结构不同的嵌套循环练习的生成算法生成的每个程序由两个或多个循环语句组成,并带有嵌套,并且上下文无关语法规则还允许为每个循环生成无限多个子循环。我们用一个迭代地将这些程序提供给Python解释器的实验过程来检查合成的嵌套循环程序的正确性。前120,000次迭代没有返回语法错误,因此,表明这些程序确实可以编译并有输出。此外,在对210名参与者(新手和专家程序员)的调查中对方案进行了评价评估结果显示,超过82%的参与者同意,合成练习是正确生成的,可解决的,可以作为新手程序员在入 门 编 程 模 块 的 练 习 。 可 以 在 www.example.com 上 找 到 120 , 000 次 迭 代 的 合 成 循 环 程 序https://tinyurl.com/nestedloops2021。©2023 The Bottoms.由Elsevier BV代表计算机和人工智能学院发布开罗大学法律系这是一篇CC BY-NC-ND许可证下的开放获取文章(http://creative-commons.org/licenses/by-nc-nd/4.0/)上提供。1. 介绍学习如何编程对于程序员新手来说常常是一个挑战.许多学生在设计和编写清晰的程序方面有问题,他们不喜欢编程,因为他们发现编程很难学。计算机科学和其他相关学科的学生需要能够正确和流利地编写代码,因为编程技能正在成为许多职业的重要能力[4]。1Abejide Ade-Ibijola,约翰内斯堡商学院人工智能与应用教授。电子邮件:abejide@jbs.ac.za开罗大学计算机和信息系负责同行审查。制作和主办:Elsevier随着技术时代的出现,需要编程能力[5]。我们有理由相信,在学习中使用技术工具可以增加学生已经提出了各种方法来帮助新手程序员学习如何编程,包括教学模型和软件工具[6在编程教学中使用的一些常见教学法包括:理解第一模型-通过显示,描述和分析每个程序路径建立在因果推理的基础上[9],设计思维-为解决问题产生想法的过程[10],生产性失败方法-允许学生首先自己解决复杂问题,然后再给他们如何解决问题的指示或解决方案[11],问题第一方法-先教学生如何解决问题,然后再教他们如何编写程序[12],以及电子表格方法-通过嵌入在电子表格(如Excel)应用程序中的计算思维来教授编程[13]。https://doi.org/10.1016/j.eij.2023.03.0011110-8665/©2023 THE COURORS.由Elsevier BV代表开罗大学计算机和人工智能学院出版这是一篇基于CC BY-NC-ND许可证的开放获取文章(http://creativecommons.org/licenses/by-nc-nd/4.0/)。可在ScienceDirect上获得目录列表埃及信息学杂志杂志主页:www.sciencedirect.comC.W. Okonkwo和A. 阿德-伊比约拉埃及信息学杂志24(2023)191192已经设计了几种软件干预来帮助新手程序员,例如:智能导师和聊天机器人系统[6,14],程序的语法生成,自动程序叙述[1],严肃的游戏概念和程序可视化[15]。这些教学模型、工具、应用程序和其他一些努力已经推进了教育环境[16],包括新手程序理解领域。虽然这些模型和工具对于教和学编程是有用的,但仍然需要创建更多的工具来支持新手,针对特定的编程结构。研究表明,实践可以提高编程能力[17]。我们也知道,像嵌套循环这样的结构对于新手来说通常很难理解[3,18];因此,本文所讨论的问题是嵌套循环练习的综合。综合练习可以用笔和纸手动解决,作为新手程序员的实际支持。为此,我们设计了一个上下文无关语法(CFG)的形式化的嵌套循环练习的特定句法模式。 我们还设计了算法,使有效的嵌套循环练习中使用的CFG规则。这些规则和由此产生的练习是针对Python编程语言的,因为这是当今世界上入门编程中最常用的语言之一[19]。图1描述了合成嵌套循环执行的过程。这个过程首先由用户指定嵌套循环的类型和他们想要的迭代次数,然后使用CFG规则在python中生成这些程序结果程序作为练习显示给用户。本文的贡献如下。我们有:1. 设计了一个CFG,用于Python中嵌套循环练习的语法生成,2. 实现了上面(1)中的CFG规则,并在Python中生成了许多有效的嵌套循环练习的迭代,3. 使用此工具将帮助学生理解嵌套循环程序的构造和流程,4. 综合程序的评估结果,以表明它们是正确的,可以支持新手的程序理解。本文其余部分的组织如下。第二节介绍了背景资料,第三节讨论了相关的工作。第4节介绍了嵌套循环合成的语法设计,第5节解释了循环合成的算法第6节描述了实施情况和结果,第7节介绍了评价。第八部分是结论和未来的工作。图1.一、使用CFG规则合成循环练习程序2. 背景在这一节中,我们讨论新手在学习如何编写计算机程序时所面临的困难。我们从一般的难点开始,到理解嵌套循环结构的具体难点。我们进一步讨论了循环的重要性,并强调了这项工作背后的动机。2.1. 学习编程和困难2.1.1. 学习编程及其重要性学习编程包括许多活动,如学习语言语法,程序设计技术(即参数)和程序逻辑(即语义)。Bittencourt等人[20]指出,学习计算机编程一直是一个长期的研究课题,并且已经设计了各种方法来简化新手程序员编程不像人类的口头语言那样直观-传统的编程教学方法侧重于语法和语义而不是问题解决技术[21],但新手程序理解需要平衡注意程序知识和解决问题的策略[22]。多年来了解如何编写基本的计算机程序对于新手程序员来说是至关重要的,因为它有助于他们知道如何逻辑地和创造性地解决问题。编程是第四次工业革命(4IR)时代所需的关键技能之一,以促进新的创新趋势。尽管如此,对于大多数新手程序员来说,编程课程的抽象形式仍然是一个挑战[21]。2.1.2. 一般困难方案拟订的主要挑战包括:1. 基本概念(如构造[25],数据结构[26]等),2. 程序设计风格和/或范例[26],3. 语言语法[3]4. [27]第28话:我的朋友,我的5. 解决问题的技能或算法[26]。2.1.3. 循环的特殊困难学生们经常在入门编程模块中对循环的实际理解方面遇到困难[3,18]。他们发现很难理解程序迭代的过程[26]。新手程序员面临的一些循环困难包括:对循环构造和循环执行的误解,以及使用循环构造解决问题的困难[3]。当循环被嵌套时,新手程序员更难理解[26]。2.2. 嵌套循环循环是一个迭代语句,允许代码块重复多次[29]。 有时,你必须把一个循环放在另一个循环里面,也就是说,你必须嵌套循环。嵌套一个循环仅仅意味着有一个循环(外循环),在它的命令中有另一个循环(内循环)[30]。 在本文中,六种结构不同类型的嵌套循环。图2示出了这些类型的环的结构 图 2(a),每个弧C.W. Okonkwo和A. 阿德-伊比约拉埃及信息学杂志24(2023)191193图二. 在这项工作中合成的嵌套循环程序/练习的类型的图形表示。表示一个单独的循环,因此这是一个用两个弧描绘的嵌套循环,较小的弧包围在较大的弧中。这与子图相同。 2(b)、(c)、(d)和(e)。在这些子图中的每一个中,弧被放置在不同的结构设计中以描绘什么环被嵌入在另一个中。子图 2(f)描述了嵌套循环的无限衍生结构,其中循环在二维中衍生;即,分离的子循环(如(c)和(d)所示)和连续嵌套(如(b)所示)。这是通过递归语法规则设计来实现的,后面将在第4节中讨论。2.3. 循环的重要性循环是许多计算机程序的组成部分;即大多数程序可能包含一个或多个循环[25]。程序通常不限于线性指令序列,因为它可以在执行期间重复代码。成为一名程序员需要你理解编程中的循环概念,循环在程序中的使用,以及循环状态的执行过程。因此,对循环语句及其在程序中的应用有足够的了解将有助于新手程序员提高他们的编程技能。因此,新手程序员中的循环编译挑战是这项工作的动机之一。下一节将详细讨论这项工作的动机。2.4. 动机以下是促使这项研究的挑战。编程可以是初学程序设计的人觉得很难理解计算机编程语法,必须同时学习各种技能[1,2]。学习编程的一个主要挑战是需要同时获得许多不同的技能[31]。循环理解问题新手程序员发现很难理解循环结构、循环执行和程序中循环的使用[3,25]。高失败研究表明,入门编程课程有很高的失败率和辍学率[21],因为缺乏足够的编程学习辅助工具,可以支持学生[6]。实践的需要Hook和Eckerdal[32]得出结论,与那些花更多时间阅读教科书和参加讲座的学生相反,花更多时间做问题练习的学生在编程课程考试中实际上-C.W. Okonkwo和A. 阿德-伊比约拉埃及信息学杂志24(2023)191194喜喜编程工具有助于编程[6,33],程序练习的持续练习有助于程序理解[34]。教学方法程序设计课程的教学风格影响学生这项工作的动机是这些挑战和学习编程的需要。我们已经设计了一个正式的技术(基于CFG)的嵌套循环问题,新手程序员可以使用的实际问题的合成练习。在下一节中,我们介绍了与本研究相关的研究工作2.4.1. 为什么要使用上下文无关语法?上下文无关文法(或CFG)是一类形式语言,可用于形式上指定上下文无关语言(CFL)。CFG的正式定义见第4.1节。我们使用CFG作为表达规则的媒介,用于在嵌套循环中制定新问题,原因如下:子循环的重复性如图2所示,循环可以有无限数量的子循环,即使我们已经考虑到三个子循环的最大深度-即我们不允许生成深度为P4的嵌套循环。CFG非常适合将这些规则形式化,因为它们能够表达重复出现的模式。例如,用于表示图2(a)和(b)中的句法结构的无限数量的子循环的简单规则是:h循环i-!hstartloo pi hloo pihendloopij1-我知道hloopi2其中变量start loop和end loop是表示这些循环嵌套的符号。规则1允许循环变量的无限替换,可以在重写推导过程中用规则2终止。在这里,循环的深度可以概括为一个变量,指定在推导中重写的次数。共享语法规则科学传播的一个重要内容就是给社会一个“使用CFG将允许打算合成其他类型的程序片段的其他科学家重新使用嵌入在CFG规则中的句法结构的一些子结构。FLAT的应用形式语言和自动机理论(FLAT)是理论计算机科学的一个众所周知的方面。这方面也已经知道有许多数学或计算理论,很少或没有实际生活中的应用。然而,在这项工作中采用FLAT(CFGs)的一个方面表明,FLAT可以在程序内容生成和计算机科学教育等主题中找到新的应用。CFGs和编程语言编程语言识别器和解析器的语法定义是用CFG完成的。这比正则语言(或RL)更好,因为它处理更复杂的结构,如平衡括号语言在解析编程语言中使用CFG并不新鲜,像任何其他形式语言一样,它们可以用于识别和生成任务[35]。CFG在识别中的应用可以在编译器构造中找到,其在生成中的应用可以在Ade-Ibijola[1]中找到。3. 相关作品虽然没有关于嵌套循环实践程序或练习的合成的研究,但在以下领域使用类似的技术进行了一些相关工作Artefacts Gulwani[36]合成了一系列具有界面模型和算法方法的对象,用于重复绘图和数学概念(例如代数恒等式,位向量算法,基于指南针的几何构造等)。Ade-Ibijola[37]提出了一种算法,用于自动生成假设的社交网络图,这些图使用Microsoft Automatic Graph Layout API以图形方式呈现。该算法产生随机的假想名称作为顶点,并产生随机的有向边连接它们。Sunbeom和Hakjoo[38]开发了一种通过模式程序合成生成不同字符模式的工具。该算法通过枚举搜索、约束响应和程序探索的集成,综合出所需的程序。Ade-Ibijola的其他作品[39]提出了使用概率CFG(或PCFG)合成社交媒体配置文件-使用Facebook作为案例研究,作者使用PCFG规则来制定合理的Facebook人物角色。Kabaso和Ade-Ibijola也提出了一种在社交媒体上合成广告的工具[40]。练习在尝试综合编程练习,爱德华兹等人。我创建了一个名为texton的工具,它通过非课堂在线讲授编程基础知识练习[41]。采用了一个数据驱动的辅导平台,为程序员新手提供个人援助。该方法使用状态提取和路径构建来自动为学生合成定制提示,即使所提供的状态先前未在数据中出现[42]。Ade-Ibijola[1]使用CFG规则对程序模板进行建模,在Python中生成了无限多个唯一的实践程序Gulwani等人。[43]提出了一个轻量级系统,可以在介绍性编程任务中生成关于性能问题的反馈该方法使用基于动态分析的方法来检查学生的程序是否 Kim等人[44]开发了一个自动解释编程任务中错误的系统,称为Apex。系统将自动-matically合成所的原因用于编程分配错误,包括错误所在和错误原因。3.1. 相关工作的比较表1比较了与我们的工作相关的一些以前的研究工作。虽然以前的一些工作有某种形式的合成算法,和一些与CFGs,但没有试图解决的循环合成问题,或for-malise这个过程。3.2. 的差距从文献中,没有尝试已经正式合成嵌套循环问题的过程中使用CFGs,也没有任何努力对嵌套循环的生成Python的实践练习。这就是本工作所要解决的差距C.W. Okonkwo和A. 阿德-伊比约拉埃及信息学杂志24(2023)1911952伊什河表1相关工作的比较。S/Title作者比较N1实例综合:交互模型和算法。Sumit Gulwani(2012)它使用算法方法(Bitvector,Algeorge identities等)。合成的例子为基础的文物,不使用CFG。2用于社会网络分析的假设社会图综合。阿贝吉德·阿德-伊比约拉(2018)该工具使用算法来生成假设的社交网络图。这项研究采用了合成技术,但没有使用正式的语法规则。3从实例中综合模式程序苏善范和Hakjoo Oh(2018)该工具使用领域专用语言(DSL)和算法来合成模式程序。合成技术的实施,但不使用语法规则来设计的问题。4使用概率上下文无关语法合成社交媒体配置文件。02 The Dog(2017)概率/随机CFG用于制定用于自动生成社交媒体配置文件的语法规则该工具合成个人属性,而不是嵌套循环实例程序。5无循环程序的合成Gulwani等人(2011)它使用基于组件的方法来生成合成约束,然后使用算法来求解约束。未使用CFG6大解决方案空间中的数据驱动提示生成:一个自我改进的python编程导师。7Practice Novice Programs in Python的语法生成Kelly Rivers和Kenneth R Koedinger(2017)阿贝吉德·阿德-伊比约拉(2018)该工具使用状态抽象、状态具体化和路径构建来自动为学生编程问题产生建议/提示。它不使用CFG。该工具使用合成技术来生成许多独特的使用CFG的程序。虽然使用了类似的方法,但程序程序是合成的,而不是嵌套循环练习。8在介绍性编程作业中为性能问题生成反馈。9自动编程赋值错误解释。Gulwani et al.(2014)它使用一种算法策略来自动生成对学生在编程作业中表现的反馈。首先,定义了一个匹配规范,并使用一个算法来检查学生的实现,以产生自动反馈。它不使用CFG。Kim等人(2016)一个实例程序匹配技术被用来比较学生作业与教师的正确实现。如果检测到错误,该工具会自动生成带有解释的错误。它不使用CFG。10Sell-Bot:社交媒体广告合成的智能工具卡巴索和阿德-伊比约拉(2020)它使用算法方法来生成基于CFG的自然或人类语言。它涉及人类语言生成,而不是实例程序4. 嵌套循环综合在本节中,我们将介绍一个CFG的设计,用于在Python中合成嵌套循环练习。使用CFG(一种描述上下文无关语言的形式)的原因在2.4.1节中说明。4.1. 术语定义本节中使用的一些术语包括:符号、字母表、字符串和上下文无关语法(或CFG)。我们将这些术语定义如下。符号是一个项目或单个标记;字母表是符号的有限集合;字符串由零个或多个符号的串联组成(当它为零时,它被称为空字符串,表示为k),语法(G)是表示规则描述一种语言的语法[45]。G是一个四元组,给定为G=(V;R;R;S)。这里V是非终结变量的有限集合,R是终结符号的有限集合(不相交其中R是一组产生式规则,其中每个产生式规则将一个非终结符变量映射到一个字符串,即R2(VXR),S是开始符号(S V)-所有派生的原点。4.2. 构建块我们已经从Ade-Ibijola的工作中改编了简单符号的产生式规则(例如字母,标识符名称,算术Arth表达式和对数逻辑表达式)[1]。这些符号出现在随后小节中介绍的新CFG规则中。4.3. 嵌套循环合成规则在这里,我们提出了嵌套循环exerces的生成规则。这些规则涵盖了Python中的三种类型的循环,即:For,While和For-Each循环。4.3.1. 声明和缩进在这里,我们提出了生成不同类型语句的规则,并在这些语句之间强制执行结构缩进-确保循环hN L i-!新行3hVarIni ti-!GetSetOfIniti alisedVariables设置了 4个StmtBloc ki-!h变量初始化i hArth Exp ri j hLogicalExp ri5h选项支持块i-!hStmtBlocki jk6h循环类型i-!For rjForEac hjWhile2017年7月1日循环实例ei-!GetLoopStatement设置循环类型;变量初始化2018年10月28日星期一!hN Li hTabi9规则3至规则9定义了诸如换行符、可变初始化等结构(这是用算法1中的函数完成的)。规则5和6描述语句块。在规则5中,首先初始化变量,并且这些变量用于算术表达式中,或者作为替代,逻辑表达式用规则4中初始化的布尔变量生成。规则6允许生成可选语句块。这在以后构建嵌套循环程序时使用,这些程序在源代码的特定部分可能有语句块,也可能没有。规则7列举了所涵盖的循环类型,这将传递给规则8进行综合使用在算法2中定义的函数GetLoopStatement()来创建实际循环实例。 为了保持嵌套循环的结构,在规则9中结合使用换行符和制表符来管理代码的缩进。4.3.2. 双深度嵌套循环在本节中,我们利用4.3.1节中定义的规则来定义一个深度为2的简单嵌套循环的结构-见图图2(a)是该循环结构的图形描述。H2部门!h循环实例ei:hStruStriStruhOptStmtBlockiStruhLoopInstanceei:hStruc StrihStmt BlockihOpt Stmt Blockih10位C.W. Okonkwo和A. 阿德-伊比约拉埃及信息学杂志24(2023)191196hi喜喜hið Þ2000年ihi规则10通过将一个循环实例与一个可选的语句块编织在一起,并允许另一个循环实例出现在其中,使用括号来管理嵌套,来定义这种类型的嵌套循环。4.3.3. 三深度嵌套循环为了定义一个深度为3的简单嵌套循环结构,我们使用4.3.1节中描述的规则--参见图2(b)中对这个循环结构的图形描述。Sory语句块。子结构的其他语法定义如前面的产生式规则所述h2inoneonei-我知道h循环实例i:h结构流i第一组创建循环实例i:h结构i h选项结构块循环实例i:h结构应力ih3部门hi-我知道h循环实例ei:hStru Stri操作Stmt Blockih循环实例i:h结构i可选结构块ih循环实例i:h结构化ð11ÞhStmt Blocki hOptStmt Blocki hOptStmt Blocki循环实例i:hStruc Stri hStmtBlock实例h选项支持块初始化ð14Þh选项支持块初始化深度为3的嵌套循环的语法在规则11中描述在这里,三个环以同心形式嵌套每个循环都是用循环实例定义的,Opt Stmt块允许在每个循环开始时和每个循环结束前在最里面的循环有一个强制性的StmtBlock,因为它不能为空-最里面的循环需要执行语句。4.3.4. 两个循环嵌套在一个这里我们描述规则12中两个循环嵌套在一个循环中的语法。为了分隔这两个子循环,我们还在它们之间以及两个子循环的开始和结束处包含了一个可选的语句循环。h2inonei-我知道h循环实例i:h结构流i可选结构块i循环实例i:h结构应力i在这个阶段,一个问题浮现在脑海中:如果我们想要两个以上的子循环呢?或者,如果我们想定义这些规则,使得它允许从开始符号导出无限多个子循环,该怎么办?因此,递归地定义子循环就变得很有必要了.这方面的规则见第4.4节。4.4. 不可复制的嵌套循环和子循环在这里,我们定义了用于无限地产生子循环的规则(在图2(f)中以图形方式示出)。我们从规则15中然后,我们提出了一个递归定义的子-规则16中的循环,其中符号Recursive SubLps 有一个参考-对自己的爱。仍然在规则16中,我们确保可以通过生成最内部的循环h Innermost Lp i的选项来停止对这个嵌套循环推导的重写。h最内侧Lpi- !循环实例i:hStruc Stri15hStmt Block初始化hStmt Block初始化h选项支持块i循环实例i:hStruc Stri hStmtBlock实例h选项支持块初始化4.3.5. 三环合一ð12Þh重复iveSubLpsi-我知道h循环实例i:h结构流ið递归子LP中的选项支持块中的选项支持块拉吉第一组ð16Þ规则13与规则12相似,区别在于现在有三个循环而不是两个。这三个循环中的每一个都嵌套在一个循环中,其中有一个强制语句循环,原因在前面讨论过。这个语法定义的图形描述如图所示。 2(d).h3inonei-我知道h循环实例i:h结构流i可选结构块i循环实例i:hStruc Stri hStmtBlock实例hRecursive SubLpsihOpt Stmt Blocki h递归的子LpsihjhInnermost Lpi总之,我们提出了六种类型的嵌套循环的公式,如图2所示。为了完成G的规则,我们在下面的产生式中定义了开始符号(S V,其中S嵌套循环)。h选项支持块i循环实例i:hStruc Stri hStmtBlock实例循环实例i:hStruc Stri hStmtBlock实例h选项支持块初始化4.3.6. 两个循环嵌套在一个内部循环中ð13Þh嵌套的loo pi-!h2深度ij1 7-我知道h3深度ij18-我知道h2inoneij19-我知道h3inoneij20-我知道h2inoneoneij21-我知道hRecursiveSubLpsi22规则17在规则14中,我们允许两个子循环结构中的一个(第一个子循环)有一个内部循环。图2(e)中示出了这种情况的图解说明。最里面的子循环得到一个计算-从起始符号开始循环l,h嵌套的循环pi。现在,我们继续一个如何从嵌套循环派生嵌套循环的示例 实施例1中C.W. Okonkwo和A. 阿德-伊比约拉埃及信息学杂志24(2023)191197)示例1(嵌套循环的推导)。下面是一个如何从开始符号h派生嵌套循环的示例。规则22])h循环实例i:h结构应力i)for yinrange3;50;12:c¼ yω 2h循环实例i:h结构结构块h选项支持块i规则15]ð27Þ递归子LP中的选项支持块中的选项支持块规则16])for yinrange3;50;12:递归和子LP中的选项支持块h选项支持块i规则8])for yinrange3;50;12:c¼ yω 2h递归ve SubLpsih选项支持块i规则5和6]ð23Þð24Þð25Þ)foryinrange3;50;12:c¼ yω 2whilec¼100:k¼c 10h选项支持块i规则8])foryinrange3;50;12:c¼ yω 2whilec100:kc10printtkð28Þð29Þ)foryinrange3;50;12:c/yω2h最内Lpih可选支架块i1/2规则15]ð26Þ在这个例子中,一个嵌套循环的Python程序是从语法的开始符号G中派生出来的,即S *29。该推导过程借助第5节中描述的算法实现自动化,第6节中描述了实现细节。图三. 解决方案的例子的综合方案(清单1C.W. Okonkwo和A. 阿德-伊比约拉埃及信息学杂志24(2023)1911985. 循环综合在本节中,我们将介绍从4.3节和4.4节定义的产生式自动生成程序变量和嵌套循环实例的算法。able,第9行构造赋值语句,即vari- able=value。这个初始化被添加到列表L中,这个过程一直持续到我们有N个 初始化。算法1:GetSetOfInitialisedVariables5.1. 变量的生成和初始化本节描述用于自动生成和初始化程序变量的算法(算法1)。该算法采用(作为参数):需要生成和初始化的变量的数量,表示每个随机生成的变量的最小和最大初始值的两个参数,以及确保最小和最大初始值之间的最小数值距离的分布-这确保随机值的选择范围足够宽以访问各种随机值。第3行上的变量L是一个空列表,存储生成的变量及其相应的值。在第5行中,循环开始搜索有效的变量和值,条件是迭代次数尚未达到,并且lwrbd、uprbnd和spread都满足spread的条件。 在第7行中,选择一个随机字母表,除了那些看起来像数字的字母表-即l和o。第8行找到这个变量的值-5.2. 循环类型在本节中,我们将介绍一个算法(算法1),用于生成前面在规则7中定义的循环类型。算法2描述了用于执行Production 8中定义的操作的GetLoopStatement()这个算法需要五个参数,并返回一个循环语句。在第2行,初始化了python中的一个语法行尾字符,并在第3行将循环字符串设置为null。第4行开始的switch语句允许选择循环类型。环for1;for2;for3(分别在第5、7和10行定义)允许使用BRAC生成for循环的三个变体函数向生成的字符串中引入所需的方括号。算法1中的另一个函数是getValidLogi-calStmt,它生成有效的逻辑语句。第15和17行允许两种额外的循环类型,即foreach和while循环。在所有情况下,循环字符串都是这样构建的,它们按照前面给出的G的产生式规则产生有效循环。C.W. Okonkwo和A. 阿德-伊比约拉埃及信息学杂志24(2023)191199算法2:GetLoopsStatementC.W. Okonkwo和A. 阿德-伊比约拉埃及信息学杂志24(2023)191200算法3:嵌套循环练习的合成算法3跟踪文法G.该算法将导出的循环数作为参数,并返回这些循环的列表在每一步,它都试图将语法规则中的所有非终结符替换为终结符或符号。第10行将从G派生的最后一个字符串添加到嵌套循环字符串列表中这个列表在第13行返回6. 执行情况和结果在第5节中,我们介绍了基于第4节中给出的规则的嵌套循环实例的合成算法。6.1. 实现细节在这里,我们提出了这些算法的实现细节我们用Python实现了所有的规则和算法。该程序经过多次测试,从该程序合成的有效嵌套循环程序的120,000次迭代可以在https://tinyurl.com/nestedloops2021上查看。6.2. 论统一性与正确性.我们演示了生成120,000次不同类型嵌套循环的迭代练习,包括六类嵌套循环,包括两个深度的嵌套循环,三个深度的嵌套循环,嵌套在一个中的两个独立循环,嵌套在一个中的三个独立循环,嵌套在一个中的两个独立循环和一个内部循环,以及无限衍生的嵌套循环。生成的pro的所有实例在执行过程中,克是唯一的,没有重复的程序。根据Ade-Ibijola[1],可以基于规则的解析树的分支提供唯一性的理论证明,以及从几乎不可能的机会推断唯一性(或推测),即可以在程序生成的一百万次迭代中生成正确性为了验证生成的程序的正确性,我们使用Python3.9.0解释器,我们检查了练习中的语法错误,发现合成的程序实例没有语法错误。图3显示了使用Python解释器测试的合成程序的示例。此外,还对这一工具进行了实际评估,以确定其有用性,下一节将讨论所获得的结果。7. 环路合成器的评价与应用7.1. 评价本节介绍了学生对生成的嵌套循环练习及其可能的有用性的看法的基于调查的评估结果这项调查是在南非约翰内斯堡大学进行的,目标受众包括正在学习Python编程入门课程的学生以及那些顺利完成课程的学生。选择这一人群是因为他们在早期阶段进行编程。该调查可 以 在 这 个 链 接 中 找 到 : https://tinyurl.com/nested-loops-exercises。C.W. Okonkwo和A. 阿德-伊比约拉埃及信息学杂志24(2023)191201评估的目的是确定1. 对计算机编程的理解,2. 感知生成的嵌套循环练习,3. 如果生成的程序是正确的和可解的,4. 综合练习的练习是否有助于提高他们的编程技能。7.2. 与会者调查对象包括210名大学生,其中87.7%为一年级学生,13.3%为归国或老学生.样本人群由计算机科学和其他相关课程的男女学生组成,他们是第一次参加程序设计入门课程的学生和以前参加过该课程的学生这个观众是适当的研究,因为研究的目标是帮助新手克服在程序理解的挑战。学生们被问及他们对以下问题的看法计算机编程这测试了学生对计算机编程课程的一般看法,以评估他们对学习课程的感受。71%的人认为课程难,15.2%的人认为课程容易,13.8%的人无所谓。这表明学生认为计算机编程课程很难见图凌晨4Python编程在这里,学生们被要求决定他们现在是否正在学习Python编程课程,或者他们以前是否做过。86.7%的人认为他们目前正在学习或以前学习过Python编程课程,而13.3%的人以前没有学习过Python这意味着参与调查的大量学生都有Python编程的知识见图 4 b.在编程中使用循环语句它测试了学生对在编程中使用循环语句的看法。76.2%的人认为在编程中使用循环语句很困难,11.9%的人认为很容易使用,11.9%的人无所谓。这表明大多数新手程序员发现很难在编程中使用循环。 见图 4杯方案编制方面的专门知识测试了学生的编程知识水平。70%的人是第一次参加编程课程,14.3%的人在2-5年前参加过编程课程,但后来停止了编程,11.9%的人在2- 5年前参加过编程课程。5年前,但仍在编码,3.8%认为自己是编程专家。见图 4 d.练习辅助学习在这里,学生们被要求确定实践是否有助于编程的学习。82.4%同意,6.6%不同意,11%无所谓。这意味着练习有助于程序理解。见图 4 e.正确的综合练习这测试了生成的练习,看看它们是否正确地制定,并可以使用笔和纸解决。87.6%的人认为生成的练习是正确的,3.8%的人认为问题是不正确的,8.6%的人不能说练习是否正确。这意味着开发的系统能够生成正确的嵌套循环练习。 见图 4楼综合嵌套循环练习检查了使用综合练习Python编程的效果。85.7%的人认为使用这些综合问题练习嵌套循环练习有助于理解循环,4.8%的人不同意,9.5%的人无所谓。这表明嵌套循环练习对提高学生的程序设计技能有积极的影响。参见图4g。调查结果显示,参与本次调查的学生中有很大一部分处于学习编程的早期阶段,包括目前正在学习编程课程的学生和以前学习编程课程的学生。计算机程序设计课程对大多数学生来说都是很难学习的,特别是循环的使用,这表明学生需要学习辅助工具的支持。这个结果与[3,26]的报告比较好,该报告表明学生在编程的早期阶段很难理解嵌套循环。合成的嵌套循环练习正确制定,并可使用pen和见图4。 评价结果。C.W. Okonkwo和A. 阿德-伊比约拉埃及信息学杂志24(2023)191202这份文件表明,该工具设计良好,能够实现研究的目的通过练习生成的练习,新手程序员可以更多地了解循环语句在程序中的使用,使他们更容易提高Python编程技能。这一发现与[17]的建议一致,即实践可以提高编程能力。7.3. 应用合成嵌套循环练习可用作:1. 学生的练习题2. 学生的测试问题,以及3. Python编程入门课程中的考试问题。8. 结论和今后的工作8.1. 结论这项工作提出了嵌套循环练习的综合,为新手程序员的入门编程实践。我们定义了上下文无关语法(CFG)规则建模程序模板,并应用这些规则来合成不同的循环程序。开发了新的算法(基于CFG规则),并用于生成练习。这些练习可以交给程序员新手,让他们用笔和纸来解决。我们通过合成120,000个独特的嵌套循环问题来演示该工具的功能。通过问卷调查和学生评价,该工具今后工作在本书中,我们主要关注Python中的循环语句;未来的工作将尝试探索其他编程语言和其他编程结构中的其他循环语句资金这项工作得到了南非国家研究基金会的支持(批准号:119041)。CRediT作者贡献声明奥孔科沃:方法论,数据管理,项目管理,写作-原始草稿. AbejideAde-Ibijola:概念化,方法论,软件,监督,形式分析,调查,项目管理,验证,写作- 原始草案,写作-审查编辑。竞争利益作者声明,他们没有已知的竞争性财务利益或个人关系,可能会影响本文报告的工作。引用[1] A. Ade-Ibijola,Python中练习新手程序的语法生成,计算机和信息科学通信(CCIS)(2018)158[2] A.北卡罗来纳州阿尔塔姆里Brown,3700万次编译:在大规模学生数据中调查新手编程错误,在:第46届ACM计算机科学教育技术研讨会论文集,ACM,2015年,第100页。522-527[3] QianY , LehmanJ.Students'MisconceptionsandOtherDifficultiesinIntroductionProgramming:ALiteratureReview.ACMTransactionsonComputing Education(TOCE)2017;18:1-24.[4] M. Rahmat,S.沙赫拉尼河N.F.M. Yatim,N.F.A.宰纳尔河,巴西-地Ab Rahman,影响学生表现的基本编程中的主要问题,Procedia-Social and Behavioral Sciences59(2012)287[5] T.- C. Huang,Y.黄氏Y.Shu,S.-H. 张,Y.-Z. 黄,S.-L. 李,Y.-M. 黄角,澳-地H.Liu , Developing a self-regulated oriented online programming teaching andlearning system , in : 2014 IEEE International Conference on Teaching ,Assessment and Learning for En
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 4
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功