Python学习(北理工MOOC)笔记

Python语言程序设计

第一周 Python基本语法元素

  1. 程序设计基本方法
  • 编译和解释:
    编译:将源代码一次性转换为目标代码的过程
    解释:将源代码逐条的转换为目标代码同时逐条运行的过程,执行解释过程的程序叫做解释器。
  • 根据执行方式不同编程语言分为两类:
    静态语言(使用编译执行的语言):C,C++,JAVA
    脚本语言(使用解释器执行的语言):python,PHP,JS
    比较:静态语言一次性生成目标代码,优化更充分,程序运行更快;
    脚本语言维护更灵活。
  • 程序的基本编写方法:IPO方法,即输入,处理,输出
  1. Python开发环境配置
  2. 温度转换:
    代码:
#TemperConvert
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("输入格式错误。")

语法元素分析:

  • 缩进:表达程序的格式框架
    缩进是语法的一部分,缩进不正确可能导致程序运行错误,缩进是表达代码间层次和关系的唯一手段。要求单一程序内缩进长度相同。
  • 注释:单行注释用“#”开头;多行注释用“ ‘’’ ”开头和结尾。
  • 命名与保留字:
    字符串用单引号和双引号都可以
    字符串的序号包含两种:正向递增序号(从0开始)和反向递减序号(从-1开始),可用于索引和切片
  • 列表类型:
    使用保留字in判断元素是否在列表中
  • 赋值语句:
    右侧的数据类型同时作用于变量,如input()返回字符串类型,所以Tempstr也是字符串类型
  • 输入输出:
    输入函数input():从控制台获得用户输入的函数。
    变量=input(<提示字符串>)
    输出函数print():
    print函数的格式化:print("转换后的温度是:{:.2f}F".format(F))
    { }表示槽后续变量(.format()中的变量)填充到槽中,.2f表示浮点类型保留两位数字
  • 评估函数eval(): 去掉字符串外面的引号并执行余下的函数
    eval(<字符串或字符串变量>)
    例如:eval(“1”) 输出结果为1
    eval(“1+2”) 输出结果为3
    eval(’ “1+2” ‘) 输出 ‘1+2’
    eval(’ print(“Hello”) ') 输出 Hello
  1. 编程练习

第二周 python基本图形绘制

  1. 深入理解python语言
    计算机技术的演进
    编程语言的多样初心
    python语言的特点
    “超级语言”的诞生
  • 计算机技术的演进:
    计算机系统结构时代1946-1981 解决计算能力问题
    网络和视窗时代1981-2008 交互问题
    复杂信息系统时代2008-2016 数据问题
    人工智能时代2016- 人类的问题
  • 编程语言的多样初心
    c语言:
    主要学习指针、内存、数据类型;
    语言本质:理解计算机结构
    解决问题:性能
    JAVA语言:
    学习内容:对象、跨平台、运行时
    语言本质:理解主客体关系
    解决问题:跨平台
    适用对象:软件类专业
    C++
    学习内容:对象、多台、集成
    语言本质:理解主客体关系
    解决问题:大规模程序
    适用对象:计算机类专业
    VB
    学习内容:对象、按钮、文本框
    语言本质:理解交互逻辑
    解决问题:桌面应用
    python
    学习内容:编程逻辑、第三方库
    语言本质:理解问题求解
    解决问题:各类问题
  • python语言的特点
    • 通用性是最大的特点
    • python特点与优势:
      • 语法简洁:
        强制可读性
        较少的底层语法元素
        多种编程方式
        支持中文字符
        C代码量的10%
      • 生态高产:
        有超过13万的第三方库
    • 如何看待python语言
      • C/C++:python归python,C归C
      • JAVA:针对特定开发岗位和需求
      • HTML/CSS/JS:不可替代的前端技术
      • 其他语言:R/Go、Matlab等,特定领域
  • “超级语言“的诞生
    机器语言:代码直接执行,与CPU型号有关
    汇编语言:有助记符,汇编器,与CPU型号有关
    高级语言:接近自然语言,编译器,与CPU型号无关
    超级语言:粘性整合已有程序,具备庞大计算生态
    • 超级语言:
      具有庞大的计算生态,可以很容易利用已有代码功能
      编程思维不再是刀耕火种,而是集成开发
      完成2+3功能的高级语言:result=sum(2+3)
      python是目前唯一的超级语言
  • 总结
    相比较于其他的语言,python语言的特点在于通用性,简洁性和生态性。python语言并不关注具体函数功能的实现以及与计算机底层的接口,存储等问题(这部分问题C语言更擅长处理),而是关注于问题的抽象与求解本身。python语言具有庞大的计算生态,很容易利用已有的代码功能,是目前唯一的超级语言。
  1. python蟒蛇绘制
  • 蟒蛇绘制代码:
import turtle
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,180)
turtle.fd(40*2/3)
turtle.done()

  1. 模块1:turtle库的使用
    turtle库基本介绍
    turtle库绘图窗体布局
    turtle空间坐标体系
    turtle角度坐标体系
    RGB色彩体系
  • turtle库基本介绍
    入门图形绘制函数库,标准库
  • turtle库绘图窗体布局
    turtle.setup(width,height,startx,starty) 设置窗体大小及位置,4个参数中后两个可选,setup()不是必须的
  • turtle空间坐标体系
    包含绝对坐标和海龟坐标
    turtle.goto(x, y)
    海龟坐标:
    turtle.fd(d) 向海龟的正前方向运行
    turtle.bk(d) 向海龟的后方向运行
    turtle.circle(r,angle) 以海龟左侧某一点为圆心画圆
  • turtle角度坐标体系
    绝对角度:
    turtle.seth(angle) 改变海龟行进方向,只改变行进方向但不前进
    海龟角度:
    turtle.left(angle)
    turtle.right(angle)
  • RGB色彩体系
    由三种颜色通道组合构成所有颜色
    RGB每色取值0-255或者0-1
    默认采用小数值:turtle.colormode(mode) mode取1.0 或255
  1. turtle库语法元素分析
  • 库引用与import
    • 库引用:
      使用import保留字,采用 a . b ( ) 编码风格
    • 使用 from 库 import * 或者from 库 import 函数 可以直接使用库中的函数
    • import 库名 as 别名 给调用的外部库关联一个更短、更适合自己的名字
  • 画笔控制函数:
    • turtle.penup() 抬起画笔,海龟在飞行,不画东西
    • turtle.pendown() 落下画笔,海龟在爬行
    • turtle.pensize()别名turtle.width() 画笔宽度,海龟腰围
    • turtle.pencolor(color) color 为颜色字符或者r, g, b值 海龟颜色,海龟涂装
  • 运动控制函数:控制海龟走直线&走曲线
    • turtle.fd(d)或turtle.forward(d) d为行进距离,可以为负数
    • turtle.circle(r,angle)
  • 方向控制函数
    • turtle.seth(angle)或者turtle.setheading(angle)
    • turtle.left(angle)
      turtle.right(angle)
  • 循环语句:
    • for <变量> in range ( < 参数 > ) 表示从0到参数-1循环
    • range( N )函数 产生从0到N-1的整数序列,共N个
      range( M, N )函数,产生从M开始到N-1的整数序列

# 第三周 基本数据类型

  1. 数字类型及操作
  • 整数类型:与数学中整数概念一致,有正有负,取值无穷大
    • pow(x,y) 计算x的y次幂
    • 四种进制表示形式:
      十进制正常
      二进制以0b或者0B开头,如:-0B101
      八进制以0o或者0O开头,如:0o123
      十六进制以0x或者0X开头,如:0X12a
  • 浮点数:与数学中的实数概念一致,带有小数,数位有限制
    • 浮点数运算存在不确定的尾数:
      原因:计算机采用53位二进制表示小数部分,二进制表示小数可以无限接近但不能完全相同。
      解决:浮点数间进行运算并需要比较时需用:round( x, d ) 对x进行四舍五入,d为小数截取位数
>>>0.1+0.2
 0.300000000004
>>>0.1+0.2 == 0.3
 false
 #解决方法
>>> round(0.1+0.2, 1) == 0.3
true
  • 浮点数可以采用科学计数法表示:e,E
  • 复数类型:
    • z = 1.23e-4 + 5.6e + 89j
      用 z.rael 获得实部,用 z.imag 获得虚部
  • 数值运算操作符:
    • x // y 整数除 10 // 3 结果是 3
    • x % y 取余
    • x ** y 幂运算(开方运算)
  • 数值运算函数:
    • abs( ) 取绝对值
    • divmod( x, y ) 商余 如: divmod( 10, 3 ) 输出(3,1)
    • max(x1,x2,… ,xn)取最大值
    • min(x1,x2,… ,xn)取最小值
    • int(x)将 x 转换为 int 类型,如:int(“123”)结果为整数123
    • float(x)将 x 转换为 float 类型,如:float(“1.23”)结果为浮点数1.23
    • complex(x)将 x 转换为复数
  1. 实例 3 :天天向上的力量
  2. 字符串类型及操作
  • 字符串有两类四种表示方式:
    用一对单引号或双引号表示一行字符串
    用一对三单引号或三双引号表示多行字符串
    思考:如果想在字符串中包含单引号或者双引号怎么办?
    用单引号包含双引号或用双引号包含单引号
    如果希望在字符串中既包含单引号又包含双引号?
    用三个单引号包含
  • 字符串切片高级操作
    string[ M, N, K ] 左闭右开,步长为K
    逆序字符串,string[ ::-1]
  • 字符串中的转义字符
    转义符表达特定字符的本意
  • 字符串操作符
    • x + y :字符串连接
    • x * n 或者 n* x :复制n次字符串
    • x in s :如果 x 是 s 的子串,则返回 true ,否则返回 false
  • 字符串处理函数
    • len( ) 返回字符串的长度
    • str( ) 将任意类型转化为字符串类型 如:str( [1, 2] ) 结果为 " [1, 2] "
    • hex( ) 或者 oct( ) 将整数转换为其对应的十六进制、八进制小写字符串
      hex( 425 ) 结果为0x1a9 oct( 425 ) 结果为0o651
    • chr( u ):u为Unicode编码,返回其对应的字符
    • ord( x ) :x为字符,返回其对应的Unicode编码
      Unicode编码方式:统一字符编码,几乎覆盖所有字符
  • 字符串处理方法
    方法在编程中也是一个特有名词,特指 a.b( ) 风格中的函数 b( ),字符串及变量也是a,存在一些方法
    • str.lower( ) 返回字符串的副本,字符全小写
    • str.upper( ) 返回字符串的副本,字符全大写
    • str.split( sep ) 返回一个列表,由 str 根据 sep 分割的部分组成
    • str.count( sub ) 返回子串 sub 在字符串中出现的次数
    • str.replace( old, new ) 返回字符串副本,所有 old 子串被替换为 new
    • str.center( width, [ fillchar ] ) 字符串根据宽度 width 居中,剩余部分由fillchar填充
    • str.strip( chars ) 从字符串中两侧去掉 chars 中列出的字符串
    • str.join( iter ) 在 iter 字符串中除最后一个元素外,每个元素后面增加一个str字符串
      如:",".join( ‘12345’ ) 结果为: 1,2,3,4,5
  • 字符串类型的格式化
    为了规范字符串的输出需要对其进行格式化,用 .format( ) 函数
    <模板字符串>.format(< 逗号分隔的参数 >)
    • 槽:
      Python学习(北理工MOOC)笔记_第1张图片
      Python学习(北理工MOOC)笔记_第2张图片
      Python学习(北理工MOOC)笔记_第3张图片
      Python学习(北理工MOOC)笔记_第4张图片
      Python学习(北理工MOOC)笔记_第5张图片
  1. 模块二:time库的使用
  • time库基本介绍
    time库是python中处理时间的基本库,他可以:

    • 计算机时间的表达
    • 提供获取系统时间并格式化输出的功能
    • 提供系统级的精确计时功能,用于程序性能分析
    • 时间获取:time(),ctime(),gmtime()
    • 时间格式化:strptime(),strftime()
    • 程序计时:sleep(),perf_counter()
  • time库的使用:

    • time.time() 获取计算机内部时间值,返回浮点数
    • time.ctime()获取当前时间并以易读形式返回,返回字符串
    • time.gmtime()获取当前时间并以结构体形式返回,以供后续处理操作
  • 时间格式化:将时间以合适的形式展示出来

    • 展示模板由特定的格式化字符组成
    • 由time.strftime()实现
      Python学习(北理工MOOC)笔记_第6张图片
    • 时间格式化的控制符
      Python学习(北理工MOOC)笔记_第7张图片
      Python学习(北理工MOOC)笔记_第8张图片
    • time.strptime()将一段字符串解析成时间变量:
      Python学习(北理工MOOC)笔记_第9张图片Python学习(北理工MOOC)笔记_第10张图片
  • 程序计时应用:指测量起止动作所经历的时间过程

    • 测量时间:time.perf_counter()
      Python学习(北理工MOOC)笔记_第11张图片
    • 产生时间:time.sleep() 让程序休眠
      Python学习(北理工MOOC)笔记_第12张图片
  1. 实例4:文本进度条
  • 文本进度条:
    分析:(1) 采用字符串方式打印可动态变化的进度条,需要能在一行中逐渐变化
    (2) 采用sleep()模拟一个持续的进度
  • 简单的开始
#TextProBarV1.py
import time
scale = 10
print("------执行开始------")
for i in range(scale+1):
    a = '*' * i
    b = '.' * (scale - i)
    c = (i/scale)*100
    print("{:^3.0f}%[{}->{}]".format(c,a,b))
    time.sleep(0.1)
print("------执行结束------")
  • 单行动态刷新
    • 刷新的本质是用后打印的字符覆盖之前打印的字符
    • 不能换行,print需要被控制
    • 要能回退,输出后光标移动到输出前的位置“\r”
#TextProBarV2.py
import time
for i in range(101):
    print("\r{:3}%".format(i), end="")
    time.sleep(0.1)

== 注意:print( “\r”.format( ), end = “” )正常情况下print输出后会自动在后面加上换行符,但是这里我们通过让end为空取消了,此外,我们通过\r使得每次打印前光标在行首==

  • 文本进度条实例完整效果:
#TextProBarV3.py
import time
scale = 50
print("执行开始".center(scale//2, "-"))
start = time.perf_counter()
for i in range(scale+1):
    a = '*' * i
    b = '.' * (scale - i)
    c = (i/scale)*100
    dur = time.perf_counter() - start
    print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,dur),end='')
    time.sleep(0.1)
print("\n"+"执行结束".center(scale//2,'-'))

第四周 程序的控制结构

  • 紧凑形式:注意此时 if 和 else 对应的是表达式,而不是语句
    Python学习(北理工MOOC)笔记_第13张图片
  • 异常处理:
    Python学习(北理工MOOC)笔记_第14张图片
  • 获取多个输入
height, weight = eval(input("请输入身高(米)和体重(公斤)[逗号隔开]: "))
  • 字符串遍历循环:for c in s:
  • 列表遍历循环: for item in list:
  • 文件遍历循环:for line in fi:(fi是文件标识符,遍历每行)
  • 循环的拓展:循环与else 语句
    Python学习(北理工MOOC)笔记_第15张图片
  • 模块三:random库的使用:
    Python学习(北理工MOOC)笔记_第16张图片
    Python学习(北理工MOOC)笔记_第17张图片

Python学习(北理工MOOC)笔记_第18张图片
Python学习(北理工MOOC)笔记_第19张图片
Python学习(北理工MOOC)笔记_第20张图片

  • 蒙特卡罗方法求圆周率:
#CalPiV2.py
from random import random
from time import perf_counter
DARTS = 1000*1000
hits = 0.0
start = perf_counter()
for i in range(1, DARTS+1):
    x, y = random(), random()
    dist = pow(x ** 2 + y ** 2, 0.5)
    if dist <= 1.0:
        hits = hits + 1
pi = 4 * (hits/DARTS)
print("圆周率值是: {}".format(pi))
print("运行时间是: {:.5f}s".format(perf_counter() - start))

第五周 函数和代码复用

  • 字符串反转:
    Python学习(北理工MOOC)笔记_第21张图片
  • 汉诺塔
    • 分析:只需要关心最简单情况(基例)和从n-1到n情况(链条)即可
      最简单情况:n=1
      从n-1到n情况:先把n-1个挪到中间柱子上,再把第n个挪到目标柱子上,最后把n-1个挪到目标柱子上
      Python学习(北理工MOOC)笔记_第22张图片
  1. 模块4:PyInstaller库的使用
  • PyInstaller库概述:
    • 将.py源代码转换为无需源代码的可执行文件
    • 安装第三方库需要pip工具
      (cmd)中:pip install pyinstaller

你可能感兴趣的:(Python基础学习)