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语句

  • 标识符命名规则:

    1. 只能使用大写字母、小写字母(大小写敏感)、数字、下划线、汉字(不建议)等字符及组合给变量命名,首字符不能是数字,中间不能有空格
    2. 不能用Python关键字作为标识符名称
    3. 建议使用有一定含义的英文单词或缩写作为标识符名称
  • 程序的书写规范:

    1. 一般情况一行写一条语句,若一行写多条语句,用分号分隔
    2. 若语句太长需要换行显示,则用续行符号\ “反斜杠+空格”引导
    3. 从第一列开始,前面不能有任何的空格
    4. 严格遵守缩进规则,缩进表示代码之间的逻辑关系
    5. 注释语句能增加代码的可读性
    6. 所有语法符号都应在英文输入法下输入

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) 的结果如下:
    img

  • 画笔控制函数(画笔运动:坐标相关)
    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) # 调用函数进行绘制
posted @ 2025-04-22 01:57  凛凛雾  阅读(67)  评论(0)    收藏  举报