课程名称:程序设计方法学
实验1:程序设计语言工具
时间:2015年10月21日星期三,第3、4节 地点:理工楼1#208
一、实验目的
1、深入理解程序设计语言及其几种常见的编程范型;
2、激发学生对编程语言的兴趣;
3、培养学生的自学能力。
二、实验内容
学习一门新的程序设计语言(不能是已经学习过的C\C#\C++\JAVA\PASCAL),通过使用该门语言编程,解决一个实际问题。
要求:
1.实验报告中应首先详细说明待解决的问题、你所使用的语言以及选择的开发环境;
2.实验报告中应附上完整的源代码(有对应的设计图表,如流程图等请一并附上),以及在本地计算机上调试、运行该程序的截图(要求截图的结果中能体现个人的学号、姓名等信息)。
3.结合上述解题过程,简要说明该语言的特点(如其支持的编程范型及语法特性等)和你使用该语言的心得体会。(要求500字以上)
三、实验环境
硬件条件:微型计算机
操作系统:Windows 7 操作系统
开发环境:PyCharm (Python IDE 集成开发环境)
四、实验步骤和结果
(一)待解决的问题描述
输入若干学生的信息(信息包括:学生姓名、学生成绩、学生性别),然后根据学生成绩对学生进行排序,按成绩由高到低输出学生信息列表。
(二)解决该问题所用的语言
Python 语言(基于 Python 2.X 版本)
(三)选择的开发环境:
PyCharm (Python IDE 集成开发环境)
(四)解题过程的实验操作步骤
1.分析题目后所画出的程序流程图如下:
2.在集成开发环境“PyCharm”上的代码实现如下:
#-*-coding:utf-8-*- # 此语句的作用是:让py源文件里面可以有中文
class Student(object):
# 自定义一个Student类,包括学号、姓名、分数、性别等信息
def __init__(self,number, name, score, sex):
# 初始化Student,参数 number,name,score,sex
self.number = number
self.name = name
self.score = score
self.sex = sex
def __cmp__(self, other):
# 重写比较方法,根据Student类属性score进行比较
return cmp(self.score, other.score)
def show(self):
return 'number:'+self.number+'name:'+self.name+'; score:'+str(self.score)+'sex:'+self.sex def get_input(): # 获取控制台的输入
number = raw_input('Please input number : ')
if not number: # 当学号输入为空时,返回None
return (None,None,None,None )
name = raw_input('Please input name : ')
score = raw_input('Please input %s\'s score : ' % name)
sex = raw_input('Please input %s\'s sex : '% name)
if number and name and score and sex:
return (number, name,int(score),sex) # 为方便比较,将score强制转换为int型
else:
return (None, None, None, None) def main():
s_list = []
while True: # 一直循环输入【学生的学号、姓名、成绩及性别】
number, name, score, sex = get_input()
if number and name and score and sex:
s = Student(number, name, score, sex)
s_list.append(s)
else: # 当输入姓名或成绩为空时跳出循环
break
s_list.sort(reverse=True) # 对Student实体进行排序(reverse=True表示逆序排序,即从大到小排序)
print("排序列表如下所示:")
for i, s in enumerate(s_list): # 遍历已经排序的实体列表,并进行显示
print ' '.join([str(i+1), s.number, s.name, str(s.score), s.sex]) if __name__ == '__main__': # 调用主函数
main()
3.对上述代码的相关说明
(1)在代码首行输入了:#-*-coding:utf-8-*- 的原因:
py文件当中是不支持中文的,即使输入的注释是中文也不行,为了解决这个问题,就需要把文件编码类型改为UTF-8的类型,输入这个代码就可以让PY源文件里面有中文了。而且注意要写在所有代码的第一行。
(2)关于函数的定义:
①关键字def 用于告诉Python,正在定义一个新的函数。
②类中的函数名称两边有下划线(如:__init__)。这种特殊方法意味着,当创建新的对象时,该方法就会被调用,就可以把我们自己的类型变成Python的内置类型那样了,此即提高了程序的可读性。
③函数定义的参数列表中有自动的self,这样当Python 在调用某个对象中的某个方法时,会自动将该对象的引用作为该方法的第一个参数传进去,然后我们就可以在该函数中访问该对象的实例变量了(即在相应的变量上使用点运算符)。所以,关于self 的规则就意味着,当我们在定义一个方法时,除了实际需要传入的那些参数之外,还必须再多写一个。相反,当我们在调用某个方法时,实际提供的参数要比该方法定义中所需的少一个才行。最重要的一点是需要将self 放在成员变量之前。
(3)Python自带一些预定义的函数,成为内置函数(built-in),上述代码中使用raw_input 内置函数来从键盘上读取一行文本。“raw”意味着它将以字符串的形式返回用户输入的一切内容,哪怕有些内容看上去像是一个数字。如果希望用户输入一个数字,那就必须用int 或float 将得到的字符串转换为所需的类型。
(4)s_list.sort(reverse=True) 是对Student实体进行排序(reverse=True表示逆序排序,即从大到小排序;若reverse=False则表示是顺序排序,即从小到大排序)。
4.代码执行结果截图如下:
五、实验结果和讨论
通过分析问题,画出了相应的流程图,编写代码实现,调试运行代码后得到的示例结果截图如下所示:
六、总结
(一)本次实验按时按量完成。通过实验基本掌握了新的一门程序设计语言。
(二)本次实验使我深入理解了程序设计语言及其几种常见的编程范型;也、激发了我对编程语言的兴趣;而且很大程度的提升了我的自学能力。
(三)Python 语言的特点:
1.Python是一种面向对象、解释型的计算机程序设计语言。
2.Python是纯粹的*软件,源代码和解释器CPython遵循GPL(GNU General Public License)协议。
3.Python语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进。
4.Python具有丰富和强大的库。
5.Python常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起,能够跨平台使用。
6.Python三大优点:简单、功能强大、支持面向对象。
7.Python支持命令式编程、面向对象程序设计、函数式编程、面向切面编程、泛型编程多种编程范式。
(四)使用Python 语言的心得体会
Python是一种简单易学,功能强大的编程语言,它有高效率的高层数据结构,能简单而有效地实现面向对象编程。Python简洁的语法和对动态输入的支持,再加上解释性语言的本质,使得它在大多数平台上的很多领域都是一个理想的脚本语言,特别适用于快速的应用程序开发。
首先Python 语言是一门脚本语言。Python在设计上坚持了清晰划一的风格,简洁优雅,没有了大括号,没有了分号,使得Python变得非常的整洁。而且它是一门易读、易维护,可移植性非常好,可以在linux、windows、苹果等多种操作系统上运行,并且被大量用户所欢迎的、用途广泛的语言。Python的作者有意的设计限制性很强的语法,使得不好的编程习惯(例如if语句的下一行不向右缩进)都不能通过编译。这就是Python给我的有很严格的缩进规则的感觉。
其次Python 语言是一门动态语言。在命令行下面输入一个1+1,回车之后就能给个2的结果。不要编译连接等步骤,一边写代码一边就可以有结果。不过在此我更是觉得Python语言或许更适合作为一门入门语言。首先从语法上讲,Python语言比现在很多作为第一编程语言 (C/C++、Visual Basic等)要简单很多。其次,这种解释语言的机制,更能让我们这些初学者体验到学习成果,不需要了解很多东西,也能编出个小程序来,这个过程比其他语言要快和简单很多。再次,从我们自学的角度来讲,搭建Python的基础开发环境也很简单,只要安装一个十几兆的程序,就得到了一个命令行工具,一个简单的GUI的IDEL,还有其他文档等,这样就不必把时间太多用在开发工具上了,它不像学习C++等这些语言还要去逐步熟悉Visual C++等工具。此外,还有一点就是Python的学习很有弹性,我稍微学一点就能做点东西,而想要深入研究仍然有无穷的方向可以选择,因为Python的应用范围也是很广阔。
最后,Python 是强类型的。为变量指定数据类型称为“强类型”。Python有一个统一的、明确的、强大的类型系统,比Java的类型系统更强,而且Python的这种强类型是属于动态型的强类型。
真正的学习其实是在自己写应用脚本或程序的时候,在写的时候肯定会有不明白的东西,这就需要去网上查资料,一来二去就明白了。学习Python语言的过程中查阅了不少线上线下的资料,遇到不会的东西,通过自己先查资料自己解决,这样印象深刻,渐渐总结经验,提高编程可复用性。