第1周-Python基本语法元素
- 编程的基本概念:编译和解释、静态语言和脚本语言、IPO(Input、Process、Output)。
- Python的开发环境:www.python.org
Guido van Rassum——Python语言的创立者。
PSF(Python Software Foundation)——致力于保护Python语言开放、开源和发展的非盈利组织。
Python语法更接近人的自然语言,下面通过一个计算圆面积的小程序来感受一下:
r = 25
area = 3.14*r*r
print("{:.2f}F".format(area))
Python语言的特点:语法简介(是C语言编程量的10%)、强制可读性、较少的底层语法元素、具有庞大的计算生态(13万的第三方库)
- 缩进——表达程序的格式框架,是严格要求的。
- 注释——单行注释:以
#
开头;多行注释:以```开头和结尾。 - 命名和保留字:
变量——用来保存和表示数据的占位符号,用等号=
向变量赋值或修改值。
命名规则——大小写敏感,首字符不能是数字,不能与保留字重名。
保留字——33个Python关键字
and | elif | import | faise | global |
---|---|---|---|---|
as | else | in | return | nonlocal |
assert | except | is | try | Ture |
break | finally | lambda | while | False |
class | for | not | with | None |
continue | from | or | yield | |
def | if | pass | del |
- 数据类型:
数字类型——10110100
字符串类型——“10,110,100"
列表类型——[10,110,100] - 字符串的序号
正向递增——从左向右,0开始
反向递减——从右向左,-1开始 - 字符串的使用
索引——返回单个字符:<字符串>[索引]。
切片——返回一段字符串:<字符串>[索引M:索引N]。 - 语句与函数
赋值语句——c=input()
分支语句——使用保留字if、elif、else构成条件判断的分支结构,注意最后使用冒号":"来连接执行后续语句。
函数——根据输入参数产生不同输出的功能过程:print(<参数>)。
比如:eval()——评估函数,去掉参数最外侧引号并执行余下语句的函数。
>>>eval("1")
1
>>>eval("1+2")
3
>>>eval('"1+2"')
"1+2"
>>>eval('print("Hello")')
Hello
第1周编程练习-温度转换
温度的刻画有两个不同体系:摄氏度(Celsius)和华氏度(Fabrenheit)。
请编写程序将用户输入华氏度转换为摄氏度,或将输入的摄氏度转换为华氏度。
转换算法如下:(C表示摄氏度、F表示华氏度)
C = ( F - 32 ) / 1.8
F = C * 1.8 + 32
要求如下:
(1) 输入输出的摄氏度采用大写字母C开头,温度可以是整数或小数,如:C12.34指摄氏度12.34度;
(2) 输入输出的华氏度采用大写字母F开头,温度可以是整数或小数,如:F87.65指摄氏度87.65度;
(3) 不考虑异常输入的问题,输出保留小数点后两位;
(4) 使用input()获得测试用例输入时,不要增加提示字符串。
TempStr = input()
if TempStr[0] in ['F', 'f']:
C = (eval(TempStr[1:]) - 32)/1.8
print("C{:.2f}".format(C))
elif TempStr[0] in ['C', 'c']:
F = 1.8*eval(TempStr[1:]) + 32
print("F{:.2f}".format(F))
第2周-Python基本图形绘制
turtle海龟绘图库:>>>import turtle
- turtle绘图窗体布局
turtle.setup(800,800,0,0) //前两个参数是绘图窗体的长和宽,后两个参数是相对于屏幕左上角的坐标
turtle.setup(800,800) //不指定位值坐标,则默认在屏幕正中心
- turtle空间坐标体系和角度坐标体系
绘图窗体空间内,0,0在窗口的中心位置,将窗口分为四个象限turtle.goto(100,-100)
同时还有一个海龟坐标,以海龟画笔的方向为参照
turtle.bk(d) //后退d距离
turtle.fd(d) //前进d距离
turtle.circle(r,angle) //以r为半径,圆心默认在海龟左侧,绘制angle角度的弧线
turtle.seth(angle) //改变海龟行进方向,angle为绝对度数
turtle.left(angle)
turtle.right(angle)
- RGB色彩体系
可以使用RGB整数值模式255,255,255;或者RGB小数值模式1,1,1
turtle.cilormode(mode) //默认采用小数值(1.0),可切换为整数值(255)
- import用法
import <库名>
import <库名> as <库别名>
>>>import turtle as t
- turtle画笔控制函数
t.penup()-->t.pu()
t.pendown()-->t.pd()
t.pensize()-->t.width()
t.pencolor() // 色彩参数可以有三种类型:1、小写颜色名称的字符串("purple");2、RGB小数值;3、RGB元组值
t.forward()-->t.fd()
t.circle()
t.setheading()-->t.seth()
- 循环语句-按一定次数循环执行的一组语句
for <变量> in range(<参数>)
<被循环执行的语句>
//range()函数-产生循环计数序列
range(N)-产生0到N-1的整数序列,共N个
range(M,N)-产生M到N-1的整数序列,共N-M个
- 画一条蛇
import turtle as t
t.setup(650,350,200,200)
t.penup()
t.fd(-250)
t.pendown()
t.pensize(25)
t.pencolor("purple")
t.seth(-40)
for i range(4):
t.circle(40,80)
t.circle(-40,80)
t.circle(40,80/2)
t.fd(40)
t.circle(16,180)
t.fd(40*2/3)
t.done() //这个done()函数,是让程序运行结束时不自动退出。
第3周-基本数据类型
- 整数类型
十进制:1010,99,-217
二进制,以0b或0B开头:0b010,-0B101
八进制,以0o123,-0O456
十六进制,以0x或0X开头:0x9a,-0X89
- 浮点数类型
取值范围数量级约-10308至10308,精度数量级10-16。
浮点数间的运算存在不确定尾数,一般发生在10-16左右,需要用到round()函数
round(x,d):对x四舍五入,d是小数截取位数
浮点数间运算及比较用round()函数辅助
- 复数类型
如果x2=-1,那么x的值是什么?
定义j=√(-1),以此为基础,构建数学体系
a+bj被称为复数,其中,a是实部,b是虚部
z=1.23e-4+5.6e+89j
z.real-->1.23e-4 //获得实部
z.imag-->5.6e+89 //获得虚部
- 数值运算操作符
操作符及使用 | 描述 |
---|---|
x+y | 加,x与y之和 |
x-y | 减,x与y之差 |
x*y | 乘,x与y之积 |
x/y | 除,x与y之商,10/3结果是3.33333...浮点数 |
x//y | 整数除,x与y之整数商,10//3结果是3 |
+x | x本身 |
-y | y的负数 |
x%y | 余数,模运算,10%3结果是1 |
x**y | 幂运算,x的y次幂,当y是小数时,开方运算,10**0.5结果是√(10) |
abs(x) | x的绝对值,abs(-10.01)结果是10.01 |
divmod(x,y) | 商余,(x//y,x%y),同时输出商和余数,divmod(10,3)结果是(3,1) |
pow(x,y[,z]) | 幂余,(x**y)%z,[...]表示参数z可以省略,pow(3,pow(3,99),10000)结果是4587 |
round(x[,d]) | 四舍五入,d是保留小数位数,默认值为0,round(-10.123,2)结果是-10.12 |
max(x1,x2,...,xn) | 返回最大值,max(1,9,5,4)结果为9 |
min(x1,x2,...,xn) | 返回最小值,min(1,9,5,4)结果为1 |
int(x) | 将x变成整数,舍弃小数部分,int(123.45)结果为123;int("123")结果为123 |
float(x) | 将x变成浮点数,增加小数部分,float(12)结果为12.0;float("1.23")结果为1.23 |
complex(x) | 将x变成复数,增加虚数部分,complex(4)结果为4+0j |
- 字符串类型
由一对单引号或双引号表示单行字符串。
由一对三单引号或三双引号可表示多行字符串。
如果希望在字符串中包括单引号或双引号-->
如果希望在字符串中既包括单引号又包括双引号-->用一对三单引号表示 - 字符串的序号
索引--正序、逆序
切片--<字符串>[M:N],M缺失表示''至开头'',N缺失表示''至结尾''。
切片高级用法--<字符串>[M:N:K],根据步长K对字符串切片。
"O一二三四五六七八九十"[1:8:2]结果是"一三五七"
"O一二三四五六七八九十"[::-1]结果是"十九八七六五四三二一O"
- 字符串的特殊字符
转义符:\ -->表达特定字符的本意
\b(光标回退一格)、\n(换行)、\r(光标移动到本行首) - 字符串操作符
操作符及使用 | 描述 |
---|---|
x+y | 连接两个字符串x和y |
x*n | 赋值n次字符串x |
x in s | 如果x是s的子串,返回True,否则返回False |
字符串切片操作的例子
weekStr = "星期一星期二星期三星期四星期五星期六星期日"
weekId = eval(input("请输入星期数字(1-7):"))
pos = (weekId - 1) * 3
print(weekStr[pos:pos+3])
//优化改写
weekStr = "一二三四五六日"
weekId = eval(input("请输入星期数字(1-7):"))
print("星期" + weekStr[weekId-1])
- 字符串处理函数
函数及使用 | 描述 |
---|---|
len(x) | 返回字符串x的长度 |
str(x) | 将任意类型x转化成所对应的字符串类型,与eval()函数相对应 |
hex(x) 或 oct(x) | 整数x的十六进制或八进制小写形式字符串 |
chr(x) | x为Unicode编码,返回其对应的字符 |
ord(x) | x为字符,返回其对应的Unicode编码 |
Unicode编码——统一字符编码,覆盖几乎所有字符的编码方式。0-1114111(0x10FFFF)空间。
for i in range(12):
print(chr(9800+i), end="")
//输出结果是十二星座符号:♈♉♊♋♌♍♎♏♐♑♒♓
- 字符串处理方法
方法及使用 | 描述 |
---|---|
str.lower()或str.upper() | 返回字符串的副本,全部字符小写或大写 |
str.split(sep=None) | 返回一个列表,由str根据sep被分隔的部分组成:"A,B,C".split(",") 结果为['A','B','C'] |
str.count(sub) | 返回子串sub在str中出现的次数:"a apple a day".count("a") 结果为4 |
str.replace(old,new) | 返回字符串str副本,所有old子串被替换为new |
str.center(width[,fillchar]) | 字符串str根据宽度width居中,fillchar可选:"python".center(20,"=") 结果为'=======python======='
|
str.strip(chars) | 从str中去掉在其左右两侧chars中列出的字符:"= pythonx= ".strip(" =x") 结果为"python"
|
str.join(iter) | 在iter变量除最后元素外,每个元素后增加一个str:",".join("12345") 结果为"1,2,3,4,5" #主要用于字符串分隔 |
- 字符串类型的格式化
格式化是对字符串进行格式表达的方式:<模板字符串>.format(<逗号分隔的参数>)
槽:占位信息符,以一对大括号表示。
槽内部对格式化的配置方式:{<参数序号>:<格式控制标记>}
: | <填充> | <对齐> | <宽度> | <,> | <.精度> | <类型> |
---|---|---|---|---|---|---|
引导符号 | 用于填充的单个字符 | <左对齐,>右对齐,^居中对齐 | 槽设定的输出宽度 | 数字的千位分隔符 | 浮点数小数精度或字符串最大输出长度 | 整数类型b(二进制),c(Unicode编码),d(十进制),o(八进制),x(十六进制),X(大写十六进制),浮点数类型e(科学计数法),E(科学计数法),f(通常非科学记数法),%(以百分号形式) |
- time库——是Python中处理时间的标准库
提供获取系统时间并格式化输出功能
import time
time.<b>()
time库包括三类函数:
函数 | 描述 |
---|---|
time() | 获取当前时间戳,即计算机内部时间值,浮点数:time.time() -->1516939876.6022282
|
ctime() | 获取当前时间并以易读方式表示,返回字符串:time.ctime() -->Fri Jan 26 12:11:16 2018
|
strftime(tpl,ts) | tpl是格式化模板字符串,用来定义输出效果;ts是计算机内部时间类型变量:>>>t=time.gmtime() >>>time.strftime("%y-%m-%d %H:%M:%S",t) -->2018-01-26 12:55:20
|
strptime(str,tpl) | tpl是格式化模板字符串,用来定义输出效果;str是字符串形式的时间值;将时间字符串反向输出为计算机内部可以操作的时间。 |
perf_counter() | 返回一个CPU级别的精确时间计数器,单位为秒。由于这个计数值起点不确定,连续调用并计算差值才有意义:>>>start = time.perf_counter() >>>end = time.perf_counter() >>>end - start
|
sleep(s) | s为拟休眠的时间,单位是秒,可以是浮点数:>>>def wait(): time.sleep(3.3) >>>wait() #程序将等待3.3秒后再退出
|
实例:文本进度条
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)) //c槽显示百分比,3表示3个字符宽度,.0表示没有小数
time.sleep(0.1)
print("------执行结束------")
------执行开始------
0 %[->..........]
10 %[*->.........]
20 %[**->........]
30 %[***->.......]
40 %[****->......]
50 %[*****->.....]
60 %[******->....]
70 %[*******->...]
80 %[********->..]
90 %[*********->.]
100%[**********->]
------执行结束------
实例:单行动态刷新进度条
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="")
print("执行结束".center(scale//2, "-"))