Python中字符串切片技术在游戏开发中的应用研究

2017-11-09 08:46葛日波徐佳辉
计算机教育 2017年11期
关键词:数据项元组数据类型

葛日波,徐佳辉

(大连理工大学城市学院,辽宁 大连 116600)

Python中字符串切片技术在游戏开发中的应用研究

葛日波,徐佳辉

(大连理工大学城市学院,辽宁 大连 116600)

切片是Python内置的重要技术,也是它的一大特色,文章介绍Python中3种常用的内置数据及数据切片技术,结合具体的游戏项目,说明切片技术的应用技巧及运行效果。

Python;切片技术;游戏开发;应用研究

1 背 景

Python是一种面向对象的程序设计语言,1989年由荷兰人Guido van Rossum发明。Python是纯粹的自由软件,被业界昵称为“胶水语言”,因为它拥有丰富的API和工具,程序员能够轻松地使用C、C++、CPython来编写扩充模块,Python编译器本身也可以被集成到其他需要脚本语言的程序内。开发时可以先使用Python快速生成程序的原型,再对其中有特别要求的部分,用更合适的语言改写,然后封装到Python中,进而大大提高开发效率[1]。Python语法简洁清晰,具有简单、易学、免费、开源、可移植、可扩展、可嵌入、面向对象等很多优点,使得它一经问世就受到了大量用户的青睐,成为当前最受欢迎的程序设计语言之一[2]。尤其是从2004年以后,Python在编程领域的占有率一直处于稳步上升之中。根据TIOBE最新统计数据显示,Python已超越C#,与Java、C、C++一起成为全球最流行的四大语言之一[3]。

目前,Python已经被广泛应用于后端开发、游戏开发、网站开发、科学运算、大数据分析、云计算,人工智能等众多领域。在Google内部的很多项目,例如Google Engine都使用了Python,Google 招募了许多 Python 高手为他们快速开发服务。随着微软将Python纳入.Net 平台,相信Python的将来会得到更加强劲的发展[4]。从国内市场来看,随着国家创新发展战略的调整以及一些尖端技术领域包括机械制造、航空航天、移动互联、大数据、云计算,人工智能等的蓬勃发展,未来对Python开发者的需要求将是大量的。

以更短的时间、更低的投入开发出高性价比的软件一直以来是计算机业界的理想和追求。Python语言的出现,为上述理想的实现提供了有力支持。正因如此,才使得Python语言备受关注,并在业界得到了广泛应用,学习和追随者不断增加。专家预测,未来市场对Python技术人才的需求十分巨大,高等院校作为人才培养的主体,积极探索Python技术人才的培养具有重要意义。切片是Python内置的重要技术,也是它的一大特色,可以大大提高编程效率。

2 Python中3种常用的内置数据

2.1 3种常用的内置数据

Python内部具有丰富的数据类型,这也是它应用广泛的原因之一。其中字符串、元组和序列是最常用的3种数据类型。元组和序列是Python专有的,其他语言如C、C++、Java没有该数据类型。尽管大多数语言也有字符串数据类型或者支持对字符串的操作,但Python中的字符串功能更强大,操作起来更方便。

2.2 数据的创建

1)创建字符串。

创建字符串很简单,只要为变量分配一个值即可,分配的值可以使用引号('或")进行定界[5]。例如:

上面的代码是创建字符串类型的两条语句,分别创建了名字为var1、var2的字符串类型的变量,它们的值分别是“Hello World! ”和“12345”,其中var1的值使用单引号进行定界,而var2的值使用双引号进行定界。

2)创建列表。

创建列表也很简单,只要把用逗号分隔的数据项用方括号括起来即可[6]。例如:

上面的3条语句分别定义了3个列表类型的变量list1、list2和list3,每条语句后面使用方括号括起来的多个用逗号隔开的数据项就是该列表变量的值。列表中的数据项可以是同种类型,也可以是不同类型,可以是包括列表和元组在内任意数据类型。

3)创建元组。

创建元组与列表很类似,所不同的是要使用圆括号把数据项列表括起来[7]。例如:

上面的3条语句分别定义了3个元组类型的变量tup1、tup2和tup3。

需要说明的是,列表和元组在定义和使用上非常相似,所不同的是列表中的数据允许改变,而元组中的数据不可以改变。拿前面的例子来说,list1中的1997可以修改为1998,而tup1中的1997是不能修改的。元组和列表类型的引入,为处理复杂问题提供了支持。

2.3 确定数据项的个数

使用Python系统提供的len函数可以获取字符串、元组、列表中数据项的个数。一般格式是:

len(变量名)

以前面定义的数据为例:len(var1)的结果是12,len(list1)的结果是4,len(tup3)的结果是4。

2.4 数据的访问

字符串、元组、列表访问数据的格式是一致的,都采用变量名后跟索引的方式。索引是用方括号括起来的一个数字。访问数据的一般格式为:

变量名[数字]

数字表示数据项在集合中的位置,可以是非负数,也可以是负数。当数字为非负数时,数据项的位置从左至右计算,依次为0,1,2,…,n-1;当数字为负数时,数据项的位置从右至左计算,依次为-1,-2,…,-n,这里的n是数据项的个数。图1给出的是以var2和list1为例确定的数字与数据项位置之间的对应关系。

图1 索引数字与数据项之间的对应关系示意图

按照这种对应关系,以前面定义的例子来说,Var1[0]的值是字符H,Var2[4]的值是字符5,list1[1]的值是字符串‘chemistry’,list2[3]的值是4,tup1[3]的值是2 000,tup3[2]的值是字符串“c”;Var1[-1]的值是字符!,Var2[-5]的值是字符1,list1[-4]的值是字符串‘chemistry’,tup3[-2]的值是字符串“c“。

3 Python中数据切片技术

字符串、列表、元组都是包含多个数据项的集合。在实际应用中,经常需要从给定的数据集合中提取符合条件的数据项。简单地说,就是从一个大的数据集合中提取其子集。Python中的切片技术正是为实现这一目的而设计的。切片顾名思义就是对数据实施分割的一种方法。字符串、列表、元组都可以实现切片操作[8]。切片操作的一般格式是:

变量名[数字1:数字2:数字3]

上述操作的作用是:从数字1开始,以数字3为间隔,截取从数字1到数字2之间(不包括数字2)的数据项,结果仍然是原来的数据类型。换言之,切片获得结果的数据类型与被切片对象的数据类型一致。需要说明的是,3个数字均可以省略不写,但第一个冒号不可以省略。当省略数字1时,系统默认为0,当省略数字2时,系统默认为n(n为数据项个数),省略数字3时,系统默认为1。 基于前面创建的数据实例,下面给出了一些实施切片操作的情况:

切片技术的引入使得数据的分割变得异常简单,可以大大简化代码,提高编程效率。

4 字符串切片技术在猜词游戏中的应用

4.1 猜词游戏描述

程序运行时,先输出一个欢迎界面,然后自行从程序内置的单词表中随机选取一个单词,将单词中的字母顺序打乱构成一个新的字符序列,将新构的字符序列显示给玩家,玩家根据程序给出的字符序列,猜测正确的单词并通过键盘输入方式提交,程序把玩家输入的单词和正确的单词进行比较,如果猜对了就输出祝贺信息并结束程序;如果猜错了就给出猜错了的信息并提示玩家继续猜,一直进行到玩家猜对为止[9]。

4.2 猜词游戏程序分析与设计

开发程序必须从设计入手,设计包括数据结构和算法两部分。数据结构设计是对程序中用到的变量及其类型进行描述的过程,算法设计则是对解决问题的方法和步骤的描述[10]。

1)数据结构设计。

通过分析,猜词游戏程序中用到的变量共有6个,它们的名字、类型与作用见表1。

表1 猜词游戏用到的变量情况一览表

2)算法设计。

图2给出猜词游戏完整的流程图。进行算法设计时,应该按照自上而下、逐层展开的原则进行。初次设计时,可以把程序的执行分为以下5个步骤。

图2 猜词游戏完整的流程图

步骤1:输出欢迎界面。

步骤2:从单词表WORDS中随机抽取一个单词存到word和correct中。

步骤3:把word中的字母顺序打乱后存到jumble中。

步骤4:输出jumble。

步骤5:提示用户通过反复输入guess来猜correct。

上面的5个步骤中,步骤1、步骤2和步骤4已经足够清晰,且很容易实现,不需要再进行设计;步骤3和步骤5不够明确,需要进一步设计。步骤3是整个程序的关键部分,需要通过切片技术得以实现。该步骤可继续分为以下5个步骤。

步骤3-1:创建一个空字符串jumble。

步骤3-2:若word非空则执行步骤3-3,否则执行步骤3-5。

步骤3-3:从word中随机抽取一个字母存到jumble中。

步骤3-4:利用切片技术把已经抽取出的那个字母从word中删除,返回步骤3-2。

步骤3-5:结束步骤3。

上面的5个步骤中,步骤3-3需要进一步设计。该步骤可继续分解为以下两个步骤:

步骤3-3-1:生成一个word长度范围内的随机整数存到position中。

步骤3-3-2:把position位置的那个字母word[position]存到jumble中。

鉴于篇幅的限制,有关步骤5的分解此处不作介绍,大家可以参照图2给出的整个算法完整的流程图自己独立完成分解。由于切片技术是解决问题的关键所在,此处给出切片实现的具体代码如下。

word = word[:position] + word[(position+1):]

4.3 猜词游戏的运行效果

猜词游戏在Python3.2开发环境中完成编码和调试,运行效果如图3~图5所示。

图3 程序启动初始画面

图4 猜错时程序的运行画面

图5 猜对时程序结束运行的画面

5 结 语

猜词游戏的实现过程和运行效果证明切片技术对算法优化、精简代码和提高运行效率作用明显。本文重点讨论的是利用字符串切片技术解决猜词游戏算法的设计和实现,使用的纯字符界面风格,单词表也是内置在程序中,玩家无法干预,在一定程度上影响了游戏的趣味性以及玩家的参与度和沉浸感,可以利用Python的GUI库,文件操作和数据库技术继续完善。

[1] 嵩天, 黄天羽, 礼欣. Python语言: 程序设计课程教学改革的理想选择[J].中国大学教学, 2016(2): 42-47.

[2] 杨佩璐, 宋强. Python宝典[M]. 北京: 电子工业出版社, 2014.

[3] 管华. 对当今Python快速发展的研究与展望[J]. 信息系统工程, 2015(12): 114-116.

[4] 称王. Python就业前景分析[EB/OL]. (2015-03-20)[2017-07-31]. http://forum.maiziedu.com/thread-696-1-1.html.

[5] 玩蛇网. Python 字符串是什么及简单操作方法[EB/OL]. (2016-01-21)[2017-07-31]. http://www.iplaypy.com/jichu/str.html.

[6] Hetland M L. Python基础教程[M]. 北京: 人民邮电出版社, 2010.

[7] Punch W F, Enbody R. Python入门经典[M]. 张敏, 等译. 北京: 机械工业出版社, 2012.

[8] Barry P. 深入浅出Python[M]. 南京: 东南大学出版社, 2011.

[9] Dawson M. Python编程初学者指南[M]. 北京: 人民邮电出版社, 2014.

[10] 吴萍, 朱晴婷, 蒲鹏, 等. 算法与程序设计基础(Python版)[M]. 北京: 清华大学出版社,2015.

1672-5913(2017)11-0111-04

G642

辽宁省2017年度大学生创新训练项目(201713198000004)。

葛日波,男,教授,研究方向为算法理论与应用研究,ececity@dlut.edu.cn

(编辑:彭远红)

猜你喜欢
数据项元组数据类型
Python核心语法
QJoin:质量驱动的乱序数据流连接处理技术*
如何理解数据结构中的抽象数据类型
一种多功能抽签选择器软件系统设计与实现
非完整数据库Skyline-join查询*
基于Python的Asterix Cat 021数据格式解析分析与实现
海量数据上有效的top-kSkyline查询算法*
基于减少检索的负表约束优化算法
基于SeisBase模型的地震勘探成果数据管理系统设计
线上众筹产品的特征分析与研究