python-第2章-程序解析
计算机解决问题六步骤
1)分析问题:
针对温度转换问题,从的3 种角度对问题计算部分的不同理解会产生不同的 IPO 描述、算法和程序。我们“利用计算机解决问题”需要结合计算机技术的发展水平和人类对问题的思考程度,在特定技术和社会条件下,分析出一个问题最经济、最合理的计算部分,进而用程序实现。
2)划分边界:
明确问题的输入数据、输出数据和对数据处理的要求。
例如,温度转换程序,该功能的IPO描述是
输入:带华氏或摄氏标志的温度值,82F/28C
处理:根据温度标志选择适当的温度转换算法
输出:带摄氏或华氏标志的温度值
3)设计算法:
算法(Algorithm)是数学和计算领域的概念,指完成特定计算的一组有序操作。
在IPO模式中,确定输入和输出后,处理过程通常也称为算法。
4)编写程序:
根据IPO 描述和算法设计,编写 Python程序
5)调试测试:
保存文件,使用IDLE运行该程序。耐心寻找调试的错误点
6)升级维护:
随着问题使用场景,输入输出要求等因素的变化,程序将需要不断地维护和升级。
Python程序语法元素分析
讲解例子:温度转换
#e1.1TempConvert.py ‘保存的文件名’
TempStr= input("请输入带有符号的温度值:")
if TempStr[-1] in ['F','f']:
C=(eval(TempStr[0:-1])-32)/1.8
print("转换后的温度是{:.2f}C".format(C))
elif TempStr[-1] in ['C','c']:
F=1.8*eval(TempStr[0:-1])+32 #"82F"经eval()函数处理,变成python内部可进行数学运算的数值82
print("转换后的温度是:{:.2f}F".format(F))
else:
print("输入格式错误")
============================== RESTART: D:/1234.py =============================
请输入带有符号的温度值:82F #输入格式 数值F/C
转换后的温度是27.78C
============================== RESTART: D:/1234.py =============================
请输入带有符号的温度值:-30C
转换后的温度是:-22.00F
1)缩进
缩进是程序的格式框架
代码编写中,缩进可以用Tab键实现,也可用多个空格(4个空格)*两种方式不混用
缩进行代码在逻辑上属于之前紧邻的无缩进代码行的所属范畴
单层缩进,也可无限制“嵌套”形成多层缩进
*不是所有的代码都能通过缩进包含其他代码,eg.print()
2)注释
辅助性文字,不被计算机执行
注释方法:
单行注释,#…
多行注释,‘’‘…’‘’
*作用:辅助程序调试,将一些代码转成注释行
3)命名与保留字
命名:保证程序元素唯一性
格式要求:大写字母,小写字母,数字,下划线_和汉字等字符及其组合给变量命名,但名字首字符不能是数字,中间不能出现空格,长度没有限制。命名的名字不能和版本的保留字一样
*保留字,也称关键字,指被编程语言内部定义并保留使用的标识符
*标识符对大小写敏感
33个保留字列表:
False | def | if | raise |
---|---|---|---|
None | del | import | return |
True | elif | in | try |
and | else | is | while |
as | except | lambda | with |
assert | finally | nonlocal | yield |
break | for | not | |
class | from | or | |
continue | global | pass |
4)字符串
文本在程序中用字符串类型表示。
格式:“…零个或多个字符…” / ‘…零个或多个字符…’
两种体系:正向递增序列,字符长度为L,最左侧字符序号为0,向右依次递增,最右侧字符序号为L-1
反向递减序列,字符长度为L,最右侧字符序号为**-1**,向左依次递减,最右侧字符序号为**-L**
字符串是字符的序列,可按照单个字符或字符片段进行索引。
单个字符:TempStr[-1],表示字符串TempStr变量的最后一个字符,即d
字符片段:采用**[N;M]**格式,表字符串中从N到M(不包含M)的子字符串,可以混合使用两种体系。TempStr[0:-1],即Hello Worl
使用示例:
>>> temptri='ABC123'
>>> print(temptri[-1])
3
>>> print(temptri[0:-1])
ABC12
5)赋值语句
程序中产生或计算新数据值的代码称为表达式。
运算结果的类型由操作符或运算符决定。
=,表示赋值,即等号右侧的计算结果赋给左侧变量,含=语句为赋值语句
赋值类型:
单一赋值,即一对一
t=x
x=y
y=t #交换x和y值
同步赋值,先运算右侧的n个表达式 ,同时将表达式结果赋值给左侧n个边量
x,y=y,x
6)input()函数
无论用户在控制台输入什么内容,input()函数都以字符串类型返回。
使用方法: <变量>=input(<提示性文字>)
>>> input("请输入:") #使用input()函数
请输入:python #用户输入python
'python' #函数返回字符串类型,'python'
7)分支语句
根据判断条件选择程序执行路径
使用方法:
if <条件1>:
<语句块1>
elif <条件2>:
<语句块2>
...
else:
<语句块n>
if TempStr[-1] in ['F','f']:
,其中in是保留字,表示判断,相等返回True,否则返回False
列表,格式 [元素1,元素2,...,元素n]
8)eval()函数
eval(<字符串>)函数,能够以Python表达式的方式解析并执行字符串,字符串->Python语句
使用方法:
>>> abc = "123c"
>>> eval(abc[0:-1])
123
>>> x=1
>>> eval("x+1")
2
>>> value=eval(input("请输入要计算的数值:"))
请输入要计算的数值:2.0
>>> print(value*2)
4.0
*eval("hello")
,eval()函数会去掉两个引号,将其解释为变量,若之前没有定义过hello变量,解释器报错
*eval("'hello'")
,eval()函数会去掉两个引号,将其解释为字符串’hello’
Python支持 +,-,*,/,**(幂) ,5种基本算术运算操作
9)print()函数
格式:print(<带输出字符>)
当输出纯字符信息时,可直接将待输出内容传递给print()函数;
当输出变量值时,需采用格式输出方式,通过format()方法将待输出变量整理成期望输出的格式。
print("输入格式错误")
print("转换后的温度是{:.2f}C".format(C))
print()函数用槽格式和format()方法将变量和字符串结合到一起输出大括号*{ }表示一个槽位置**,这个括号内容由字符串后面紧跟的format()方法中的参数C填充
10)循环语句
根据判断条件确定一段程序是否再次执行一次或多次
循环语句有很多类型。
while语句,条件循环的使用方法:
while (<条件>):
<语句块1>
<语句块2>
当条件为真(True)时,执行语句块1语句(缩进表达);
当条件为假(False)时,退出循环,执行语句块2语句
11)函数
实际编程中,一般将特定功能代码编写在一个函数里,便于阅读和复用,使程序模块化更好。
使用方法:
#e1.3TempConvert.py
def tempConvert(ValueStr): #tempConvert()函数所属代码是此行后与之有缩进关系的代码,
if ValueStr[-1] in ['f','F']: #【
C=(eval(ValueStr[0:-1])-32)/1.8
print("转换后的温度是{:.2f}C".format(C))
elif ValueStr[-1] in ['C','c']:
F=1.8*eval(ValueStr[0:-1])+32
print("转换后的温度是{:.2f}F".format(F))
else:
print("输入格式错误") #】
TempStr = input("请输入带有符号的温度值:")#程序从该行开始执行
tempConvert(TempStr)
============================== RESTART: D:/1111.py =============================
请输入带有符号的温度值:34c
转换后的温度是93.20F
turtle库语法元素分析
*前提补充
1)面向对象编程(OOP)——基于对象的编程范式
对象是事物的一种抽象,它是一个实体,包含属性(对象中的变量)和方法(对象能够完成的操作)
对象 | 属性 | 方法 |
---|---|---|
O | O.a (O的属性a) | O.b() (O的操作b) |
C (汽车) | C.color (汽车的颜色) | C.forward() (汽车的前进功能) |
2)import引用函数库的两种方式
第一种(在引用较多库时代码可读性好)
import <库名>
,可以调用库名中的所有函数,使用库中函数方式,<库名>.<函数名>(<函数参数>)
第二种(只引用一个库的情况下效果更好)
from <库名> import *
,可以调用库名中的所有函数(*是通配符,表所有函数)
from <库名> import <函数名,函数名,...,函数名>
调用库中函数无需库名,方式<函数名>(函数参数)
讲解示例:蟒蛇绘制
#e2.1DrawPython.py import引用函数库的第一种方式
import turtle #用保留字import引用函数库,turtle库,用于绘制图形
turtle.setup(650,350,200,200)#<a>.<b>()形式是python编程的一种典型表达式
turtle.penup() #表调用一个对象<a>的方法<b>(),也表调用一个函数库<a>中的函数<b>()
turtle.fd(-250) #这种通过使用函数库并利用库中函数进行编程的方法称为“模块编程”
turtle.pendown()
turtle.pensize(25)
turtle.pencolor("purple")
turtle.seth (-40)
for i in range(4):
turtle.circle(40,80)
turtle.circle(-40,80)
turtle.circle(40,80/2)
turtle.fd(40)
turtle.circle(16,180)
turtle.fd(40*2/3)
'''from turtle import * import引用函数库的第二种方式
setup(650,350,200,200)
penup()
fd(-250)
pendown()
pensize(25)
pencolor("purple")
seth (-40)
for i in range(4):
circle(40,80)
circle(-40,80)
circle(40,80/2)
fd(40)
circle(16,180)
fd(40*2/3)
'''
1)绘图坐标体系
刚开始绘制时,小海龟位于画布正中央,此处坐标为(0,0),行进方向为水平右方(–>)
坐标体系图
turtle.setup(width,height,startx,starty)
参数含义图
*width和height:如果值为整数,表示像素值;如果值为小数,表窗口(宽/高)度与屏幕的比例
startx和starty:窗口左侧(顶部)和屏幕左侧(顶部)的像素距离,如果值为None,窗口位于屏幕水平(垂直)中央
2)画笔控制函数
turtle.penup()
别名:turtle.pu(),turtle.up
作用:抬起画笔,之后移动画笔不绘制形状
参数:无
turtle.pendown()
别名:turtle.pd(),turtle.down
作用:落下画笔,之后移动画笔将绘制形状
参数:无
turtle.pensize(width)
别名:turtle.width()
作用:设置画笔宽度,当无参数输入时返回当前画笔宽度
参数:width——设置的画笔线条宽度,若为None或者为空,则函数返回当前画笔宽度
turtle.pencolor(colorstring)
或:turtle.pencolor((r,g,b))
作用:设置画笔颜色,当无参数输入时返回当前画笔颜色
参数:
colorstring:表示颜色的字符串
(r,g,b):颜色对应的RGB数值
部分典型RGB颜色对照表
*RGB颜色:采用 (r,g,b)表示,其中,每个颜色采用8bit表示,取值范围是[0,225],故RGB颜色可表示(253**3)(16M,约1678万种颜色)
3)形状绘制函数
turtle.fd(distance)
别名:turtle.forward(distance)
作用:向小海龟当前方向前进distance距离
参数:distance——行进距离的像素值,当值为负数时,表反方向前进
turtle.seth(to_angle)
别名:turtle.setheading(to_angle)
作用:设置小海龟当前行进方向为to_angle,该角度是绝对方向角度值
参数:to_angle:角度的整数值
turtle的角度坐标体系图
for语句,“遍历循环”
格式:
for i in range(<循环次数>):
<语句块1>
turtle.circle(radius,extent=None)
作用 :根据半径radius绘制extent角度的弧形
参数:
radius:弧形半径,值为正数,半径在小海龟左侧;值为负,半径在小海龟右侧(正左负右)
extent:绘制弧形的角度,当不设置参数或参数设置为None时,绘制整个圆
4)函数的封装
定义drawSnake()函数,将蟒蛇绘制这个独立功能封装
#e2.3DrawPython.py
import turtle
def drawSnake(radius,angle,length):
turtle.seth(-40)
for i in range(length):
turtle.circle(radius,angle)
turtle.circle(-radius,angle)
turtle.circle(radius,angle/2)
turtle.fd(40)
turtle.circle(16,180)
turtle.fd(40*2/3)
turtle.setup(650,350,200,200)
turtle.penup()
turtle.fd(-250)
turtle.pendown()
turtle.pensize(25)
turtle.pencolor("purple")
drawSnake(40,80,4)
turtle.done()