图形化程序设计
海龟画图
画笔各种方法:
>>>import turtle #导入turtle模块
>>>turtle.showturtle() #显示箭头
>>>turtle.write("xx") #写字符串
>>>turtle.left(90) #箭头左转90度
>>>turtle.forward(300)#向前300
>>>turtle.goto(0,50)#去坐标(0,50)
>>>turtle.penup()#抬笔,这样路径就不会画出来
>>>turtle.pendown()#下笔,路径就会画出来
>>>turtle.color("")#颜色
>>>turtle.circle()#画圆
>>>turtle.width()#加粗
>>>turtle.done()#窗口执行完仍在
实践:绘制奥运五环
程序的构成
程序由模块组成。一个模块对应一个python源文件,一般后缀名是.py
模块由语句构成,按顺序依次执行
ctrl+s保存
四个空格一个缩进,tab制表符就是四个空格
行连接符:a="sfasa
safsa
rasa"
一切皆对象,对象由标识,类型,值组成
标识用于用于唯一标识对象,对应于计算机内存中的地址,使用内置函数id(obj)可返回对象bj的标识。
类型用于表是对象存储数据的类型,限制取值范围以及可执行的 *** 作,可以使用type获得所属类型
值表示所存储的数据的信息,使用print可以直接打印出值
本质:一个内存块,拥有特点的值,支持特定类型的相关 *** 作。
变量(栈内存)是对象(堆内存)的引用,变量存储的是对象的地址,变量通过地址引用了对象。
python是动态类型语言,python解释器自动确定数据类型。
python是强类型语言,支持该类型支持的 *** 作
标识符
类似c语言命名规则,有一点,尽量避免以双下划线开头和结尾,比如__init__是类的构造函数
变量在使用前必须先被赋值,使用del删除变量
链式赋值:x=y=3
系列解包赋值:a,b,c=4,5,6
这个可实现变量互换
a,b=1,2
a,b=b,a
最基本内置数据类型和基本运算介绍
整型,浮点型,字符串型,布尔型(表示真假)
/ 浮点数除法,得到浮点数 //整数除法 **幂,2**3得到8
divmod()函数同时得到商和余数:divmod(13,3) (4,1)
比较运算符可以连用
左移1位相当于乘2,左移2位相当于承4
右移1位相当于乘2
整数
0b或0B二进制 0o或oO 八进制 0x或0X 十六进制
布尔值True转为1,False转为0,int(True)结果是1
字符串符合整数格式,直接转为对应整数 int("456")结果是456
python3中,int可以存储任意大,想多大多大,这是python适合科学运算的特点
浮点数
round(value)可以返回四舍五入的值,注:不会改变原有值,而是产生新的值
逻辑运算符
or或,and与,not
同一运算符
用于比较两个对象的存储单元,实际比较的是对象的地址
is:判断两个标识符是不是引用与同一个对象
is not:判断是不是引用不同对象
is和==的区别:is判断是否同一个,即比较对象的地址
==判断值是否相等
整数缓存问题
Python仅仅对比较小的整数对象进行缓存[-5,256],但这只是在命令行中执行,在pycharm和保存为文件执行,范围变成[-5,任意正整数]
字符串
字符串的本质是字符序列,Python的字符串是不可变的,我们无法对原字符串做任何修改,但,可以将字符串的一部分复制到新创建的字符串,达到看起来修改的效果
python不支持单字符类型,单字符也是作为一个字符串使用
Unicode可以标识世界上任何书面语言的字符,使用内置函数ord()那字符转换成对应的Unicode码,chr()把十进制转换成字符
使用单双引号创建,连续三个单引号或者双引号可以帮助我们创建多行字符串
允许空字符串的存在,不包含任何字符且长度为0
len()函数用于计算字符串含有多少字符
字符串拼接: 用+拼接或者空格字符串复制:使用*可以实现复制,
不换行打印,通过参数(),end="任意字符串",实现末尾添加任何内容
从控制台读取键盘输入的内容:input()
str()实现数字转型字符串,str(5.2)得到'5.2'
使用[]提取字符:
正向搜索,最左侧是第一个字符偏移量是0
反向搜索,最右侧第一个字符偏移量是-1
使用replace替换,返回一个新的字符串,原来的字符串是不可变
字符串切片 *** 作
[起始偏移量:终止偏移量:步长] 步长省略时,不用冒号
起始偏移量小于0,会被当作0,终止偏移量大于长度-1,会被当成-1
split()分割,,不指定分隔符,则默认空白字符
join拼接函数,"".join(变量)
字符串驻留机制:仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串驻留池中。Python支持字符串驻留机制,对于符合标识符的字符串会触发该机制
成员 *** 作符
in/not in关键字,判断某个字符或者子字符串是否在字符串里
常用查找方法:
a=" "
len(a):字符串长度;a.startwith()以指定字符串开头;a.endeswith()以指定字符串结尾
a.find()第一次出现指定字符串的位置;a.rfind()最后一次出现指定字符串的位置
a.count()指定字符串出现了几次;a.isalnum所有字符全是字母或数字
去除首尾信息
我们可以通过strip()去除字符串首尾指定信息(只是首尾),lstrip()去除左边指定信息,rstrip()去除右边指定信息
大小写转换
a.capitalize()产生新的字符串,首字母大写;a.title()每个单词首字母都大写;
a.upper()所有字符全转成大写;a.lower()产生新的字符串,所有字符全转成小写;
a.swapcase()所有字母大小写互换;
格式排版
center();ljust();rjust()
其他方法
isalnum()是否为字母或数字;isalpha()检测字符串是否只由字母组成(含数字)
isdigit()检测字符串是否只由数字组成;isspace()检测是否为空白符
isupper()检查是否为大写字母;islower()检测是否为小写字母
字符串的格式化
format()基本用法,基本语法是用过{}和:来代替c的%
填充与对齐
^><分别是居中右对齐和左对齐,后面带宽度
:后带填充的字符,只能是一个,不指定默认用空格填充
数字格式化
可变字符串
使用io。StringIO对象或array模块
序列
序列就是一块用来存放多个值的连续的内存空间,存储的是对象地址,不存储对象的值
例如:字符串,列表,元组,字典,集合
列表
存储任意数目,任意类型的数据集合,列表大小可变,根据需要随时增加或减小
一.列表的创建
基本语法创建[]:a=[10,20,"bbq"]
list()语法创建:可以将任何可迭代的数据转化承列表
range()可以帮我们非常方便的创建整数列表,默认步长为1,python3中返回的是一个range对象,而不是列表,我们需要通过list()方法将其转换成列表对象
二.增加和删除
a=[20,40]
a.append([80]) [20,40,80] 原地修改列表对象
a=a+[50] [20,40,50] 创建新的列表对象
a.extend([80]) [20,40,80] 原地 *** 作,不创建新的列表对象
a.insert(2,100) [20,40,100] 插入涉及元素拷贝
乘法扩展
del a[1] [20] 删除指定位置的元素
a.pop() [20] 删除并返回指定位置的元素,该例返回40,未指定则 *** 作最后一个元素
a.remove(20) [40] 删除首次出现的指定元素,不存在则报错
三.访问和计数
通过索引直接访问 a[1] 40 注意长度
a.index(value,start,end) 获得索引位置
a.count() 获得出现次数
len(a) 返回列表长度
四.成员资格判断
count方法,一般用in和not in 20 in a 返回True
五.切片 *** 作和字符串 *** 作一样
六.列表排序
修改原列表,不建新列表的排序
a.sort()默认升序排序
a.sort(reverse=True) 降序排列
import random
random..shuffle(a) 打乱顺序
建新列表的排序,sort改为sorted
reversed()返回迭代器,不对原列表做任何修改,只是返回一个逆序排列的迭代器对象,只能用一次,要用的话list(x)
七.其他内置函数
max(),min(),sum()
八.二维列表
引用:a[0] a[0][3]
元组
元组不可变序列,没有增加,修改,删除相关的方法
访问和处理速度比列表快
可以作为字典的键,列表则永远不能作为字典的键使用
一.创建
a=()创建或者a=10,20 如果元组只有一个元素,必须加逗号
b=tuple(可迭代的对象),与list类似
二.访问和计数
也是索引访问,不能修改元素
三.切片同列表
四.排序
只能使用内置函数sorted(),并生成新的元组对象
zip(列表1,列表2……)将多个元素合并成元组,并返回这个zip对象,只能用一次
字典
字典是“键值对”的无序可变序列,字典中的每一个元素都是一个“键值对”,包含“键对象”和“值对象”,可以通过“键对象”实现快速获取,删除,更新对应的“值对象”。“键”是任意的不可变数据,比如:整数,浮点数,字符串,元组,但是,列表,字典,集合这些可变对象,不能作为“键”,且“键”不能重复,“值”可以是任意的数据,并且可重复
一.字典的创建
二.访问
1.通过[键]获得值,若键不存在,则报出异常
2.通过get()获得值,若不存在,返回None a.get()
3.列出所有键值对 a.items()
4.列出所有的键,所有的键
a.keys() a.values()
5.len(a) 键值对的个数
6.检测一个键是否位于字典 in a
三.添加,修改,删除
1.新增键值对,键已存在,则覆盖,不存在则新增
例如a['address']='某地'
2.使用update(),a.update(b),将b连接在a后头,重复,则b覆盖a
3.del()删除指定键,clear()删除所有,pop()删除并返回键所对应值对象
4.popitem()随机删除和返回该键值对,适合一个接一个移除并处理项
四.序列解包
可以用于元组,列表,字典;方便对多个变量赋值
x,y,z=[20,30,40]
[a,b,c]=[20,30,40]
默认对键 *** 作,对键值 *** 作,使用a.items(),对值 *** 作,使用a.values()
集合
无序可变,元素不能重复,集合底层是字典实现,集合的所有元素都是字典的“键对象”,因此是不能重复且唯一的
一.创建与删除
{}创建,a.add()添加新元素
set()将列表,元组等可迭代对象转成集合,如果重复,保留一个
同数学一样,|交集,&并集,-差集
控制语句
一.选择结构
单分支结构语法形式:
if 条件表达式(逻辑表达式,关系表达式,算术表达式,不能含有=,不会执行):
语句/语句块(可以是一条或多条,多条缩进必须一致)
条件表达式的值为False的情况:
False,0,0.0,空值None,空序列对象(空列表,空元组,空字典,空字符串),空range对象,空
迭代对象,其他情况均为True,python所有的合法表达式都可以看作条件表达式,甚至包括函数调用的表达式
双分支结构语法
在单分支后加个else:
三分条件运算符:
条件为真时的值 if (条件表达式) else 条件为假的值
多分支结构:
if 条件表达式1:
语句1
elif 条件表达式2:
语句2
……
[else :
语句n+1
](计算机行业,描述语法格式时,使用中括号通常表示可选,非必选)
几个分支之间时有逻辑关系的,不能随意颠倒顺序
选择结构的嵌套:
缩进量决定了代码的从属关系
二.循环结构
while循环
while (条件表达式):
for循环
格式:for 变量 in 可迭代对象
循环体语句
可迭代对象:
1.序列,包含字符串,元组,列表,字典
2.迭代器对象
3.生成器函数
嵌套循环
break语句和continu语句同c语言
else语句
while,for循环可以附带一个else语句(可选),如果for,while语句没有呗break语句结束,就是正常执行完,则会执行else语句,否则不执行,语法格式如下:
在前两个循环后加esle:
循环代码优化
1.尽量减少循环内部不必要的计算
2.嵌套循环中,尽量内层循环的计算,尽可能向外提
3.局部变量查询较快,尽量使用局部变量
其他优化手段
使用join;列表插入和删除,尽量在尾部
zip实现并行迭代
三.推导式创建序列
列表推导式
语法:[表达式 for item in 可迭代对象]
或者[表达式 for item 可迭代对象 if 条件判断]
字典推导式
{key:value for 表达式 in 可迭代对象}
都可增加if条件判断,多个for循环
集合推导式
就少了value
生成器推导式(生成元组)
元组没有推导式,一个生成器只能运行一次,第一次得到数据,第二次就没有了
函数
Python中函数的分类
1.内置函数,比如str(),llist(),len()
2.标准库函数,通过import语句导入
3.第三方库函数,下载后使用
4.用户自定义函数
定义语法:def 函数名([参数列表])
"'文档字符串'"(函数的注释)
函数体/若干语句
要点;
1.def定义函数,就是一个空格和函数名称
2.参数列表
(1)圆括号内时形参,有多个参数则使用逗号隔开
(2)形参不需要声明类型,也不需要指定函数返回值类型
通过调用help(函数名.__doc__)可以打印输出函数的文档字符串
函数也是对象,内存底层分析
可以作为参数传递,也可以返回值传递
变量
全局变量:
1.函数和类定义之外声明的变量。作用域为定义的模块,从定义位置开始直到模块结束
2.全局变量降低函数的通用性和可读性,应尽量避免全局变量的使用。
3.全局变量一般做常量使用
4.函数内要改变全局变量的值,使用global声明一下
局部变量:
1.在函数体内(包括形式参数)声明的变量
2.局部变量的引用比全局变量快,优先考虑使用
3.使用局部变量和全局变量同名,则在函数内隐藏全局变量,只使用同名的局部变量
参数的传递
Python中参数的传递都是“引用传递”,不是“值传递”
一.可变对象(字典, 列表,集合,自定义的对象等)
传递参数是可变对象,实际传递的还是对象的引用。在函数体内不创建新的对象拷贝,二十可以直接修改所传递的对象
二.不可变对象(int,float,字符串,元组,布尔值等)(浅拷贝)
实际传递还是对象的引用,在“赋值 *** 作”时,由于不可变对象无法修改,系统会创建一个新的对象
传递不可变中含有可变,含有的可变一样能修改
浅拷贝和深拷贝
浅拷贝:不拷贝子对象的内容,只拷贝子对象的引用(修改自己原来有的)
深拷贝:连子对象的内容也全部拷贝一份,对子对象的修改不影响原来的
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)