本笔记整理自MOOC上的Python课程,本课程介绍了Python的入门级经典编程例子、Python基础语法以及Python的计算生态。
课程链接为:Python语言程序设计-北京理工大学
目录
Python技术的全局化视角概览图
写在前面
Python代码有着众所周知的强制的易读性。
其实Python代码中写分号也未尝不可,比如你非常明确地希望你的程序只有“一行”代码,那么就将原来的分行形式写成一行就好了,在每句后面跟加上Python代码的稀客——分号,如果你的代码只有顺序结构,而没有复杂的分支或者循环结构,你会发现你的代码依然运行完好。
如果你嫌弃自己的Python代码又臭又长(尤其是print语句),也有方法解决,那就是分行,并在除分出的最后一行外的所有分行句尾加上符号"\",over.
一、input()
输出提示信息(可选),并接收输入的字符串。示例:control_str=input("haha! write it!")
二、eval()
去引号函数
三、print()
print("a:",b) 此种带逗号的写法,会在a:和b之间自动加上空格
print(a,end="") 输出a,没有输出回车
print("\r"+a,end="") 由于有end="",且有\r这个回车符,在循环中,此句的输出将覆盖上一句
"{:f}".format(xxx) 格式化输出
举例:print("转换后的温度是{:.2f}F".format(F)) 此句程序的打印效果是将F以".2f"的格式(即保留两位小数)打印在冒号之间的"{:.2f}"处。
四、import
1. import [库名]
2. form [库名] import *
3. import [库名] as [自起名称]
五、异常处理
解释:try之后的语句块1正常,则执行之后跳过语句块2;否则,发生异常/发生指定异常,就执行语句块2。
解释:没异常,执行1、3、4;有异常,则执行1、2、4。
六、turtle库(Python标准库)
调整绘图窗体在电脑屏幕中的布局
turtle.setup(宽度,高度,x(可选),y(可选));
设置绘制窗口的标题栏信息
turtle.title(title)
turtle空间坐标体系(画布上的)
1. 绝对坐标
turtle.goto(x,y)
2. 海龟坐标
turtle.foward(d) 或者 turtle.fd(d) 向前
turtle.bk(d) 向后
turtle.circle(r,angle) 以左侧的某点为圆心画弧线前进。r为半径,angle为行进角度,圆心默认为海龟左侧距离海龟r的地方。r为负数,即右转了。
3. 角度坐标
turtle.setheading(angle) 或者 turtle.seth(angle) 改变海龟运行方向(绝对角度)
turtle.left(angle) 向左改变海龟运行方向(相对角度)
turtle.right(angle) 向左改变海龟运行方向(相对角度)
turtle的RGB色彩模式
turtle.colormode(mode) mode写成1.0时候,使用的是RGB小数值模式;写成255时,使用的是RGB整数值模式。
画笔控制函数(成对出现)
turtle.penup() 画笔抬起来,或者海龟飞起来,即不留下痕迹。别名:turtle.pu()
turtle.pendown() 画笔落下来,或者海龟着地,即留下痕迹。别名:turtle.pd()
turtle.pensize(width) 设置画笔宽度,或者海龟腰围。别名:turtle.width(width)
turtle.pencolor(color) 设置画笔色彩,即龟壳颜色。color有三种形式:颜色字符串,如:"purple";RGB的小数值,如:0.63,0.13,0.94;RGB的元组值,如:(0.63,0.13,0.94)。
turtle.write() 直接绘制字符,示例:
turtle.write('我',font=("Arial",180,"normal"))
海龟隐藏
turtle.hideturtle() 隐藏海龟,或者说画笔
退出
turtle.done() 程序末尾加上此句,则图像不会自动退出,而是停留在最后的状态。
七、数据类型
整数类型的四种进制表示形式:十进制、二进制(0b或0B开头)、八进制(0o或0O开头)、十六进制(0x或0X开头)
浮点数的取值范围约为-10^308~10^308,精度10^(-16)
浮点数的计算存在不确定尾数问题,这是计算的底层设计问题(计算机内部是二进制),不是bug。举例:python在判断(0.1+0.2==0.3)时候将返回false。
round(x,d)函数,可以进行四舍五入操作,其中的d表示保留的小数位数。
浮点数支持科学计数法表示。举例:3e4=3*10^4;8E-9=8*10^(-9)。
复数类型举例:z=1+2j z.real获得实部,z.imag获得虚部
python中两个整数相除是浮点数。这一点比较特殊。举例:10/3=3.333333...;10//3=3,注意,"//"这个符号得到的是整数。
x**y=x^y
支持增强操作符:x+=y、x**=y等
基本数值运算函数:abs(x) 取绝对值; divmod(x,y) 做商余操作,输出(x//y,x%y);
pow(x,y) 输出x^y; pow(x,y,z) 输出(x^y)%z;
round(x,d) 保留d位小数; round(x) 对x取整;
max(...)、min(...);
int(x) 将浮点数甚至字符串x变成整数; float(x) 将整数甚至字符串x变成浮点数;
complex(x) 将x变成复数。
字符串中,'''这里可以输入"和'都能够显示出来,因为两端是三单引号'''
字符串中,可以通过str[m,n,step]对字符串进行切片
转义符为\,\b表示回退,\n表示换行(光标移到下行首),\r表示回车(光标移到本行首)
字符串操作符
x+y 连接字符串x和y; n*x 将字符串x复制n次;
x in s 如果x是s的子串,返回true,否则返回false
字符串处理函数
len(x) 返回字符串x的长度;
str(x) 将任何类型的x转化成字符串,这与eval()函数相反;
hex(x)、oct(x) 将整数x转化成十六进制或八进制的小写形式字符串,如oct(8)相当于"0o10";
chr(u) u为unicode编码,此函数将返回对应此编码的字符
ord(x) x为单字符,此函数将返回此单字符对应的unicode编码
字符串处理方法
str.lower()、str.upper() 返回字符串的副本,此副本是原副本的全小写/全大写形式
str.split(s) 返回以s分割的子字符串列表
str.count(sub) 返回str中子字符串sub出现的次数
str.replace(old,new) 返回字符串的副本,此副本中的子字符串old全部被字符串new替换
str.center(num,ch) str根据宽度num居中,宽度两侧的部分以字符ch填充
str.strip(chars) 去掉str的左侧和右侧,出现在字符串chars(或者说是字符数组)中的字符,然后返回
str.join(iter) 举例说明吧:",".join("12345")的返回值是"1,2,3,4,5"
字符串类型的格式化
槽,一个字符串中的定义。槽默认对应于后面的format()中的顺序;如果槽中有整数,则有以下意义:
另外,槽中可以通过冒号来引导对格式化的配置方式,以下罗列六种:
其中,如果设置的宽度小于实际输出的宽度,输出依然会正常输出出来,宽度默认为输出自身的宽度。
八、time库(Python标准库)
python中处理时间的标准库。
主要的三类函数:
时间获取的函数中,
time()返回值是一个浮点数(最原生的状态);ctime()返回一个人能看懂的字符串格式;gmtime()返回一个可供计算机处理的时间格式。
时间格式化的函数中,
可以看出,前一个函数是获取时间信息,后一个函数是将字符串形式的时间信息转换成计算机可认的时间格式。
补充一下常见的格式化字符串:
程序计时中,
九、进度条设计
实验表明,在用户体验上,如实的进度条,不如在整体上先慢后快的进度条让人愉悦。
下面是一个模拟“如实”的进度条程序片段:
import time
scale=50
print("begin".center(scale,"-"))
start=time.perf_counter()
for i in range(scale+1):
a='*'*i
b='.'*(scale-i)
c=(i/scale)*100
d=time.perf_counter()
print("\r{:3.0f}%[{}->{}]{:.2f}s".format(c,a,b,d),end="")
time.sleep(0.1)
print("\n"+"end".center(scale,'-'))
十、程序的控制结构
二分支结构的紧凑形式:<表达式1> if <条件> else <表达式2> 如果满足条件,执行表达式1;否则执行表达式2。
紧凑形式中只能支持表达式,而不是语句。所以复杂语句还得用"if...else..."这个二分支结构。
多分支结构:if xxx: ... elif xxx: ... else: ...
操作符:== 表示“等于”; != 表示“不等于”。
用于两个条件进行组合的三个保留字: x and y 与运算; x or y 或运算; x not y 非运算。
分支结构是阅读代码时候的重要部分,看清它对阅读代码很重要。
遍历循环:for <循环变量> in <遍历结构>:<语句块>
解释:从遍历结构中依次取东西到循环变量,然后执行语句块,重复此操作直到遍历完成。
计数循环: for i in range(N):... 这里的range()函数提供一个0到N-1的整数序列
for i in range(M,N):... 这里的range()函数产生一个M到N-1的整数序列
for i in range(M,N,K):... 这里的range()函数产生一个0到N-1,且步长为K的整数序列
字符串遍历循环: for c in s:... 这里的字符串s依次提供它的每个字符给c
列表遍历循环: for item in ls:... 这里的列表ls依次提供它的每个元素给item
文件遍历循环: for line in fi:... 这里的文件标识符fi依次提供它所对应文件的每一行给line
还有元组、字典等类型可以通过此种方式进行遍历。
无限循环:while xxx:...
循环控制保留字:break、continue
循环的扩展
循环+else。如果循环执行到了break语句,则else部分的语句将不会被执行;否则,即循环正常执行完成(与continue无关哦),程序在循环完成之后将执行else之后的语句作为奖励。
十一、random库(Python标准库)
Python中用于生成(伪&