Python气象数据处理与绘图基础
作者简介
内容简介
第1章 程序设计概述
当前社会,从大型计算服务器到台式机、笔记本电脑,再到各种智能移动设备,计算机涉及我们的生活方方面面。在此基础上的软件开发,正改变着我们的衣食住行(如购物、餐饮、商旅出行等)和学习工作的方式(思想的传递、电子图书、智能机器人等),而大气和海洋科学面对着庞大资料及对资料处理所涉及的大量数学计算,其背后都隐藏着程序的影子。本章将介绍程序设计的概念、为什么选择Python、Python的发展历史及Python的安装调试。
1.1 程序设计的基础
在学习程序语言之前,需要了解程序设计的一些基础知识,包括程序设计、算法的概念,算法的描述及程序设计的方法。
1.1.1 程序设计的概念
程序是对解决某个实际问题所采取的一系列方法和步骤的描述,从计算机的角度而言,程序是使用某种计算机能够理解并执行的语言来描述解决问题的方法和步骤。程序是人和计算机对话的语言,人通过程序下命令,由计算机完成命令,计算机再以文字、图像、声音、动画等形式向人反馈所执行命令的结果,如起床闹铃、照片美化、气象上的数值模式等。一个程序基本由两部分组成:一是描述问题中每个对象和对象之间的关系;二是描述对这些对象进行处理的规则。前者即数据结构的内容,后者则是问题求解的算法。
算法+数据结构=程序 (瑞士,尼克劳斯 沃斯教授)
程序设计反映的是利用计算机解决问题的全过程。程序仅是其中的一方面,还包括问题的分析、数学模型的建立、数据的组织方式、算法、语言的选择、程序的编译调试运行、分析产生的预期结果。
算法是对数据运算过程的描述,数据结构是指数据的组织存储方式。程序设计的实质是针对待解决的实际问题选择一种好的数据结构,并设计一个好的算法。而好的算法在很大程度上取决于描述问题的数据结构。
1.1.2 算法及流程图
1. 算法的概念
算法是指解决问题的方法和步骤。如果用计算机解决数值计算,那么科学计算中的数值积分、线性方程组求解等数学问题的计算方法就是数值计算的算法;计算机用于文字处理、图形图像处理等非数学问题,排序、分类、查找的方法就是非数值计算的算法。
例1-1 输入10个数,要求找出其中的最大数。
(1)输入一个数,将其存放在变量max中;
(2)用i来统计比较的次数,其初值设为1;
(3)若i≤9,执行第(4)步,否则执行第(8)步;
(4)输入一个数,放在x中;
(5)比较max和x中的数,若x>max,则将x的值赋给max,否则,max的值不变;
(6)i值增加1;
(7)放回到第(3)步;
(8)输出max中的数,此时max中的数就是10个数中的最大数。
由例1-1可以看出,算法是解决问题的方法和步骤的精确描述,它是由一系列基本操作组成的。因此,研究算法的目的就是研究怎样把问题的求解过程分解为一些基本的操作。算法设计好后,要注意检查其正确性和完整性,再用某种高级语言编写相应的程序。
算法具有5个特性:有穷性,算法中执行的步骤总是有限次数的,不能无止境地执行下去;确定性,算法中的每一步操作必须具有确切的含义,不能有二义性;有效性,每步操作必须是可执行的;要有数据的输入;要有结果的输出,否则没有实际意义。
程序除满足5个特性外,还有一个质量问题要考虑。设计高质量算法是设计高质量程序的基本前提。目前,评价算法质量有4个基本标准:正确性、可读性、通用性和高效率。而算法的效率可从时间和空间两方面进行度量。
2. 流程图
算法的描述除例1-1中采用的自然语言外,还有其他的描述工具:流程图、N-S图和伪代码等。
流程图也称为框图,它是使用一些集合框图、流程线和文字说明来表示各种类型的操作。一般用矩形框表示进行某种处理,用平行四边形框表示输入、输出,用菱形框表示判断,用带箭头的流程线表示操作的先后顺序。
例1-2 用流程图来描述例1-1(图1-1)。
图1-1 流程图示例
1.1.3 程序设计的方法
随着计算机技术的快速发展,对程序设计方法的研究也在不断深入。当前,良好的结构是程序的第一要求,即结构清晰、易于阅读和理解、便于验证。因此,结构化程序设计应运而生,通过在实践中不断地发展和完善,其已成为软件开发的重要方法。用这种方法设计的程序,结构清晰、易于阅读和理解、便于调试和维护。
结构化程序设计采用自顶向下、逐步求精和模块化的分析方法,从而可有效地将复杂的程序分解成许多易于控制和处理的子程序,便于开发和维护。
随着计算机性能的提升和用户图形界面的推广,应用软件的规模持续高速增长,于是面向对象的程序设计方法在软件开发领域引起了一场大的变革。
面向对象的程序设计以对象作为程序的主体。对象是数据和操作的“封装体”,封装在对象内的程序通过消息来驱动运行,对象的实现和使用是独立的。在用户界面上,消息可通过键盘或鼠标的某种操作来传递。面向对象的程序设计可用类、对象的概念直接对客观世界进行模拟,客观世界中存在的事物、事物所具有的属性、事物间的联系均可以在面向对象的程序设计语言中找到相应的实现机制。它符合人们认识事物的规律,使人机交互更加贴近自然语言。
1.2 Python语言
1.2.1 Python的诞生及发展
Python译为“蟒蛇”,其创立者为Guido van Rassum(图1-2)。目前,Python语言的拥有者是Python Software Foundation(PSF),PSF是非营利组织,致力于保护Python语言的开放、开源和发展。
图1-2 Guido van Rossum(a)和Python图标(b)
Guido希望有一种语言,这种语言既能够像C语言那样,可以全面调用计算机的功能接口,又可以像Shell那样,能够轻松地编程。ABC语言让Guido看到了希望。1989年,为了打发圣诞节假期,Guido开始写Python语言的编译/解释器。Python来自Guido所挚爱的电视剧Monty Python's Flying Circus。他希望这种新的叫作Python的语言,能实现他的理念(一种同时具备C和Shell的优势,且功能全面、易学易用、可拓展的语言)。
1991年,第一个Python编译器(同时也是解释器)诞生。它是用C语言实现的,并能够调用C语言的库(.so文件)。从一出生,Python已经具有了类(class)、函数(function)、异常处理(exception),并包括表(list)和词典(dictionary)在内的核心数据类型及以模块(module)为基础的拓展系统。
Python从一开始就特别在意可拓展性(extensibility)。Python可以在多个层次上拓展。在高层,可以引入.py文件。在底层,可以引用C语言的库。Python程序员可以快速地使用Python写.py文件并以此作为拓展模块。Python就好像是使用钢构建房一样,先规定好大的框架,而程序员可以在此框架下相当自由地拓展或更改,这一特征吸引了广大的程序员。随后的近30年,Windows的发展和Internet的流行,使计算机快速深入我们的生活和工作,因而Python也获得了更加高速的发展。
到今天,Python的框架已经确立。Python语言以对象为核心组织代码(everything is object),支持多种编程范式(multi-paradigm),采用动态类型(dynamic typing)自动进行内存回收(garbage collection)。Python支持解释运行(interpret),并能调用C语言的库进行拓展。Python有强大的标准库 (battery included)。由于标准库的体系已经稳定,所以Python的生态系统开始拓展到第三方包。这些包如Django、web.py、wxpython、NumPy、Matplotlib、PIL,这将Python升级成了物种丰富的热带雨林。
Python崇尚优美、清晰、简单,是一种优秀并广泛使用的语言。2008年,Python进入3.0时代,当前,Python3.x系类已经成为主流。与此同时,Python的性能依然值得改进,它仍然是一个发展中的语言,期待看到Python的未来。
1.2.2 为什么选择Python
当前,计算机高级语言有很多种,可将其分为两类:编译型语言(静态语言)如C、C++、Fortran、Python等;解释型语言(脚本语言)如BASIC、PHP、Python等。Python是解释编译型语言,其具有如下几方面的特点:通用语言、脚本语言、开源语言、跨平台语言、多模型语言,是目前最流行的十大计算机语言之一,且排名在不断上升;Python的语法简洁,极大地提高了生产效率;其代码的可读性高;软件开源,其传播和分享度很高;可应用领域很广(科学计算、大数据、人工智能、大型网站、图像多媒体、系统文件等)。随着Python的快速发展,其在大气和海洋的科学研究领域中的应用也越来越广泛。
1.3 Python的安装调试
运行Python程序需要相应编译/解释系统的支持。Python在Windows、Linux、Mac OS操作平台下均可安装运行。读者可在Python的官方网站获取不同操作系统下的安装包。在Windows系统平台下安装Python的方式和其他Windows程序的安装类似,依照安装向导的提示进行即可。
Python的编译环境有很多,如Python自带的集成开发环境Shell-IDLE、由JetBrains公司打造的一款集成开发环境PyChar、针对科学计算设计的多合一安装包Anaconda等。Anaconda是一款开源免费的多合一安装包,支持近千个第三方库,其中包含多个主流工具(如Orange),适合数据计算领域的开发应用。
Anaconda可以称为Python的神器,它使得各种基础库的安装、Windows下环境变量的设置都变得极其简单。到Anaconda的首页https:,依据操作平台下载Anaconda安装包。Windows平台下Anaconda的安装和其他程序的安装过程类似,根据安装向导提示进行安装即可。
Anaconda包括conda、Python及一批第三方库,可通过conda这个管理工具进行安装、更新、版本查询等操作。例如,在Windows平台下,在cmd中执行conda version可获取conda版本信息;执行conda update conda可升级conda的版本;pip install、conda install命令可以快速地在命令窗口进行库的安装;也可通过Anaconda Navigator进行相应的操作。其中编程工具为Spyder及其包含的交互式编程环境:IPython可在随后的学习使用中不断了解(图1-3)。
图1-3 Anaconda界面下的Spyder(a)和Navigator(b)操作窗口示意图
1. Python的命令运行
在Windows系统下,打开cmd.exe,在命令行输入:
>python
将直接进入python。然后在命令行提示符>>>后面输入:
>>>print('Hello World!')
可以看到,在屏幕上输出:
Hello World!