Python与医药数据处理 第二章
第二章 初识Python程序
2.1 Python程序组成
2.1.1 Python语法元素
数据:分为常量和变量。其中程序在定义变量时,实际上是在内存中划出一块空间(有一定地址编号)用于存储相应数据,我们可以通过函数 id(variable) 查询存储地址
操作符:分为运算操作符和赋值操作符。运算操作符顾名思义决定了运算类型,运算的结果往往会有一定的返回值;赋值操作符一般分为三步完成:1.计算"="右边表达式的值 2.分配内存 3.创建引用,当右边也为变量时,则只需完成第3步
函数:是指能完成一定功能的“工具”
类:封装了一些数据和函数的复杂数据,封装的数据称为属性,封装的函数称为“方法”
模块:自我包含并且有组织的代码片段,是一个Python文件
包:是一个有层次的文件目录结构,定义了由 \(n\) 个模块或 \(n\) 个子包组成的Python应用程序执行环境
库:是一组具有相关功能的常量、函数和类的代码的集合,由一个或多个.py文件构成
关键字:也称为“保留字”,是指编程语言内部定义并保留使用的标识符
2.1.2 Python语句
库引入语句:引入标准库或第三方库
创建变量并赋值语句:有一个特殊的同步赋值语句,格式如下<变量1>, <变量2>, ..., <变量n> = <表达式1>, <表达式2>, ..., <表达式n> 原理即为先创建左侧的变量,再将右侧的表达式的值一一对应赋值到左侧,如变量交换可以写成:a, b = b, a
函数或类定义语句:def 函数名 (<参数列表>): class 类名 (父类):
函数或类调用语句:函数名(<参数列表>) 类或对象.属性 类或对象.方法名([参数列表])
结构控制语句:分为分支语句、循环语句
注释语句:单行注释由#引导,多行注释一般由一对三个单引号或一对三个双引号界定
2.1.2 Python语句
-
标识符命名规则:
- 只能使用大写字母、小写字母(大小写敏感)、数字、下划线、汉字(不建议)等字符及组合给变量命名,首字符不能是数字,中间不能有空格
- 不能用Python关键字作为标识符名称
- 建议使用有一定含义的英文单词或缩写作为标识符名称
-
程序的书写规范:
- 一般情况一行写一条语句,若一行写多条语句,用分号分隔
- 若语句太长需要换行显示,则用续行符号
\“反斜杠+空格”引导 - 从第一列开始,前面不能有任何的空格
- 严格遵守缩进规则,缩进表示代码之间的逻辑关系
- 注释语句能增加代码的可读性
- 所有语法符号都应在英文输入法下输入
2.2 Python程序组成
2.2.1 面向对象程序设计(OOP)
以对象为核心,认为对象是组成程序的基本模块。面向对象程序设计把构成问题的事务分解成各个对象,用以描述事物在整个解决问题步骤中的行为
Python就是典型的面向对象的编程语言
2.2.1 面向过程程序设计(POP)
也叫结构化编程,以过程为核心,即面向解决问题的过程进行编程。如C, FORTRAN
2.3 基本常用函数
input() 函数:<变量> = input(<提示性文字>) 该函数本质上是为输入内容添加一层引号,返回值必定为字符串
eval() 函数:eval(<字符串>) 函数的功能:1. 去掉参数最外层的双引号;2. 判断剩余内容是否为正确的表达式,如果是,则计算表达式的值;如果不是,程序终止报错
通俗地讲,eval() 函数就是把字符串变成对应的表达式。特殊地,对于字符串,如果有一行
s = eval(input()),输入 'aa',那么 input() 添加一层引号,经过 eval() 函数处理再去掉一层引号,仍然为 'aa',程序就会认为该内容为字符串类型,这一行代码的意义是把值 'aa' 赋值给变量 \(s\);如果输入 aa,那么 input() 添加一层引号,经过 eval() 函数处理后再去掉一层引号,此时不再有引号,程序会认为该内容为名字叫 aa 的变量,这一行代码的意义是把变量 \(aa\) 的值赋值给 \(s\),但是程序中没有这个变量,所以最后的报错异常类型为 NameError:NameError: name 'aa' is not defined
print() 函数:print(value, ..., sep=' ', end = '\n'),\(value\) 表示输出的对象,\(sep\) 表示分隔符,\(end\) 表示结尾符号,\n表示换行
help()函数:help(<函数名>) 查询特定函数的具体信息
dir()函数:dir(<库或类名>) 查询特定库的内容
2.4 标准库1:turtle库的使用方法
-
标准库的引用方法:
import <库名>调用整个库
import <库名> as <别名>调用整个库,并赋予别名
from <库名> import <函数1, 函数2, 函数3, ...>从指定库中引入指定函数,调用函数时不再需要库名前缀
注:第三种中,如果需要调用库里的所有函数,使用语句from <库名> import * -
画布初始化函数:
turtle.setup(width, height, startx, starty)
\(width\), \(height\) 分别是画布窗口的宽度与高度
\(startx\), \(starty\) 分别为,窗口左侧与屏幕左侧距离,窗口顶部与屏幕顶部距离
当参数值为整数时,认为单位为
像素
当 \(width\), \(height\) 为小数,表示站屏幕相应方向上的长度分数
当 \(startx\), \(starty\) 为None,表示两参数为空,绘图窗口位于屏幕中心 -
画布坐标系统:
我们一般默认坐标原点为画布中心,朝向画布正右侧标准方向。画笔位于原点,朝向朝右(也叫朝东)为画笔的初始状态 -
画笔控制函数(画笔设置)
turtle.pensize(width)用于设置画笔宽度
turtle.pencolor(colorstring)用于设置画笔颜色(可用RGB形式,也可用颜色名称)
turtle.fillcolor(colorstring)用于设置图形填充颜色
turtle.color(color1, color2)前者为画笔颜色,后者为填充颜色
turtle.speed(speed)用于设置画笔移动速度(范围是 \([0,10]\) 的整数)
turtle.delay(delay = None)设置绘图延迟(单位:ms) -
画笔控制函数(画笔状态)
turtle.hideturtle()turtle.showturtle()隐藏 / 显示画笔
turtle.clear()清空绘画内容,画笔仍保持原状态
turtle.reset()清空绘画内容,并重置初始化画笔
turtle.undo()撤销上一个动作 -
画笔控制函数(画笔运动:操作相关)
turtle.penup()turtle.pendown()提起 / 放下画笔(放下即画笔接触画笔,移动时留下墨迹,提起则反之)
turtle.dot(size = None, color)绘制一个直径为 \(size\) 的指定颜色的原点
turtle.circle(radius, extent = None, steps = None)画圆 / 正多边形函数。\(radius\) 表示半径,默认逆时针绘制,当值为负表示顺时针绘制;\(extent\) 表示绘制圆弧度数;\(step\) 表示绘制步数。当 \(extent\) 缺省,表示画正多边形;当 \(step\) 缺省,表示画圆弧;当两者都存在,表示某一度数的圆弧以给定步数的边内接,如turtle.circle(60, 180, 5)的结果如下:

-
画笔控制函数(画笔运动:坐标相关)
turtle.forward(distance)turtle.backward(distance)前进 / 后退 \(distance\) 值的像素
turtle.goto(x, y)画笔移动到坐标 \((x, y)\)
turtle.setx(x)turtle.sety(y)将画笔朝 x / y 方向上移动 \(x\) / \(y\) 的像素值(负数表示负方向)
turtle.home()画笔初始化,返回原点,朝向朝东 -
画笔控制函数(画笔运动:角度相关)
turtle.right(degree)turtle.left(degree)顺时针 / 逆时针旋转 \(degree\) 度
turtle.setheading(angle)简写turtle.seth(angle)设置画笔为 \(angle\) 度
2.5 案例:绘制苯环
这个程序其实综合了很多最基础的要点,是作为综合性复习时的很好的案例,下面以程序内注释的形式对该程序进行解读
def drawbenring(pos, angle, color, size): # 定义苯环绘制函数
t.penup() # 提起画笔
t.goto(pos) # 转移到指定位置
t.seth(angle) # 设置起始角度
t.pencolor(color) # 设置画笔颜色
# 至此完成画笔初始化设定,准备绘制外环
t.pendown() # 放下画笔
for i in range(6): # 循环结构:完成外侧六元环绘制
t.fd(size)
t.left(360/6)
# 至此外环绘制完毕,准备绘制内侧
t.seth(60 + angle)
t.penup()
t.fd(20)
t.seth(angle)
# 上面前三步主要完成了画笔位置移向内侧,最后一步将画笔朝向再设置
innersize = size - 20 # 计算内侧应画线的长度
for i in range(6): # 循环结构:完成内侧绘制
if i % 2 == 0: # 分支结构:根据 i 奇偶性判断是否画,实现“单双键交替”
t.penup()
else:
t.pendown()
t.fd(innersize)
t.left(360/6)
from random import randint, seed # 从库中调用指定函数
import turtle as t # 调用整个库,并取别名"t"
seed(101) # 设置种子
t.setup(1000, 800, 30, 0) # 初始化画布
t.colormode(255) # 十六进制RGB模式
t.bgcolor("white") # 画布背景色
t.pensize(5) # 画笔粗细
for i in range(5): # 5次绘制,每次随机生成位置、角度、颜色、大小进行绘制
pos = randint(-250, 250), randint(-250, 250)
angle = randint (0, 360)
color = randint(0, 255), randint(0, 255), randint(0, 255)
size = randint(60, 100)
drawbenring(pos, angle, color, size) # 调用函数进行绘制

浙公网安备 33010602011771号