5.2 设计简单程序-课件-2025-2026学年中职《信息技术(基础模块)》下册第二版(电工版)

资源下载
  1. 二一教育资源

5.2 设计简单程序-课件-2025-2026学年中职《信息技术(基础模块)》下册第二版(电工版)

资源简介

(共85张PPT)
信息技术(基础模块)
程序设计入门
任务2 设计简单程序
第5章
第5章 程序设计入门
目 录
Contents
5.2.1 了解程序设计语言的基础知识
5.2.2 编辑、运行和调试简单程序
5.2.3 了解典型算法
5.2.4 使用功能库扩展程序功能
第5 章 程序设计入门
│ 设计简单程序
设计程序是将解决问题的方案付诸实践的过程。而了解程序设计语言的基础知识是需要迈出的第一步,因为程序设计语言是我们与计算机进行沟通的重要工具。接下来,将学习如何编写、运行和调试简单程序,并了解典型算法和功能库的使用方法,编写程序来解决实际问题。在这个过程中,将不断体会运用程序设计解决问题的过程和方法,体会程序设计的理念。
第5章 程序设计入门
任务情景
临近节日,小华发现很多商店都在打折,促销活动吸引了很多的顾客去购买商品。小华心想:虽然打折活动让每个商品的价格降低了,但是销售量也增多了,那么商家最后获得的利润是比平时更高了还是更低了呢?如果他将来也开一家店,到了打折季的时候,为了获得最高的利润,怎么决定打几折呢?怀着这些疑问,小华找到了堂兄。
第5章 程序设计入门
任务分析
堂兄听了小华的疑问,说:“打折和给商品定价可是一门学问啊,根据对消费者消费心理等情况的了解,可以编写程序来计算打几折可以获得最高利润,还能够预测打折活动带来的具体利润呢。”
学习程序设计语言是与计算机进行沟通的基础,本节以Python语言作为编程工具,学习如何创建并运行程序,了解程序设计语言的基础知识,并设计程序来帮助小华解决打折问题。
第5章 程序设计入门
5.2.1 了解程序设计语言的基础知识
1.Python开发环境IDLE
从Python的官网上下载并安装了Python之后,同时也就安装了IDLE(集成开发环境)—Python的官方标准开发环境。
IDLE集成了整个代码编辑时要用的东西,包括交互式Shell和编辑器。其中,交互式Shell相当于一个简化的编辑器,当只需要编写一些小的验证性代码,可以在Shell中编写代码并执行;但如果需要编写完整的Python程序,或者需要将代码保存并希望能够反复运行,就要使用编辑器了。
第5章 程序设计入门
2.程序设计
计算机是一个没有生命的机器,是一个不知道自己该做什么、但却十分愿意服从命令的机器。手机如果没有“程序”,就是一堆没有用的零件,我们无法用它通话、上网和玩游戏。程序设计(Program Design)就是将问题解决的方法步骤编写成计算机可执行的程序的过程。简单来说,就是告诉计算机要做什么,并且每一个行为的细节和顺序都要说清楚、可执行。这样,计算机就能够很快速地、正确地完成所有“指令”,最终解决问题或完成任务。
第5章 程序设计入门
(1)在Shell中输入并运行Python指令。
在Windows操作系统左下角的搜索框中,输入“IDLE”,找到IDLE应用程序,单击即可启动,出现Python的交互式Shell窗口,如图所示。
在“>>>”提示符后面,输入一条Python指令,回车,Python将执行该指令,并在下一行显示该指令执行的结果。指令执行完成后,将在下一行出现一个新的“>>>”提示符,等待下一条指令的输入。
第5章 程序设计入门
例如,在>>>后输入一行Python语句:print('Hello world!'),并按下【Enter】键,Python将在下一行打印输出:“Hello world!”。
注意:代码中所有字符均为英文字符,包括引号和括号。并且,print()语句的前面没有空格,如果有多余的空格,Python执行指令时会报错,红色的SyntaxError是报告的错误类型。
Python语言以缩进控制语句的级别,就像编写文档时设置大纲级别为1级、2级、3级。在Python中,有相同缩进的一组连续语句属于同一逻辑层级的语句,在每行语句开头的空格或制表符就是缩进,通常用4个空格或1个制表符表示一个缩进。因此,在编写Python程序中,要严格控制每行语句开头的缩进。
第5章 程序设计入门
(2)在IDLE中创建并运行Python程序。
在IDLE的交互式Shell中,虽然能方便快速地执行Python指令,但每次只能输入一行代码、执行一条指令,不能连续执行多条指令。因此,我们需要一个新的方式来执行一连串的Python指令—程序。
① 第一步:创建程序。
启动IDLE,单击File→New File,弹出IDLE的文件编辑器窗口。接着,请在编辑器窗口中输入3行Python语句。
第5章 程序设计入门
② 第二步:保存程序。
按【Ctrl+S】组合键或者单击File→Save as保存源代码文件,弹出另存为窗口,在文件名文本框中输入文件名,如“hello”,保存类型选择Python files,然后单击保存按钮。保存成功后,即可在保存的地方找到刚刚创建的Python程序文件hello.py。
Python程序文件也叫Python可执行文件,它能够存储多条Python指令序列,是一个后缀名为.py的文件,运行它时,其中的指令可以被连续执行。
第5章 程序设计入门
③ 第三步:运行程序。
单击Python编辑器菜单栏的Run→Run Module或者按【F5】快捷键即可运行程序,界面如图所示。
运行之后,将首先在IDLE的Shell面板输出一行文字“Hello,你叫什么名字?”,然后在第二行输出“我叫:”,同时光标闪烁,等待用户输入。此时,小华通过键盘输入了他的名字“小华”,并按下【Enter】键,之后,程序继续在第三行输出:“小华,很高兴认识你!”。
第5章 程序设计入门
④ 第四步:再次打开保存的程序。
将一连串程序指令保存成一个Python程序文件,不仅可以让其中的指令连续执行,还可以将其保存,当下次需要其进行查看、编辑和修改时,再次打开保存的程序即可,打开程序的方式有以下两种:
方式一:从IDLE中打开保存的程序文件。单击File→Open,在所出现的窗口中选择文件,并且单击打开按钮。刚刚保存的hello.py程序将会在文件编辑窗口中打开。
方式二:直接打开程序文件。找到要弹出的Python程序文件并单击鼠标右键选择Edit with IDLE。
第5章 程序设计入门
3.数据类型和表达式
在程序设计中,将现实生活中的问题转化成计算机能够处理的形式是利用计算机解决问题的关键步骤,而数据和表达式就是对问题进行重新表述的关键。
(1)数据类型。
数据是对信息的刻画,不同的数据类型可以表达不同的信息。在Python中,常见的数据类型见表。
数 据 类 型 描 述
整数型 数学中的整数,包括正整数、负整数和0。如1,-21,0等
浮点型 数学中的小数,小数点是它的标志。如3.14,-2.0等
字符串型 用单引号、双引号或三引号表示。如'a'、"Hello",'''你好!'''等
布尔型 只有两种值:True和False,分别表示逻辑的“真”和“假”
第5章 程序设计入门
① 数据类型的转化。
不同的数据类型之间存在差异,不能进行相互运算。因此,必要的时候,需要对数据类型进行转化。在Python中,内置函数str()、int()、float()可以分别将数据转化成字符串型、整数型和浮点型,其作用及示例见表。
转 化 函 数 作 用 示 例
str() 转化成字符串 str(123) 转化结果:'123'
int() 将数字或长得像整数的字符串转化成整数 int(1.5) 转化结果:1int('100') 转化结果:100int('1.5') 转化失败!!
float() 将数字或长得像浮点数的字符串转化成浮点数 float(2) 转化结果:2.0float('2.5') 转化结果:2.5float('hello') 转化失败!!
第5章 程序设计入门
例如,字符串和字符串之间可以通过“+”连接运算符,将两个字符串连接成一个字符串:
>>> 'Hello ' + '2021'
'Hello 2021'
数字和数字之间也可以通过加法运算符“+”计算两个数字的和:
>>> 10 + 2021
2031
但字符串和数字之间却不可以进行“+”加法运算,在下面的反例中,可以从TypeError看出错误的原因:
>>> 'Hello ' + 2021
Traceback (most recent call last):
File "", line 1, in
'Hello ' + 2021
TypeError: can only concatenate str (not "int") to str
>>> '10' + 2021
Traceback (most recent call last):
File "", line 1, in
'10' + 2021
TypeError: can only concatenate str (not "int") to str
第5章 程序设计入门
这时,我们可以根据需要对数据类型进行转化:
>>> 'Hello ' + str(2021)
'Hello 2021'
>>> int('10') + 2021
2031
第5章 程序设计入门
② 组合数据类型。
除了以上几种常见的数据类型,还有一种组合数据类型,可以将一组数据统一存储和管理,以便于程序对一组数据进行批量处理。例如,遍历一组水果的英文单词、找到运动会报名了跑步和跳远的同学、登记一个学生的各项信息……Python中,字符串实际上也是一种组合数据类型,每个字符都是它的元素。除此之外,常见的组合数据类型见表。
组合数据类型 描 述
列表 用方括号[]创建,其中的元素有序存放,索引号从0开始,且可修改、增添、删除元素。如[1,1,3],['apple','banana']等
元组 用小括号()创建,其中的元素有序存放,索引号从0开始,不可修改、增添、删除元素。如(1,1,3),('apple','banana')等
集合 用花括号{}创建,其中的元素无序存放,无索引号,但不能重复。如{1,2,3},{'小华','大华','天歌'},{'小华','清波'}
字典 用花括号{}创建,其中每个元素都是一个键值对(key=>value),具有映射关系,无序存放,可通过键获取对应的值。如{'name':'小华', 'age':15}
第5章 程序设计入门
例如,将一组水果单词存放在fruit列表中,表示用户喜欢的水果。开始用户将第一喜欢的水果变成了桃子(peach),接着用户又新增了一个喜欢的水果草莓(strawberry),最后用户又不喜欢梨(pear)了。用程序表示这个过程:
第5章 程序设计入门
(2)表达式。
计算机不仅能进行数学运算,还能进行逻辑运算,对应的Python中表达式也有算术表达式和逻辑表达式。
① 算术表达式。
在Python中,“算术表达式”就是数学中的“算式”,1+2、2-5都是算术表达式。它由算术运算符和操作数组成,例如,1+2中,1和2都是操作数,“+”是算术运算符。
算术表达式的值。
算术表达式的值就是算式的计算结果,比如:算术表达式1+2的值是3。另外,单个数字也可以看作一个特殊的算术表达式,其值就是这个数本身。在Python的交互式Shell中输入一个算术表达式,按【Enter】键后即可得到该算术表达式的值。例如,计算表达式1+2的值:
>>> 1+2
3
第5章 程序设计入门
除了“+”,Python中还有其他一些常用的算术运算符。
算术运算符 算术表达式示例 描 述 值
+ 1+2 1加2 3
- 1-2 1减2 -1
* 1*2 1乘以2 2
/ 10/4 10除以4 2.5
// 10//4 10整除4(10除以4,取商的整数部分) 2
% 10%4 10除以4,取余数 2
第5章 程序设计入门
② 逻辑表达式。
算术表达式用以表达数字之间的计算,逻辑表达式则通常用以表达对象之间的关系,例如大小关系、包含关系等。
逻辑表达式的值。
逻辑表达式的值只有两种,分别是True和False,表示这个逻辑是否成立,即表示这件事情的真和假。通常用逻辑表达式进行逻辑判断,若逻辑成立,则逻辑值为True;否则,逻辑值为False。在Python的交互式Shell中输入一个逻辑表达式,按【Enter】键后可得到该逻辑表达式的值。例如,1>2是一个“假”命题,因此逻辑表达式1>2的值为False:
>>> 1>2
False
第5章 程序设计入门
Python关系运算符。
除了表示“大于”的关系运算符“>”,Python中还有其他一些常用的关系运算符,见表。
关系运算符 逻辑表达式示例 描 述 值
> 1>2 1大于2 False
< 1<2 1小于2 True
== 1==2 1等于2 False
>= 1>=2 1大于等于2 False
<= 1<=2 1小于等于2 True
!= 1!=2 1不等于2 True
in 'e' in 'hello' 字符串'e'包含在字符串'hello'中 True
第5章 程序设计入门
Python逻辑运算符。
对于一些更复杂的逻辑,例如“并且”“或”“非”这样的复合逻辑,可以用逻辑运算符来表达。在Python中,逻辑运算符为and(并且)、or(或)、not(非)。
在复合逻辑中,表达式的值是True或False,不仅取决于表达式中各个条件的真假,还取决于连接这些条件的逻辑运算符是什么,具体分析见表。
A和B均为True A为True,B为False A为False,B为True A和B均为False
A and B True False False False
A or B True True True False
not A False False True True
第5章 程序设计入门
当条件A和条件B同时满足,表达式“A and B”的值为True;当条件A和条件B中有一个条件不满足,表达式“A and B”的值为False。例如,10<20<30是一个复合逻辑:10<20且20<30,由于10<20和20<30都成立,因此10<20<30的逻辑值为True:
>>> 10<20 and 20<30
True
第5章 程序设计入门
4.变量和赋值
在Python程序中,为了让计算机“记住”某个信息,可以通过创建“变量”,将信息保存在计算机里一个负责“记忆”的地方—内存。
(1)变量:对象的名字。
变量指向内存中某个数据对象存储的位置,我们可以把变量看作对象的名字或代号。例如,在hello.py程序中,将用户输入的名字信息存储在了变量name中,变量name就代表着用户输入的名字。
>name = input('我叫:')
第5章 程序设计入门
变量命名规则一般有以下4条:
① 变量名必须以字母或下画线“_”开头;
② 变量名中其他字符必须是字母、数字或者下画线“_”,这意味着一个名字中不能用空格(例如:my name就不是一个合法的变量名,因为中间有空格);
③ 变量名区分大小写,abc和ABC是两个不同的变量;
④ 变量不能与Python的关键字、内置函数名、内置模块名等重名,如不可给变量取名为int、print等。
通常,一个有意义的名字会比一个没有意义的名字更受青睐。当变量名字的含义较复杂时,常采用驼峰命名法和下画线命名法进行命名。
例如,变量名userName、printNum采用的是驼峰命名法,变量名user_name、print_num采用的是下画线命名法。
第5章 程序设计入门
(2)赋值:创建变量的过程。
“赋值”是创建变量的过程,当需要程序记住某个信息(或对象)的时候,就在内存中开辟一块地方,把这个对象放在里面,同时,给这个对象取一个名字,并让这个名字指向对象所在的位置。在Python中,一个变量只有被赋予了一个具体的值才会被创建,即只有变量名和内存中的某个对象建立起联系后才算赋值成功。
在Python中,赋值操作是通过赋值操作符“=”来完成的。这里的“=”不是数学上的“等于”,而是一个赋值符,其作用是把右边的内容赋值给左边的变量,使对象和变量名建立起对应联系。
例如,name = "小华",将字符串"小华"赋给了变量name,name将指向内存中字符串"小华 "存储的位置,字符串"小华"就是变量name的值,如图所示。当然,如果用户输入了其他内容,name将被赋为其他值,并指向对应对象所在的存储位置。
第5章 程序设计入门
(3)变量类型。
在Python中,变量可以被赋予为不同类型的值,而被赋予了不同类型值的变量,是不同类型的变量。例如,在下面的程序中,变量name的值是字符串' 小华',因此变量name是字符串变量;变量age的值是整数15,因此变量age是整数变量。
name = '小华'
age = 15
第5章 程序设计入门
(4)访问变量的值。
赋值操作完成之后,变量就代表内存中存储的该数据对象,因此,可以通过变量名来访问具体的值。例如,在hello.py的第3行代码中,通过变量name输出用户的名字。
在程序中,变量的值可以改变。当一个变量被赋予了一个新值,它就会指向新值所在的位置。例如,创建变量score来记录玩家得分,初始化score为0,每次游戏获胜时,score被重新赋值为score+1,程序将先计算出右边score+1的和为1,然后将score变量指向内存中存储数字1的地方,而不再指向内存中存储数字0的地方,如图所示。
print('Hello,你叫什么名字?')
name = input('我叫:')
print(name + ',很高兴认识你!')
第5章 程序设计入门
5.函数和模块
在Python中,函数和模块都可以看作Python的“工具”,它们让程序设计变得更加简单和方便。
(1)函数。
① 函数的概念。
在hello.py程序中,print()和input()都是Python的函数,分别用于打印输出和键盘输入。函数是将一系列复杂的操作或一系列连续的指令打包,“封装”成一条指令,这样,在程序的其他地方,就可以根据需要随时调用这条函数指令。就像我们去餐厅吃饭,顾客只需要“点菜”,厨师就会做出美味佳肴,而顾客自己不需要亲自去执行做菜的每个步骤。
要在屏幕上打印出一行文本,计算机其实需要进行很多复杂的操作,但是由于这是一个很常用的功能,因此Python的设计者便将所有用于打印输出的底层指令“封装”起来,并将其命名为print,这样,我们只需调用一条指令—print(),就能自动调用函数中被封装的底层代码了,如图所示为调用函数示意图。
第5章 程序设计入门
② 函数参数。
为了让函数的使用更具有灵活性,我们可以向函数传递参数。函数的参数就像做菜时加的调料,加入不同的调料,就会烹饪出不一样的味道。在数学课上,f(x)=x+1也是一个函数,x的值不同,得到的f(x)就不同。
比如,print()函数是一个带参数的函数,其功能是打印输出一行文本并自动换行,括号里的参数可以为空,也可以是一个文本或一个数字,表示要打印输出的内容。
第5章 程序设计入门
③ 函数的返回值。
没有返回值的函数
没有返回值的函数只需完成一个或多个操作,完成操作后不必向调用它的地方返回任何数据。例如,print()函数是一个没有返回值的函数,它只需要完成“输出”操作即可。
有返回值的函数
有返回值的函数执行完成一系列操作后,会将函数的执行结果返回到调用它的地方。例如,input()函数是一个有返回值的函数,它在获取到用户输入的数据之后,会将输入内容以字符串形式返回到调用它的地方。因此,有返回值的函数也可以被看作是一个数据对象,可以在程序中进行赋值和运算操作。在hello.py程序中,第二行代码就是将用户输入的“名字”赋给name变量。
name = input("我叫:")
第5章 程序设计入门
④ 自定义函数。
print()、int()等是Python的设计者已经定义好的函数,称为“内置函数”。在Python中,也可以根据需要自己定义函数,并在程序中调用它们,自己定义的函数是“自定义函数”。
def是函数定义的关键字,取自英文单词definition(定义);
函数定义时需指明函数的名字,好比为一道菜取一个名字;
括号中可以设置函数的参数,多个参数用逗号“,”隔开;
冒号“:”表示即将开始定义函数内部的语句;
封装在函数里的代码有相同的缩进,表示它们属于这个函数,是同一个语句块。语句块是具有相同缩进的一组连续语句。在Python中,用“:”标志一个语句块的开始,在其他程序设计语言中,使用特殊单词(如Begin和End)或字符(如“{”和“}”)标志一个语句块的开始和结束。
def 函数名(参数1,参数2……):
语句1
语句2
……
第5章 程序设计入门
函数调用
和调用Python的内置函数一样,自定义函数也通过函数名和括号来调用,函数名需与函数定义时的函数名保持一致。如果定义了参数,可以在调用时传入参数。
函数名(参数1,参数2,……)
第5章 程序设计入门
例如,自定义一个“做牛肉面”的函数makeNoodles(),并设置辣度参数spicy,然后调用该函数,传入辣度选项为“特辣”,输出做一碗“特辣”牛肉面的步骤。
运行输出:
运行输出:
开始制作牛肉面
烧水
煮面
配味:特辣
加汤
加牛肉
牛肉面做好了!
第5章 程序设计入门
上面的程序中,如果只定义makeNoodles()函数而不调用它,即没有第9行代码,程序还会执行函数里的内容,将做牛肉面的步骤打印出来吗?为什么?
“函数定义”只是教会了厨师做面的方法,“函数调用”才是下达“做面”指令,因此,若程序定义了函数而没有调用函数,函数里的代码也不会被执行。另外,由于程序是从上到下执行的,当它看到函数定义时,才会将其记录下来,完成函数定义的“注册”。因此,Python中的函数定义必须放在函数调用之前,就像让厨师做面之前,得先教会厨师怎么做面。
第5章 程序设计入门
⑤ 函数的妙用
避免代码冗余
函数是对代码的一种封装,我们只需要在函数中写一次代码,就可以对这些代码进行重复利用,非常方便。例如,在noodles.py中,将做面的步骤封装到makeNoodles()函数中,之后每次需要“做面”时,只需调用函数,就可以执行所有“做面”的步骤。
方便程序修改
当代码需要修改时,只需在函数中修改一次,而不用在每一个需要做这件事的地方修改代码。例如,当“做面”的步骤发生更改,或者增加了面的一些规格选项,如酸度、是否加香菜等,只需要在函数定义中修改一次即可。如果不使用函数,则要对每一次“做面”的程序进行修改。
第5章 程序设计入门
实现模块化编程
函数将多行代码封装成一行语句,通过函数名能很容易地知道程序在做什么,增加程序的可读性。在更复杂的程序中,可将任务分解为几个子任务,若我们将每个子任务的实现代码封装成函数,将每个子任务看作一个“模块”,则可实现模块化编程。当程序有问题时,我们只需关注是哪个模块出现了问题,再进行深入排查,而不必在整个程序中进行“大海捞针”般的工作。
在设计较复杂的程序时,一般采用自上而下的方法,将问题划分为几个部分,各个部分再进行细化,直到分解为较好解决的问题为止。模块化编程,简单地说就是程序的编写不是一开始就逐条录入计算机语句和指令,而是首先用主程序、子程序(函数定义中的代码是子程序,函数调用的代码是主程序)等框架把程序的主要结构和流程描述出来,并定义好各个框架之间的输入输出关系。
就像“搭积木”一样,一块积木就是负责一个功能的小程序块,模块化编程就是将这些积木有组织地搭建起来。模块化的目的是降低程序的复杂度,使程序设计、调试和维护等操作简单化。
事实上,我们也常常用“模块化”的思想解决生活中或学习中的问题。比如我们会将自己的生活安排分为学习模块、锻炼模块、休息模块等,在不同模块中再进行不同的安排。模块化,能提高我们的学习和工作的效率。
第5章 程序设计入门
(2)模块。
① 模块是什么?
在本章最开始的“抛硬币”问题中,random随机数模块就是Python中的一个模块。模块的本质是一个Python可执行文件,里面有许多已经定义好的功能相似的函数、变量、类及一些可执行代码。模块就好比一个工具箱,里面装着各种各样的工具,可供我们使用。例如,random模块这个“工具箱”里有很多与随机数相关的“工具”,randint(a,b)函数就是其中一个“工具”,用于获取a~b之间的一个随机整数。
random模块是Python自带的一个模块,称为Python的内置模块。除此之外,我们也可以自己设计模块,称为自定义模块;由其他程序员设计好的模块,则称为第三方模块,或第三方功能库。
第5章 程序设计入门
② 模块的分类
内置模块
Python内部早已设定好模块,可直接导入使用。如random模块(随机数“工具箱”)、time模块(时间“工具箱”)、math模块(数学“工具箱”)、tkinter模块(图形界面开发“工具箱”)等。
自定义模块
由编程者自己设计的.py文件作为模块。
第三方模块
其他程序员设计的并开放给大家使用的模块,需先下载至本地或通过网络连接该模块,再导入使用。如matplotlib绘图模块、pandas数据分析模块等。
第5章 程序设计入门
③ 模块的使用
模块是一个“工具箱”,因此,要使用模块中的“工具”,必须先把“工具箱”买回来。在Python程序中,使用模块之前应先将模块导入到程序中。
第一步:导入模块。
将模块导入到程序中,其目的是将模块中的程序代码导入到自己的程序中。在Python中,通过关键字import导入整个模块:
import random
第5章 程序设计入门
第二步:使用模块。
模块导入成功之后,就像是把“工具箱”买回家了,里面的“工具”自然都可以使用。将模块导入程序后,模块中的代码都可以看成是程序的代码,模块中定义好的变量、函数等代码都可以调用。
模块中函数或变量的调用方式:“模块.成员”。其中,“.”是Python中的成员访问运算符,通过“模块.成员”,程序才能知道这些函数和变量来自哪个“工具箱”,这样不仅便于模块管理,也解决了模块中的函数或变量与程序中已有的函数或变量可能重名的问题。
例如,导入random模块并调用random模块中的randint(a,b)函数。random(1,2)表示要么产生一个1,要么产生一个2:
>>> import random
>>> random.randint(1,2)
1
>>> random.randint(1,2)
2
第5章 程序设计入门
6.判断和循环
程序主要由三种结构组成,分别是顺序结构、选择结构和循环结构。在程序设计语言中,条件控制语句和循环语句让程序能够实现更加复杂的逻辑,完成更加复杂的任务。
(1)条件控制语句。
条件判断在我们的生活中无处不在,在“抛硬币”问题中:
如果抛出正面,
则正面次数+1。
用程序流程图来表示这个逻辑,如图所示。
在Python中,有一个特殊语句—条件控制语句,用于进行条件判断。条件语句就像一个岔路口,程序会首先在岔路口进行条件判断,然后根据条件判断的结果进入相应的道路,控制程序执行相应的语句。
第5章 程序设计入门
在Python中,有一个特殊语句—条件控制语句,用于进行条件判断。条件语句就像一个岔路口,程序会首先在岔路口进行条件判断,然后根据条件判断的结果进入相应的道路,控制程序执行相应的语句。
① 条件控制语句的构成。
条件控制语句由关键字、判断条件,以及子句构成。if、elif和else都是Python中的关键字,所以当输入if、elif和else时,可以看到它们的颜色为橙色(不同的编辑器颜色可能不同)。在if语句、elif语句和else语句后有一个冒号“:”标志接下来缩进的语句为其子句。
第5章 程序设计入门
条件控制语句的运行让程序不再只有一条道路可以走,它能给程序提供多个选择,并根据不同的条件让程序走向不同的道路,得出不同的结果。在程序运行时,总是先判断if语句的条件,若if语句的条件不成立,再顺次判断后面的elif条件是否成立,若所有条件都不成立,才会执行else语句中的内容。
例1:将1~10的整数分为1~5、6~10这2个区间,获取1~10的随机数,并判断随机数所属区间。流程图如图所示。
checkNumber1.py
01.import random
02.number = random.randint(1,10)
03.if number<=5:
04. print("第一区间")
05.else:
06. print("第二区间")
第5章 程序设计入门
例2:将1~10的整数分为1~3、4~6、7~10这3个区间,获取1~10的随机数,并判断随机数所属区间。流程图如图所示。
checkNumber2.py
01.import random
02.number = random.randint(1,10)
03.if number<=3:
04. print("第一区间")
05.elif number<=6:
06. print("第二区间")
07.else:
08. print("第三区间")
第5章 程序设计入门
②条件控制语句的嵌套。
像树枝从主干分了岔之后,在枝干上也可以继续分出更小的枝干一样,在复杂的条件判断中,有时需要在某个判断条件下“嵌套”新的条件判断。所谓“嵌套”,就像俄罗斯套娃一样,把一个条件控制语句嵌套在另一个条件语句块里,嵌套在里面的条件控制语句看作一个整体。在Python中,根据代码的缩进量来控制语句的嵌套层级。
第5章 程序设计入门
例3:将1~10的整数分为1~5、6~10两个区间,获取1~10的随机数,并判断随机数所属区间及其奇偶性。流程图如图所示。
第5章 程序设计入门
(2)循环语句。
① while条件循环语句。
条件循环语句由while关键字、判断条件及循环体组成,其流程图如图所示。在while语句后面,以一个冒号“:”标志其子句的开始。
第5章 程序设计入门
while是“当……时”的意思。当程序运行到while语句时,首先判断条件1是否成立,若条件1成立,则执行一次循环体(语句1→语句2→……)。循环体执行一次之后,再次判断条件1是否成立,若条件1依然成立,则再执行一次循环体,如此循环往复。直到条件1不被满足时,程序不再执行循环体,结束循环,继续执行后面的语句(语句a→语句b→……)。
在“抛硬币”问题中,抛100次硬币就是一个循环任务,循环条件为“实验次数是否达到100次?”,在开始循环之前,将实验次数cnt变量初始化为0,进入循环后,每次抛硬币cnt都自增1,因此,循环次数为100次。
tossCoin.py
01.import random
02.up_n = 0 #记录扔出正面的次数
03.total_n = 100 #代表实验总次数
t = 0 #记录实验次数
05.while cnt<100:
06. result = random.randint(0,1)
07. print(result)
08. if result==1:
09. up_n = up_n +1
t = cnt + 1
11.p = up_n/total_n
12.print('扔出正面的频率为:'+str(p))
第5章 程序设计入门
② for计数循环语句。
for循环和while循环一样,都能控制一个程序段重复连续执行多次。但for循环的循环条件比较特殊,它根据循环执行的次数来判断是否继续循环,因此for循环也称为计数循环。
for循环由关键字for、循环变量、循环序列和循环体组成,其结构如图所示。
循环序列:for循环中的“储物柜”中有序存放着一组数据。每次循环,循环序列中的数据将被依次取出,因此,循环执行的次数就是循环序列中元素的个数。序列型数据都可以作为循环序列,如range()函数、字符串、列表、元组等,其中,range()函数是Python的内置函数,它将产生一个数字序列。
第5章 程序设计入门
循环变量:for循环中的“计数员”,本质是一个变量。每次循环时,都从循环序列中取出下一个元素,并将该元素赋值给循环变量i,当序列中的元素取完时,返回False,循环结束。
循环体:for循环中的“执行者”,每次循环中被执行的语句(块)。
在“抛硬币”问题中,由于“抛硬币”的过程要执行100次,即以循环次数来作为循环的判断条件,因此,也可以用for计数循环来实现:
tossCoin.py
01.import random
02.up_n = 0 #记录扔出正面的次数
03.total_n = 100 #代表实验总次数
04.for i in range(100):
05. result = random.randint(0,1)
06. print(result)
07. if result==1:
08. up_n = up_n +1
09.p = up_n/total_n
10.print('扔出正面的频率为:'+str(p))
第5章 程序设计入门
③ while条件循环与for计数循环。
for循环和while循环都属于循环语句,它们有何共同之处?有何不同之处?其适用场景分别是怎样的?
while条件循环和for计数循环都属于循环结构,都能控制程序循环执行一段代码,且对程序的控制都依赖于条件判断,若条件满足则执行循环体,否则循环结束。
不同的是,for循环需要对序列进行遍历,且其条件判断比较特殊,为“循环序列中的元素是否被取完?”;而while循环可以对任何条件进行判断,应用更为广泛。两种循环语句的对比如图所示。
第5章 程序设计入门
7.面向对象
(1)类和对象。
类和对象的概念来源于我们的生活。例如,小C是一只猫,它喜欢吃鱼,叫声是“喵~”,会捉老鼠;小D是一只狗,它喜欢啃骨头,叫声是“汪!”,会看家。而世界上除了小C和小D,还有其他的猫和狗,并且所有的猫都有相同的属性(如喜欢吃鱼、叫声是“喵~”)和技能(如会捉老鼠),所有的狗也都有相同的属性(如喜欢啃骨头,叫声是“汪!”)和技能(如会看家)。其示意图如图所示。
第5章 程序设计入门
可以说,“猫”是一个“类”,小C是这个类中的一个“对象”或“实例”;“狗”也是一个“类”,小D是这个类中的一个“对象”或“实例”。因此,类(class)是具有相同属性和相同操作的一些对象的“模板”,对象(object)则是根据类这个模板创造出来的一个具体的“实例”。
Python中每个数据都可看作一个对象,而每个数据的类就是它所属的数据类型,不同类型的数据属于不同的类,具有不同的特征。比如,123是一个整数,它是整数这个类的一个对象,可以进行数学运算;'123'是一个字符串,它是字符串这个类的一个对象,可以进行文本操作。
第5章 程序设计入门
(2)面向对象和面向过程。
“面向对象”和“面向过程”本质都是解决问题的一种思想方法。相比之下,面向过程关注解决问题的一系列步骤;面向对象则是一种以事物为中心的思想方式,事物就是对象,具有一定的属性和方法。但在解决实际问题时,面向对象的方法也含有面向过程的思想,可以说面向过程是一种基础的方法,它考虑的是实际的实现。
举个生活中常见的例子:玩五子棋游戏。面向过程的设计思路是先分析问题的每个步骤:开始五子棋→黑子先走→黑子落子→判断输赢→白子落子→判断输赢→黑子落子→判断输赢……最终结束。将每个步骤用不同的方法来实现,这就是面向过程。
如果使用面向对象的方法来解决问题,整个五子棋便可以分为:黑方、白方、棋盘、裁判这四个对象。其中,黑方和白方负责接收两名选手的输入,并告知棋盘,棋盘负责显示当前棋局中棋子的布局情况,同时,裁判来对棋局的胜负进行判定。
第5章 程序设计入门
说一说
请结合中国空间站建造基本情况,以货运飞船为例抽象出一个飞行物类别,并用面向对象程序设计方法思考“天舟一号”“天舟二号”……“天舟九号”货运飞船与这个类别的关系。
第5章 程序设计入门
5.2.2 编辑、运行和调试简单程序
掌握了程序设计的基础知识后,小华找到堂兄,想要学习怎样设计程序来解决他还没想明白的打折问题。堂兄告诉小华,和之前的“抛硬币”问题一样,要用程序设计来解决打折问题,首先得对这个问题进行分析,然后设计相应的算法,并根据所设计的算法来编写程序。运行程序之后,还可以对问题进行进一步的反思和迁移,对程序进行优化和改进,并将解决问题的办法迁移到其他问题的解决中。这一节里,我们就来编写程序解决打折问题,体会通过程序设计解决问题的过程和方法。
第5章 程序设计入门
1.问题描述
假设,某商店出售的某件商品,成本为4.5元,售价为15元,在第一周的营业中,销售量为100个。在接下来的一周中,将进行打折活动。经过市场调查,发现商品每降价1元,顾客就会增加20%的购买意愿,这意味着商品每降价1元,销售量就可能增加20%。
若最低折扣为5折,在接下来一周的打折活动中,为让商店获得最高利润,应该打几折?
第5章 程序设计入门
2.问题分析
商品每降价1元,销售量就增加20%,根据这一市场调查结果,可以根据以下公式的计算步骤,计算出每种打折情况下活动期间的总利润:
折后价=原价×折扣×0.1
活动期间销售量=上周销售量×[1+20%×(原价-折后价)]
活动期间总利润=(折后价–成本)×下周销售量
为各个数据创建变量见表所示。
知道了活动期间每种打折情况下总利润的计算方法,接下来,只需要计算出所有打折情况下,活动期间的总利润,并找到其中总利润最高的打折方法。
数 据 变 量
原价 price
成本 cost
上周销售量 sellNum
折扣 discount
折后价 discPrice
活动期间销售量 discSellNum
活动期间总利润 discTotalProfit
第5章 程序设计入门
3.算法设计
在拍卖活动中,工作人员会先给出一个底价,然后让所有参与者在此基础上报价,每当出现比当前最高价更高的价格时就更新当前最高价……直到没有人再报出更高的价格,就以当前最高价成交。寻找最佳打折方法的过程也一样,首先创建两个变量分别存储最高利润和最高利润对应的折扣,将最高利润对应的折扣初始化为10,表示不打折,最高利润初始化为不打折时的一周利润。然后从5折开始递增折扣,依次计算每种打折方式下的总利润。如果某种折扣方式下,总利润比最高利润高,则更新最高利润和对应的折扣……直到计算并比较完所有的折扣方式下的总利润,也就找到了所有方式下的最高利润及其对应的折扣方式。将这一算法用流程图表示,如图所示。
第5章 程序设计入门
第5章 程序设计入门
可以看出,计算每种打折情况下的总利润的过程是一个循环结构,并且在每一次循环中,还嵌套了一个选择结构,用于判断是否需要更新最高利润及其对应的折扣。
接下来,就可以根据所设计的算法,编写程序来解决打折问题了,示例程序如下。
discount.py
01.price = 15
02.cost = 4.5
03.sellNum = 100
04.totalProfit = (price - cost) * sellNum
05.discOfBigProfit = 10
06.bigProfit = totalProfit
07.for discount in range(5,10):
08. newPrice = price * discount * 0.1
09. newSellNum = sellNum * (1 + 0.2 * (price - newPrice))
10. newTotalProfit = (newPrice - cost) * newSellNum
11. if newTotalProfit > bigProfit:
12. bigProfit = newTotalProfit
13. discOfBigProfit = discount
14.print('打'+ str(discOfBigProfit) + '折,预计利润最高:' + str(bigProfit) + '元。')
第5章 程序设计入门
注:第7行,range(a,b)函数是Python的内置函数,将返回一个[a,b)左闭右开的整数序列,如range(5,10)将返回数字序列5,6,7,8,9。在for循环的遍历中,循环变量discount将依次被赋值为5,6,7,8,9。这样,就能通过for循环遍历每种折扣,并计算和比较该折扣方式下的总利润了。
第5章 程序设计入门
反思与迁移
在打折问题中,商品只有1项,但如果商店有多个商品,每种商品的成本和原价都各不相同,如何计算不同打折情况下,所有商品的总利润呢?假设:商店有4种商品,每种商品的成本、原价,以及上周销售量见表5-11,请设计算法编写程序计算出商店上周营业的总利润。
商 品 成本(元) 原价(元) 上周销售量(个)
商品1 4.5 15 100
商品2 8 20 120
商品3 8.5 20 150
商品4 9 22 120
第5章 程序设计入门
最简单的办法,我们可以依次计算出4种商品的利润,然后将4种商品的利润相加。如下所示:
calProfit.py
01.price1 = 15
02.price2 = 20
03.price3 = 20
04.price4 = 22
05.cost1 = 4.5
06.cost2 = 8
07.cost3 = 8.5
08.cost4 = 9
09.sellNum1 = 100
10.sellNum2 = 120
11.sellNum3 = 150
12.sellNum4 = 120
13.totalProfit1 = (price1 – cost1) * sellNum1
14.totalProfit2 = (price2 – cost2) * sellNum2
15.totalProfit3 = (price3 – cost3) * sellNum3
16.totalProfit4 = (price4 – cost4) * sellNum4
17.totalProfit = totalProfit1 + totalProfit2 + totalProfit3 + totalProfit4
18.print('上一周总利润为:' + str(totalProfit))
第5章 程序设计入门
可以看出,这种方法虽然比较直观,但是当商品数量更多时,代码会很长,不利于进行程序的编写和维护。因此,不妨将每种商品的各项信息都存储在列表里,使信息的表达和处理都更加方便。示例程序如下:
注:第5行中,range(4)是range(0,4)的简写,将返回一个长度为4的整数序列0,1,2,3。第5~7行,将循环4次,每次循环中,用oneProfit变量存储单个商品的利润,并将单个商品的利润叠加到总利润中(见第7行)。这样,当循环结束时,totalProfit的值就是所有商品的总利润。
calProfit.py
01.prices = [15, 20, 20, 22]
02.costs = [4.5, 8, 8.5, 9]
03.sellNums = [100, 120, 150, 120]
04.totalProfit = 0
05.for i in range(4):
06. oneProfit = (prices[i] - costs[i]) * sellNums[i]
07. totalProfit = totalProfit + oneProfit
08.print('上一周总利润为:' + str(totalProfit))
第5章 程序设计入门
说一说
在程序调试运行过程中,如何体现锲而不舍、精益求精的工匠精神?
第5章 程序设计入门
5.2.3 了解典型算法
1.枚举算法
在解决打折问题的时候,我们实际上对每种打折方式进行了遍历,即计算了每种打折方式下的总利润,并判断该利润是否是最高利润。像这样将所有可能的情况遍历的方法,就是枚举,枚举算法是解决问题的一种典型算法,举例如下:
【例1】要将100元兑换成10元或者5元的币值,共有哪些兑换方式?
【例2】一个两位数密码,每一位数可以取0~9的任意数字,如何找到真正的密码?
【例3】田忌赛马问题中,让三个不同等级的马以什么顺序出场有可能获胜?
【例4】到达目的地有多条路径,哪条路径用时最短?
……
适用情况:研究对象可数且有范围,最优解可从该范围中逐一列举检验得到。
枚举算法的基本结构:确定范围—列举—检验。
第5章 程序设计入门
2.二分查找法
二分查找法也称折半查找,通常用于从一组有序数据中查找目标数据,利用二分查找法可以提高查找的效率。二分查找法的基本思路和玩猜数游戏的思路类似:假设要猜测的数字是0~100的一个数,最好的办法就是从0~100的中间数50开始猜,若目标数字小于50,就猜0~50中间的数字25;若目标数字大于50,就猜50~100中间的数字75;若目标数字刚好是50,结束猜数。重复此过程,不断缩小目标数字的范围,直到猜出正确的数字。猜数游戏示意图所示。
第5章 程序设计入门
二分查找法的基本思路与此类似,用程序流程图表示该算法,如图所示。
第5章 程序设计入门
说一说
枚举法在生活中的运用。
第5章 程序设计入门
5.2.4 使用功能库扩展程序功能
1.拓展任务描述
请设计程序,让用户输入商店一周中每一天的销售量,并绘制柱状图分析商店一周内的销售情况。
2.问题分析和算法设计
通过input()函数可以获取用户的输入,对于一周七天的输入,可以通过for循环实现七天销售量的连续输入。
而要绘制一周销售量的柱状图,可以通过Python的第三方功能库matplotlib(2D绘图功能库,非常适合绘图)来实现,周一到周日作为柱状图的横轴数据,每天的销售量作为柱状图的纵轴数据。
第5章 程序设计入门
3.借助AI大模型工具辅助编程
随着AI大模型技术的不断发展,如今生成式人工智能已经能够实现代码生成、代码修改、代码优化等功能。当我们遇到一个可以用计算机程序设计来解决的问题时,也可以尝试用AI大模型工具来辅助编程,提高我们的工作效率。
打开DeepSeek深度求索大模型工具,在对话框中输入我们的任务需求,并且告诉AI编写一段Python代码来实现这一功能。发送需求之后,AI就会根据我们的需求生成相应的代码,如图所示。
第5章 程序设计入门
从AI给出的代码中可以看到,实现绘图功能需要用到Python的第三方功能库matplotlib,需要先安装这个库才能运行代码。关于如何安装Python的第三方库,可以查阅下一小节的内容。
完成第三方库的安装之后,将AI生成的代码复制粘贴到IDLE编辑器中,保存代码并运行,逐个输入每一天的销售量,将绘制出如图所示的柱状图。
第5章 程序设计入门
AI第一次生成的代码绘制出的柱状图并不能显示出中文字符。为了更直观地看到销售情况,我们可以继续向AI追问,让它修改代码,如图所示。使绘制出的柱状图能够显示中文。
第5章 程序设计入门
将AI修改后的代码重新复制粘贴到IDLE编辑器中,保存并运行代码。当我们再次输入每一天的销售量时得到的柱状图就能够显示出中文字符了,如图所示。
第5章 程序设计入门
4.matplotlib第三方功能库的安装和使用
(1)安装第三方功能库。
第三方功能库和内置模块不同,需要通过pip命令联网下载安装。搜索“cmd”,打开“命令提示符”窗口,如图所示。
接下来,将路径定位到Python文件夹下的Scripts文件夹下,例如,若Python安装在E盘下的“software”文件夹下,则首先在cmd命令窗口中将路径定位到“E:\software\Python3\ Scripts”。接着,输入pip安装命令“pip install 库名”,按回车键后即可开始进行第三方功能库的下载安装,直到提示“Successfully installed matplotlib-3.4.2”,表示安装成功。如图所示。
第5章 程序设计入门
(2)使用matplotlib第三方功能库绘制柱状图。
Python第三方功能库的使用和内置模块一样,需要先将其导入程序中。通常,习惯在导入matplotlib功能库时为其取别名为mpl。另外,matplotlib库中包含多个子库用于不同的图形绘制,其中的pyplot子库是用于绘制柱状图的功能库,通常习惯为pyplot取别名为plt。
在绘制柱状图时,只需调用pyplot功能库中的bar()函数,并传入两个列表参数,分别作为柱状图的横轴和纵轴数据。例如,周一到周日的销售量分别为20、30、40、30、20、60、69,下面设计程序绘制这周的销售量柱状图。绘制出的柱状图如图所示.。
第5章 程序设计入门
weekSell.py
01.import matplotlib as mpl
02.import matplotlib.pyplot as plt
03.mpl.rcParams['font.sans-serif']=['SimHei'] #用于正常显示中文标签
04.daySellNums = [20, 30, 40, 30, 20, 60, 69]
05.dayNames = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
06.#绘制柱状图
07.fig=plt.figure() #创建一个画布
08.plt.title("一周销售量") #设置柱状图的标题
09.plt.bar(dayNames, daySellNums)
10.plt.show() #让图形显示出来
第5章 程序设计入门
若需要由用户来输入每天的销售量,则初始化daySellNums列表为一个空列表,然后在for循环中获取用户输入的销售量,并将每天的销售量添加到daySellNums列表中,最后再利用matplotlib功能库绘制柱状图即可。
weekSell.py
01.import matplotlib as mpl
02.import matplotlib.pyplot as plt
03.mpl.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
04.daySellNums = []
05.dayNames = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
06.for day in dayNames:
07. daySellNum = int(input("请输入" + day + "销售量:"))
08. daySellNums.append(daySellNum)
09.#绘制柱状图
10.fig=plt.figure()
11.plt.title("一周销售量")
12.plt.bar(dayNames, daySellNums)
13.plt.show()
第5章 程序设计入门
Python的一大特点是具有丰富的功能库,从上面的例子中可以感受到,利用功能库可以实现很多复杂的功能。所以,当我们需要实现一些复杂功能时,可以先了解是否已经有相关的功能库能够实现该功能,这样将大大提高编程效率。而学会检索和学习功能库的使用方法,是利用功能库解决问题的关键。
第5章 程序设计入门
说一说
结合程序功能库的调用,谈一谈成语“他山之石,可以攻玉”蕴含的编程思想。
第3 章 图文编辑
谢谢观看

展开更多......

收起↑

资源预览