2.Python程序实例解析
1.实例1:温度转换
#TempConvert 温度转化
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
print("转化后的温度为{:.2f}F".format(F))
else:
print("输入格式错误")
#Python 中正向字符数组下标为0-length-1反方向为-1--(lengyh-1)
#反方向从字符串最后一个字符开始向前读取
Python 中正向字符数组下标为0-length-1反方向为-1–(lengyh-1)
反方向从字符串最后一个字符开始向前读取
2.Python程序语法元素分析(依据实例1)
程序的格式框架
**Python语言采用严格的“缩进”来表明程序的格式框架**
**两种注释:单行注释和多行注释**
**单行注释以“#”开头,多行注释以'''(三个引号)开头和结尾**
**注释用途:**
表明作者和版权信息
解释代码的原理或者用途
辅助程序调试
命名与保留字
Python语言允许使用大小写字母,数字,下划线,汉子等字符命名,
但是名字的首字母不能是数字,中间不能出现空格
长度在语法上没限制,
标识符和保留字均对大小写敏感
一般不建议采用中文等非英语语言字符进行变量命名
字符串
字符串是用两个双引号“ ”或者单引号’'括起来的零或多个字符
序号体系:
正向递增序号(以最左侧字符序号为0向右依次递增)
反向递减序号(以最右侧字符序号为-1向左依次递减)
Python字符串区间访问方式:
[N:M]格式,表示字符串中从N到M(不包含M)的子字符串,两者都是字符串的索引序号,可以混合使用正向递增序号和反向递件序号
例:TempStr[0:-1] 便是从下标为0的字符开始到最后一个字符(但是不包含最后一个字符)的子串
赋值语句
Python使用 “=”表示赋值,将右侧的计算结果赋给左侧
同步赋值:
<变量1>,<变量2>,<变量3>=<表达式1>,<表达式2>,<表达式3>
同步赋值,如果左右数目不相等,则会对多余变量取默认值
所有语句同时执行,执行过程中不会相互影响
应尽量避免将多个无关的单一赋值语句合成同步赋值语句,会降低程序可读性
input()函数
无论用户输入的是什么,都按照字符串类型返回结果
分支语句
使用方式:
if <条件1>:
<语句块1>
elif <条件2>:
<语句块2>
…
else:
<语句块n>
TempStr[-1] in ['F','f']
由保留字in组成的表达式表示判断字符串TempStr的最后一个字符是否存在于一个由‘F’或者’f’组成的集合中
eval()函数
将字符串当成有效的表达式来求值并返回计算结果
缺点:
不太安全,如果用户输入一些字符串是恶意代码,这会对系统造成不可预知的影响
在处理字符串时,会将双引号先去掉,再进行解释,
如“Hello”会被解释成变量Hello,"‘Hello’"会被解释成为字符串‘Hello’
Python支持+,-,,/,(幂)5种基本算数运算操作*
适当增加空格有利于提高代码可读性,但是不要改变与缩进相关的空格数量,也不能在变量名等命名中间添加空格
print()函数
需要采用格式化输出方式,通过format()方法将待输出变量整理成期望输出的格式
print()函数使用槽格式和format()方法将变量和字符串结合到一起输出
print("你的身高是{:.2f}".format(height))#输出的就是保留两位小数的身高值
循环语句
条件循环基本过程:
while(<条件>):
<语句块1>
<语句块2>
#TempConvert-2while循环
#用户输入N或者n退出循环
TempStr=input("请输入带有符号的温度值:")
while TempStr[-1] not in ['N','n']:
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
print("转化后的温度是:{:.2f}F".format(F))
else:
print("输入格式错误")
TempStr =input("请输入带有符号的温度值(以N或n结尾结束程序):")
not表示对判断结果取反
函数
函数可以理解为对一组表达特定功能表达式的封装,与数学函数类似,能够接受变量并输出结果
#TempConvert-3函数
def tempConvert(ValueStr):
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)
由def保留字定义的函数在程序中不会被直接执行,需要使用函数名称调用才能执行
3.实例2:Python蟒蛇绘制
#Python蟒蛇的绘制
import turtle #别名:import turtle as tl
turtle.setup(650,350,200,200) #设置初试屏幕大小
turtle.penup() #抬笔
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,100)
turtle.fd(40*2/3)
turtle.done()
turtle.done()的作用
暂停程序,停止画笔绘制,但绘图窗体不关闭,直到用户关闭Python Turtle图形化窗口为止;它的目的是给用户时间来查看图形,没有它,图形窗口会在程序完成是立即关闭。
turtle库用于绘制图形
引用函数库方法(第一章已经提过)
方法一:
import <库名> ex: import turtle
方法二:
** 导入指定函数**
from <库名> import <函数名,函数名,…,函数名> ex:from turtle import penup,pendown
导入指定包的所有函数
from <库名> import * ex:from turtle import *
方法一采用.的方式调用库中函数,能够显示的标明函数的来源,在引用较多库时代码的可读性更好。
方法二利用保留字直接引用库中函数,可以是代码更加整洁,在只有一个引用库的情况下使用比较好。
为避免可能的命名冲突,对于初学者,建议采用第一种库引用方式。
4.turtle语法元素分析(上面实例)
绘图坐标体系 turtle.setup(width,height,startx,stary)
新建绘图窗口长宽分别是:width,height (如果为整数表示像素值,如果为小数表示其余屏幕对应宽度/高度与屏幕的比例)
新建窗体距离显示屏左侧边缘上侧边缘距离分别是 startx,starty (如果为整数分别表示像素距离,如果为None则分别为水平居中、垂直居中)
画笔控制函数
turtle,penup() 抬起画笔,之后移动画笔不绘制形状
turtle.pendown() 放下画笔,之后移动画笔绘制形状
turtle.pensize(width) 设置画笔尺寸,无参数时返回当前画笔宽度
turtle.pencolor(colorString) 设置画笔颜色,无参数时返回当前画笔颜色
turtle.pencolor((r,g,b)) (同上)
形状绘制函数
turtle.fd(distance) (或)turtle.forward(distance) 控制笔向当前方向前进一段距离
turtle.seth(to_angle)(或) turtle.setheading(to_angle) 改变画笔绘制方向到指定绝对方向角
绝对方向角度以说水平向右为0/360度,逆时针方向一圈增加到360度(大于360度重复略),顺时针从0递减到-360度
turtle.circle(radius,extent) 绘制圆弧
radius:半径。依据初始位置。为正时,小乌龟逆时针跑,为负时小乌龟顺时针跑
extent: 角度值,为None时,绘制整个圆
函数的封装(对上面的绘制蟒蛇程序)
#封装:Python绘制蟒蛇
import turtle
def drawSnack(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,100)
turtle.fd(40*2/3)
turtle.setup(650,350,200,200) #设置初始位置窗口
turtle.penup() #抬笔
turtle.fd(-250) #左移
turtle.pendown() #落笔
turtle.pensize(25) #线条粗细
turtle.pencolor("red") #线条颜色
drawSnack(40,80,4)
turtle.done()
5.程序练习题
1.实例1的修改,采用eval(input(<提示内容>))替换现有的输入部分,并使输出的温度值为整数
#实例1的修改,采用eval(input(<提示内容>))替换现有的输入部分,并使输出的温度值为整数
TempStr=eval("'"+input("请输入温度数值:")+"'") #注意加上引号,注意eval()函数的作用
if TempStr[-1] in ['F','f']:
c=(eval(TempStr[0:-1])-32)/1.8
print("转化后的温度是:{:.0f}C".format(c))
elif TempStr[-1] in ['C','c']:
f=1.8*eval(TempStr[0:-1])+32
print("转化后的温度为:{:.0f}F".format(f))
else:
print("输入格式错误")
注意eval()函数的使用方法(前文提及过)
2.汇率兑换程序(按照温度转化程序的设计思路,按照1美元=6人民币的汇率进行双向兑换的程序)
#汇率兑换程序(按照温度转化程序的设计思路,按照1美元=6人民币的汇率进行双向兑换的程序)
exchangeRate =eval("'"+input("请输入金额以¥或$结尾:")+"'")
if exchangeRate[-1]in['¥']:
c=1.0*eval(exchangeRate[0:-1])/6
print("转化后的金额为:{:.2f}$".format(c))
elif exchangeRate[-1]in['$']:
c=6.0*eval(exchangeRate[0:-1])
print("转化后的金额为:{:.2f}¥".format(c))
else:
print("格式错误")
3.绘制一条彩色蟒蛇
#绘制一条彩色蟒蛇
import turtle
import random #随机数生成库
def drawpencolorfulSnack(radius,angle,length):
turtle.colormode(255) #改变颜色模式到RGB 255格式
turtle.seth(-40) #调整画笔初始方向
turtle.pendown()
for i in range(length):
turtle.pencolor((random.randrange(0,255,1),random.randrange(0,255,1),random.randrange(0,255,1))) #随机数0-255 步长为1
turtle.circle(radius,angle)
turtle.pencolor((random.randrange(0,255,1),random.randrange(0,255,1),random.randrange(0,255,1)))
turtle.circle(-radius,angle)
turtle.pencolor((random.randrange(0,255,1),random.randrange(0,255,1),random.randrange(0,255,1)))
turtle.circle(radius,angle/2)
turtle.fd(40) #直线移动
turtle.pencolor((random.randrange(0,255,1),random.randrange(0,255,1),random.randrange(0,255,1)))
turtle.circle(16,100) #颈部拐弯
turtle.pencolor((random.randrange(0,255,1),random.randrange(0,255,1),random.randrange(0,255,1)))
turtle.fd(40*2/3) #头部
turtle.setup(650,350,200,200) #设置初始屏幕大小位置
turtle.penup() #提笔
turtle.fd(-250) #左移
turtle.pendown() #落笔
turtle.pensize(25) #画笔粗细
drawpencolorfulSnack(40, 80, 4)
turtle.done() #结束画图!
random库可以实现产生伪随机数,其中randrange(start,end,step)产生从start到end的步长为step的随机数
4.等边三角形的绘制
使用turtle库的turtle.fd()函数和turtle.seth()函数绘制一个等边三角形
#使用turtle库的turtle.fd()函数和turtle.seth()函数绘制一个等边三角形
import turtle
turtle.setup(600,500,300,300)
turtle.penup() #抬笔
turtle.fd(-100) #左移100 ,调整初始位置
turtle.pendown()#落笔
turtle.pensize(25) #画笔粗细
turtle.color("purple") #画笔颜色
turtle.seth(0) #调整初始角度,默认初始化为0,此处防止前面调整过角度(一般不会)
turtle.fd(100) #画底边
turtle.seth(120) #调整角度
turtle.fd(100) #画一边的腰
turtle.seth(-120) #调整角度
turtle.fd(100) #画另一边的腰
turtle.done() #结束绘图,起到暂停绘图界面的作用
5.叠加等边三角形的绘制
使用turtle库的turtle.fd()函数和turtle.seth()函数绘制一个等边三角形
#叠加三角形的绘制
import turtle
turtle.setup(600,500,200,200)
turtle.penup()
turtle.pensize(5)
turtle.pencolor("blue")
turtle.fd(-100)
turtle.pendown()
#底边
turtle.seth(0)
turtle.fd(200)
#右侧边
turtle.seth(120)
turtle.fd(200)
#左半侧边
turtle.seth(-120)
turtle.fd(100)
#内三角
turtle.seth(0)
turtle.fd(100)
turtle.seth(-120)
turtle.fd(100)
turtle.seth(120)
turtle.fd(100)
#外左下侧边
turtle.seth(-120)
turtle.fd(100)
turtle.done()
6.无角正方形的绘制
利用turtle库函数绘制一个没有角的正方形。
#无边正方形的绘制
import turtle
turtle.setup(600,500,300,300)
turtle.penup()
turtle.seth(0)
turtle.fd(-100)
#左侧边
turtle.pendown()
turtle.seth(-90)
turtle.fd(100)
turtle.penup()
turtle.fd(20)
#下侧边
turtle.seth(0)
turtle.fd(20)
turtle.pendown()
turtle.fd(100)
turtle.penup()
turtle.fd(20)
#右侧边
turtle.seth(90)
turtle.fd(20)
turtle.pendown()
turtle.fd(100)
turtle.penup()
turtle.fd(20)
#上侧边
turtle.seth(180)
turtle.fd(20)
turtle.pendown()
turtle.fd(100)
turtle.done()
7.六角形的绘制
#六角形的绘制
import turtle
turtle.setup(600,350,300,300)
turtle.seth(30)
turtle.pendown()
turtle.fd(200)
turtle.seth(-90)
turtle.fd(200)
turtle.seth(150)
turtle.fd(200)
turtle.penup()
turtle.seth(0)
turtle.fd(50)
turtle.seth(-90)
turtle.fd(100)
turtle.pendown()
turtle.seth(30)
turtle.fd(200)
turtle.seth(150)
turtle.fd(200)
turtle.seth(-90)
turtle.fd(200)
turtle.done()
8.正方形螺旋线的绘制
#正方形螺旋线的绘制
import turtle
turtle.setup(600,650,300,300)
turtle.pendown()
for i in range(0,50): #画50条线
turtle.seth(90+90*i) #调整角度
turtle.fd(10+10*i) #调整每个线的长度
turtle.done()
9.自定义Python蟒蛇绘制
#自定义Python的蟒蛇绘制
import turtle
turtle.setup(600,600,300,300)
turtle.color("purple")
turtle.pensize(15)
turtle.seth(0)
turtle.pendown()
turtle.circle(40,180)
turtle.circle(-40,240)
turtle.circle(-120,300)
turtle.done()
备注:以上为高等教育出版社 Python语言程序设计基础(第2版)课本内容第二章的整理
仅为个人学习处理。如有错误,欢迎指正!