输出不大于1000的斐波那契数列
#斐波那契数列(数的值等于前面两个数加起来)
a,b=0,1
while a<1000:
print(a,end=’,’)#end=,表示print最后是什么结束
a,b=b,a+b
#同切圆的绘制:
import turtle as t
t.pensize(2) #设置画笔size
t.circle(10) #画一个半径为10个像素的圆
t.circle(40) #画一个半径为40个像素的圆
t.circle(80) #画一个半径为80个像素的圆
t.circle(160) #画一个半径为160个像素的圆
#输出当前计算机的系统时间
from datetime import datetime as d
now =d.now()#获取当前的日期以及时间
print(now)
print(now.strftime("%x"))#输出其中的日期部分
print(now.strftime("%X"))#输出其中的时间部分
IPO程序编写方式:输入数据,处理数据,输出数据
输入:文件输入,网络输入,控制台输入,交互式界面输入,随机数据输入,内部参数输入,
输出:控制台输出,图形输出,文件输出,网络输出,操作系统内部输变量输出
处理:处理的方法叫做算法
理解问题的计算部分:
分析问题,划分边界,划分问题的功能边界,设计算法,编写程序,调试测试,升级维护。
Python程序语法元素分析
1.采用严格的“缩进”,来表明程序的格式框架
2.注释:#,’’’ ‘’’(分别代表单行注释和多行注释)
3.允许使用大小写字母,数字,下划线,汉字等字符进行变量命名,名字首字符不可以是数字,中间不可以有空格,长度无限制,对大小写敏感,注意不可和保留字重复,如:for
字符串:
文本在程序中已string类型来表示
用单引号或者双引号表示字符串
字符串是字符的序列
索引:正向递增序号索引(0开始即第一个字符),反向递减序号索引(-1开始表示最后一个)
区间访问:[n:M]不包含M
赋值语句:=
input()函数
从控制台获得用户输入,input()函数将用户在控制台输入的内容按字符串返回。
分支语句:
if,elif,else
eval(<字符串>)函数:
将输入的字符串转变成Python语句,执行并返回执行的结果
注意:eval(“hello”)会被解释成一个变量,若没有声明这个变量会报错。
eval("‘hello’")就是一个字符串
若用户希望输入数字,小数或者负数,可以采用:
eval(input())组合
print()函数:可以自行决定如何格式化输出
循环语句:
while()
for i in range(range):
函数:
实际编程中,一般将特定功能的的代码写在一个函数里,便于阅读与复用,也使得程序的模块化更好。
函数可以理解成对一组特定功能的封装。
def 函数名():
Python的模块编程思想:
这种通过使用函数库并利用库中的函数进行编程的方法是Python语言最重要的特点,称为“模块编程”
import引用函数库的两种方式:
import <库名>
程序可以调用库名中的所有函数,调用格式:
<库名>.<函数名>(<函数参数>)
from <库名> import <函数名,函数名,函数名。。。>
from <库名> import * #*是通配符,代表所有函数.
调用格式:<函数名>(<函数参数>)
turtle库语法元素分析
基本框架:小乌龟在坐标系中爬行,爬行的轨迹绘制成图像
刚刚开始绘制时,小海龟位于画布中央,即(0,0),行进方向为水平右方。
初始化函数:
setup(width,height,startx,starty)
width:窗口宽度,整数表示像素值,小数表示窗口宽度与屏幕的比例。
height:窗口高度,整数表示像素值,小数表示窗口高度与屏幕的比例。
startx:窗口左侧与屏幕左侧的像素距离,若果是None,窗口位于屏幕水平中央。
starty::窗口顶部与屏幕顶部的像素距离,若果是None,窗口位于屏幕垂直中央。
画笔控制函数:
- penup()和pendown()函数:分别表示抬起画笔和放下画笔。抬起画笔之后的移动画笔不会绘制形状。
- pensize()函数:设置画笔宽度,当无参数时返回当前画笔的宽度。
- pencolor(“colorstring”)或者pencolor((r,g,b))函数:设置画笔颜色,当无参数时返回当前画笔的颜色。
形状绘制函数:
- forward(distance),fd(distance)函数:控制画笔向当前行进方向前进一个距离,distance表示姓金的像素值,负数表示反方向前进。
- seth(to_angle),settheading(to_angle)函数:改变画笔绘制方向,to_angle:角度的整数值。角度坐标体系以正东方向为绝对0度,正西方向为绝对180度。
- circle(radius,extent=None)函数:绘制一个弧形,radius:弧形半径,正数时,半径在小乌龟的左侧,负数时,半径在小乌龟右侧。extent:弧形的角度,None时,绘制整个圆形。
函数的封装:
将绘制功能和初始化功能分开,将绘制功能用函数封装起来。
深入Python语言
基本数据类型:
3种数字类型的概念和使用以及在计算机中的表示方法:
- 3种数据类型:整数,浮点数,复数。(分别对应数学里的整数,实数,复数)。
整数:
- 整数的例子:1010,99,-217,0x9a,-0x89
- 整数类型共有四种进制表示:十进制,二进制,八进制,十六进制。
- 引导符:十进制(默认无引导符),二进制(0b或0B),八进制(0o或0O),十六进制(0x或0X)
- 范围:理论上负无穷到正无穷,实际上受限于内存大小。
浮点数:
- Python语言要求所有的浮点数必须带有小数部分,小数部分可以使0,为的是区分浮点数和整数。
- 浮点数的例子:0.0,-77.,-2,17,3.1416,96e4,4.3e-3,9.6E5
- 科学计数法使用字母e或者E作为幂的符号,以10为基数,含义:,4.3e-3=0.0043,9.6E5=960000.0
- 浮点数的数值范围和小数精度受不同计算机系统限制,使用sys.float_info查看
- 由于Python语言能够支持无限制且准确的整数计算,因此,若希望获得精度更高的计算结果,往往采用整数而不是直接采用浮点数。例如:计算a=3.131592653,b=1.234567898相乘,可以直接浮点数相乘,也可以去掉小数点整数相乘。使用整数表达浮点数的方法是高精度运算的基本方法之一。
- 高精度浮点数运算类型:由标准库decimal提供Decimal类型。
- 对于高精度科学计算以外的绝大多数运算,浮点数类型足够“可靠”,误差仅为0.0000000000000002
复数类型:
- 复数可以看作是二元有序实数对(a,b),表示为a+bj,其中,a是实部;b是虚部。复数是实数在二维平面空间旋转的一种表示。
- Python语言中,复数的虚部通过后缀J或者j来表示,例如:12.3+4j,-5.6+7j,1.23e-4+5.67e+89j
- 复数类型的实部和虚部都是浮点数类型
- 对于复数z,可以用z.real和z.imag分别获得实部和虚部。
数字类型的操作
- 数值运算操作符:+,-, , ,/ ,//(整除),%(模运算),-x,+x,**(幂)
- 三种数据类型之间存在一种逐渐扩展的关系:整数->浮点数->复数,整数可以看作无小数点的浮点数,浮点数可以看作虚部为0的复数。
- 规则:
- 整数之间的运算,如数学意义上的结果为小数,结果为浮点数。
- 整数之间的运算,如数学意义上的结果为整数,结果为整数。
- 整数和浮点数混合运算,输出结果为浮点数。
- 整数或浮点数和复数运算 ,输出结果为复数。
- 增强赋值操作符:+=,-=,*=,/=,//=,%=,**=
内置数值运算函数:
abs(x):x的绝对值
divmod(x,y):输出为二元组形式
pow(x,y,[z]):幂运算,中括号内的内容可以省略
round(x,[y]):对x四舍五入,y表示保留几位小数,可以省略。
max(x1,x2,…):最大值
min(x1,x2,…):最小值
内置的数字类型转换函数:
int(x)转为整数
float(x)转为浮点数
complex(re[,im])生成一个复数,re可以是整数浮点数字符串,im可以是整数和浮点数。
Python的标准数学库:
math库:
- 不支持复数,只支持整数和浮点数。
- 提供了4个数学常数,44个函数,包括16个数值表示函数,8个幂对数函数,16个三角对数函数,4个高等特殊函数。
- 书本p71有具体的函数介绍。
字符串类型的概念和使用:
概念:
- 字符串是字符的序列表示,可以用单引号,双引号,三引号表示字符串。
- 两种序号体系:正:从0开始递增,表示第一个。负:从-1开始递减,表示最后一个。
- 区间访问方式:[N:M]
- 字符串以Unicode编码存储,因此,字符串的英文字符和中文字符都算作1字符。
基本的字符串操作符
x+y:连接字符串xy
x*n:复制n次x
x in s:如果x是s的子串返回True,否则返回False
str[i]:索引,返回第i个字符
str[N:M]:切片,返回N:M的子串,不包括M
还有各种特殊的反义字符。
内置的字符串处理函数:
- len(x):返回字符串x的长度,也可以返回其他组合数据类型的元素个数
- str(x):将任意类型x转化成字符串并返回
- chr(x):返回Unicode编码x对应的单字符
- ord(x):返回单字符表示的Unicode编码
- hex(x):返回整数x对应十六进制数的小写形式字符串
- oct(x):返回整数x对应八进制数的小写形式字符串
内置的字符串处理方法:
- str.lower():返回字符串str的副本,全部字符小写
- str.upper():返回字符串str的副本,全部字符大写
- str.islower():当str全部字符都是小写时,返回True,否则返回False
- str.isprintable():当str全部字符可以打印时时,返回True,否则返回False
- str.isnumeric():当str全部字符都是数字时,返回True,否则返回False
- str.isspace():当str全部字符都是空格时,返回True,否则返回False
- str.endwith(suffix [,start[,end]]):当str以suffix结尾时,返回True,否则返回False,可以规定检测区域
- str.startswith(prefix [,start[,end]]):当str以prefix开头时,返回True,否则返回False,可以规定检测区域
- str.split(sep,maxsplit):返回一个列表,由str根据sep被分割的部分构成,maxsplit规定最高索引位,可以不写
- str.count(sub,start,end):返回从start到end中sub出现的次数,默认是整一个str
- str.replace(old,new,count):返回str的副本,将里面的old全部替换成new,若给出count代表前count个old被替换
- str.center(width,fillchar):字符串居中函数,百度一下
- str.strip(chars):返回str的副本,在其左侧和右侧去掉chars中列出的字符,若无chars返回原型
- str.zfill(width):返回str的副本,长度为width,不足部分用0代替
- str.format():返回字符串str的一种排版格式,书本p85开始。
- str.join(iterable):返回一个新的字符串,由组合数据类型iterable变量的每一个元素组成,元素间用str间隔
程序的控制结构:
程序的分支结构:
-
单分支结构:if 语句
-
二分之结构:if else 语句
-
多分支结构:if elif else 语句
程序的循环结构:
for语句:
for <循环变量> in <遍历结构>:
<语句块>
遍历结构:字符串,文件,组合数据类型,range()函数等
循环遍历的另一种扩展模式:
for <循环变量> in <遍历结构>:
<语句块>
else:
<语句块>
for正常运行结束后就会运行else里面的代码
无限循环 while
while <条件>:
<语句块>
循环遍历的另一种扩展模式:
while <条件>:
<语句块>
else:
<语句块>
while正常运行结束后就会运行else里面的代码
循环保留字:break和continue
- 他们用来辅助控制循环的执行
- break 用来跳出最内层的for或while循环,脱离该循环后程序从循环代码后继续运行
- continue 结束本次,进行下一次
random库 的使用
- Python内置的random库主要用于产生各种分布的伪随机数序列。
程序的异常处理:
异常处理:try-except
高级用法:
try:
except:
N个except:
最后:finally:
函数和代码的复用:
函数的基本使用:
函数的定义:
- 函数是一段具有特定功能的,可重用的语句组,用函数名来表示并通过函数名进行功能调用。
- 目的:降低编程难度和代码重用。
- 语法形式:
def <函数名> (<参数列表>):
<函数体>
return <返回值列表> - 函数调用的过程:
- 调用程序在调用处暂停执行。
- 在调用时将实参复制给函数的形参。
- 执行函数体语句。
- 函数调用结束给出返回值,程序回到调用前的位置继续执行
lambda函数:
-
lambda保留字,用来定义一种特殊的函数,匿名函数。
<函数名> = lambda<参数列表>:<表达式> -
例如:f = lambda x,y:x+y
f(1,2)
函数参数的传递:
可选参数和可变数量参数:
- 可选参数
定义函数时,如果某些参数存在默认值,即部分参数不一定需要在调用程序时输入,可以在定义时直接为这些参数指定默认值,这些参数必须在非可选参数的后面。 - 可变数量参数
通过在参数前增加(*)号实现。带有*号的参数必须在参数列表的最后,调用时这些参数会被当做一个元组类型传递到函数里。
参数位置和名称传递:
- 函数调用时,实参默认按位置顺序传递给函数。
- 但是在很多参数时,这种调用方式的可读性很差。
- 因此提供了按照参数名称输入实参的方式。
函数的返回值:
- return语句用来退出函数并将程序返回到函数被调用的位置继续执行。
- return可以同时将0,1或者多个函数运算后的结果返回给函数被调用处的变量
- 函数可以没有return
- return返回多个值时以元祖类型保存
函数对变量的作用:
Python函数对变量的作用遵守如下原则:
(1)简单数据类型变量无论是否与全局变量重名,仅在函数内部创建和使用,函数退出后变量被释放,如有全局同名变量,其值不变。
(2)简单数据类型变量在用global声明后,作为全局变量使用,函数退出后该变量保留且值被函数改变。
(3)对于组合数据类型变量的全局变量,如果在函数内部没有被真实创建的同名变量,则函数内部可以直接使用并修改全局变量的值。
(4)如果函数内部真实创建了组合数据类型变量,无论是否有同名全局变量,函数仅对局部变量进行操作,函数退出后局部变量被释放,全局变量值不变。
datetime库的使用:
9个常用属性:
- min
- max
- year
- month
- day
- hour
- minute
- second
- microsecond
3个常用方法:
- isoformat()
- isoweekday()
- strftime(format)
首先要导入库
然后创建datetime对象(三种方法):dtaetime.now(),utcnow(),datetime()
具体看书本135
格式化控制符:
%Y 年份
%m 月份
%B 月名
%b 月名缩写
%d 日期
%A 星期
%a 星期缩写
%H 小时(24h制)
%M 分钟
%S 秒
%x 日期 月/日/年
%X 时间 时:分:秒
组合数据类型:
概述
组合数据类型的分类:
序列类型:字符串(str),元祖(tuple),列表(list)
集合类型:集合(set)
映射类型:字典(map)
序列类型:
- 需要访问序列中某个特定值时,只需通过下标访问即可,如:要访问第二个元素,可通过s1访问。
- 由于元素之间存在顺序关系,所以序列中可以存在数值相同但位置不同的元素。
- 支持成员关系操作符(in),长度计算函数(len()),分片([ ]),元素本身也可以是序列类型。
- 字符串可以看成是单一字符的有序组合,属于序列类型。
- 元组是包含0个或多个数据项的不可变序列类型。
- 列表是一个可以修改数据项的序列类型,使用最灵活。
- 无论是哪种序列类型,都是相同的索引体系,都可以正向递增序号和反向递减序号。
- 序列类型的通用操作符和函数:
* x in s ----------------------------------------------若x是s的元素,返回True,否则返回False
* x not in s ----------------------------------------若x不是s的元素,返回True,否则返回False
* s + t ---------------------------------------------- 连接s和t
* s*n 或 n*s ---------------------------------------将序列s复制n次
* s [ i ] -----------------------------------------------索引
* s [ i : j ] --------------------------------------------分片,返回i到j的子序列,不包含j
* s [ i : j : k ] ---------------------------------------步骤分片,返回 i 到 j 以 k 为步长的子序列
* len(s) ----------------------------------------------序列s的元数个数
* min(s) ---------------------------------------------序列s中的最小元素
* max(s) --------------------------------------------序列s中的最大元素
* s.index(x, i, j) -----------------------------------序列s从 i 开始到 j 位置中第一次出现元素x的位置
* s.count(x) ----------------------------------------序列s中出现x的总次数
元组(tuple)
- 一旦创建就不可以修改
用途:
- 固定数据项
- 函数多返回值
def func(x):
return x,x**3 - 多变量同步赋值
a,b = “tiger”,“cat” - 循环遍历
import math
for x,y in ((1,0),(2,5),(3,8))
print(math.hypot(x,y))
声明一个元组:
creature = “cat”,“dog”,“tiger”
or
creature = (“cat”,“dog”,“tiger”)
列表和列表的操作
- 列表是有序序列,无长度限制。
- 列表可以自有增删元素,使用灵活。
- 可以采用标准的比较操作符(<,<=, ==, !=, >=, >),列表的比较实际上是单个数据项的逐个比较。
- 声明:用中括号([ ])或者list()将元组或者字符串转化成列表。直接用list()返回一个空的列表。
- 将列表赋值给另一个列表不会生成新的列表对象,只会对数据进行引用。
- 当使用一个列表给另一个列表赋值时,遵循多增少减的原则,例如:
vlist[ 1 : 3 ] = [“new_bit”,“new_computer” , “123” ],那么vlist就会增加元素。
vlist[ 1 : 3 ] = [ “fewer” ],那么vlist就会减少元素。 - 列表也可以通过for-in语句对其元素进行遍历。
集合类型:
- 0个或多个的无序组合,没有索引和位置的概念,不能分片。
- 元素不可重复元素
- 元素可以动态删除或增加。
- 元素类型:固定数据类型。判断元素是否是固定类型通过其是否能够进行哈希运算。
- 声明:
S= {424,“BIT”,(10,“cs”),424} - 使用集合类型能够用来过滤重复元素。
- set(x)可以用于生成集合
- 集合类型操作符:书本p158上表
- 集合类型10个操作函数或方法p158下表
映射类型:
- 每一个元素是一个键值对。
- 元素之间是无序的。
- 键值对 刻画了一个属性和它的值。
字典
- 列表是存储和检索数据的有序序列。当访问列表中的元素时,是通过索引来访问的。很多应用程序需要更灵活的信息查找方式,例如,在检索学生信息时需要基于身份证查找,而不是信息存储的序号,这个时候就要使用键值对了。
- 字典通过大括号({})建立建立模式:{<键>:<值>,<键>:<值>…}
- 键值对之间没有顺序且不可重复。
- 访问值模式:值 = 字典变量【键】
- 常用函数和方法:书本p167
文件和数据格式化:
文件的使用:
文件概述:
- 文件包括两种类型:文本文件和二进制文件。
- 文本文件一般由单一特定编码组成。如UTF-8编码,内容容易统一展示和阅读,由于文本文件存在编码,因此,他也被看做是存储在磁盘上的长字符串。
- 二进制文件直接由比特0和比特1组成,没有统一字符编码。应用于图片视频等。
- 区别:是否有统一的字符串编码。
- 二进制由于没有统一字符串编码,只能当做字节流,而不能看做字符串。
- 无论文件是创建文文本文件还是二进制文件,都可以用文本文件方式和二进制文件方式打开,但是打开后操作不同。
文件的打开和关闭:
- Python对文本文件和二进制文件采用统一的操作步骤:“打开------》操作------》关闭”
- 通过open()函数打开一个文件。
- 格式:《变量名》=open(《文件名》,《打开方式》)
- 文件名就不做过多介绍,(相对路径/绝对路径)
- 打开方式:
- ‘r’-(只读模式,文件不存返回异常FileNotFoundError,默认值),
- ‘w’-(覆盖写模式,文件不存在则创建,存在则完全覆盖),
- ‘x’-(创建写模式,文件不存在则创建,存在则返回异常FiileExistsError),
- ‘a’-(追加写模式,文件不存在则创建,存在则在文件最后追加内容),
- ‘b’-(二进制文件模式),
- ‘t’-(文本文件模式),
- ‘+’-(与r/w/x/a一同使用,在原功能上增加同时读写功能)
- 打开方式使用字符串方式表示。
- r/w/x/a可以和b/t/+组合使用。
- 文本使用结束后使用close()方法结束。
文件的读写:
读:
- 文件打开之后,对打开方式的不同可以对文件进行相应的读写操作。
- 文本文件方式打开时,读写按照字符串方式,采用计算机使用的指定编码。
- 二进制文件方式打开时,读写按照字节流方式。
- 文件内容读取方法:
- 《file》.readall()-(读取整个文件内容,返回一个字符串或字节流)
- 《file》.read(size=-1)-(从文件中读入整个文件内容,size表示读取的长度,默认全读)
- 《file》.readline(size=-1)-(读入一行,若给出参数,表示读取一行的长度)
- 《file》.readlines(hint=-1)-(读取所有行,以每行问元素形成一个列表,若果给出参数,表示读多少行)
写:
- 《file》.write(s)-(向文件写入一个字符串或字节流)
- 《file》.writelines(lines)-(将一个元素全为字符串的列表写入文件)
- 《file》.seek(offset)-(改变当前文件操作指针的位置。offset的值:0表示文件开头,1表示当前位置,2表示文件结尾)
PIL库的使用:
- 概述:PIL库是一个具有强大图像处理能力的第三方库,,支持图像存储,显示和处理,能够处理几乎所有的图片格式,可以完成图像的suofang,裁剪,叠加以及向图像添加线条,图像和和文字等操作。
- 其主要实现图像归档和图像处理两方面功能需求。
- 图像归档:对图像进行批处理,生成图像预览,图像格式化转换等。
- 图像处理:图像基本处理,像素处理,颜色处理。
- 根据功能不同产生了21一个子类。
- 最常用的:Image,ImageFilter,ImageEnhance。
Image类:
导入:from PIL import Image
Image类的读取和创建方法:
- Image.open(filename) ------ 根据参数加载图像文件。
- Image.new(mode,size,color) ------ 根据给定参数创建一个新的图像。
- Image.open(StringIO.StringIO(buffer)) ------ 从字符串中获取图像。
- Image.frombytes(mode,size,data) ------ 根据像素点data创建图像。
- Image.verify() ------ 对图像文件完整性进行检查,返回异常。
- Image能读取序列类图像文件,包括GIF,FLI,FLC,TIFF等格式。open()方法打开一个图像时自动加载序列中的第一帧,使用seek()和tell()方法可以在不同帧之间移动。
- Image.seek(frame) ------ 跳转并返回图像中的指定帧
- Image.tell() ------ 返回当前帧的序号
Image类的常用属性:
- Image.format ------ 标识图像格式或来源,若图像不是从文件读取,值为None。
- Image.mode ------ 图像的色彩模式,“L”为灰度图像,“RGB”为真彩色图像,“CMYK”为出版图像
- Image.size ------ 图像的宽度和高度,单位是像素(px),返回值是二元元组
- Image.palette ------ 调色板属性,返回一个ImagePalette类型。