2-Python程序实例解析

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语言允许使用大小写字母,数字,下划线,汉子等字符命名,

但是名字的首字母不能是数字,中间不能出现空格

长度在语法上没限制,

标识符和保留字均对大小写敏感

一般不建议采用中文等非英语语言字符进行变量命名

2-Python程序实例解析
2-Python程序实例解析

2-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则分别为水平居中、垂直居中)

2-Python程序实例解析


画笔控制函数

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时,绘制整个圆

2-Python程序实例解析
2-Python程序实例解析


函数的封装(对上面的绘制蟒蛇程序)

#封装: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的随机数
2-Python程序实例解析

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()       #结束绘图,起到暂停绘图界面的作用

2-Python程序实例解析

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()

2-Python程序实例解析

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()

2-Python程序实例解析

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()

2-Python程序实例解析

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()

2-Python程序实例解析

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()

2-Python程序实例解析

备注:以上为高等教育出版社 Python语言程序设计基础(第2版)课本内容第二章的整理

仅为个人学习处理。如有错误,欢迎指正!

上一篇:turtle库中left()、right() 和seth() 的区别


下一篇:共享一些用“Python”语言编写的“有趣,讨厌,有趣”的程序代码。