资源描述
笔记
简介:面向对象、解释型语言,特点:语法简洁而清晰、丰富和强大的类库、能够轻松的联结其他语言,用于三种场合:shell实现工具(不适合)、控制语言(将其他程序编写的库,通过Python调用,作为一种胶水语言)、框架,解释器:字节码(bytecode)
Python的实现:原始的实现方式(CPython)、用于与java语言集成的实现(Jython)、用于与.net框架集成的实现(IronPython)
Python程序分为:模块、语句、表达式、对象
1) 程序有模块构成
2) 模块包含语句
3) 语句包含表达式
4) 表达式建立并处理对象
面向过程:以指令为中心,由指令处理数据,如何组织代码解决问题
面向对象:以数据为中心,所有的处理代码都围绕数据展开,如何组织数据结构(或者如何设计数据结构组织数据,并提供对此类数据允许处理操作)
数据结构:Python最基本的数据结构是序列,序列中每一个元素都被分配一个序号(索引),从0开始,Python中包含6种内建的数据序列:列表、元组、字符串、Unicode字符串、buffer对象和xrange对象、缓冲区。例如,list[a,b]:从索引a开始到b-1结束,索引位置从0开始
基本数据类型:
1) Integral:整型(不可变)和boolean
2) 浮点型:浮点数和复数和十进制数字
3) 字符串:不区分单引号和双引号(不可变)
4) 序列类型:列表[可变]:可直接修改内容,id不会改变,但是变得是变量名的引用、元组(不可变)。实质上,列表和元组并不真正存储数据,而是存放对象引用
调用方法type可知道变量的类型,例如,type(num)
1. 运算符
1) 算术运算符:加减乘除、取余、取商、幂计算
注意:/与//的区别:在类型是float与double类型时,/是全计算,//是取商(与java不一样);不能使用++,---操作
2) 逻辑运算符:与and 或 or非 not,is(判断is左右两边引用是否相等)
3) 比较运算符:大于、小于、不等于、等于
4) 赋值运算符:=、+=、-=
5) 优先级:幂、乘除、取余、取商、加减、比较
2. 基本语法
赋值:x=2
输出:print ‘hello’
3. 布尔类型
在进行运算时,True 就表示1,False表示0,none表示0
例如,print True+1输出1;print False*3输出0
4. 算法的三大结构:顺序、判断、循环
5. Python的控制流语句 :if、while、for…in、try
if语句
例子,
a =3
b = 2
c =1
if a>b:
t = b
b = a
a = t
if a>c:
t = c
c = a
a = t
if b>c:
t = c
c = b
b = t
print a,b,c
while循环:break:跳出当前循环 彻底终止循环;continue:continue之后的代码不执行,然后继续下一次的循环
注意:a 如果小于0的时候FALSE,终止while循环
for 循环:for 变量名 in 范围:
print 变量名
例如:list=[‘1’,’2’,’1’,’2’]
习题:1).使用for循环实现1到1000的数字之和;
2).统计字符串str='idfalksdjfldkjieakdsfnakdsfreikndkfnaskfdeuwhfrkdnfaksdnfkasdhfurehfkndfkasyurplldsnkjdlfkajdfjldskjflsadjfldskjfirejfakdsflsajfdlkasjdflkjadjfalkjfkasdjfiajefoijaewlkjflksadjfklajdfklajlfdjaldfjalksjfladjfldfjsadkfjsalkjflafjaljflasdj'中a到z的个数。
3).PokerGame中的买牌
def buynewpoker():
color= ['红桃','黑桃','梅花','方片']
value=['A','1','2','3','4','5','6','7','8','9','10','J','Q','K']
wangpai=['大王','小王']
list=[]
list.append(wangpai[0])
list.append(wangpai[1])
for i in range(len(value)):
for j in range(len(color)):
list.append(color[j]+value[i])
return list
4).洗牌
import random
def washpoker(list):
reslist=[]
count=0
while count<len(list):
a=random.randint(0,53)
if list[a] not in reslist :
reslist.append(list[a])
count+=1
for m in reslist:
print m
return reslist
washpoker(list)
5) .摸牌
def grouppoker(list):
obj=[]
list1=[]
list2=[]
list3=[]
list4=[]
for i in range(17):
list1.append(list[3*i])
list2.append(list[3*i+1])
list3.append(list[3*i+2])
for j in range(51,54):
list4.append(list[j])
obj=[list1,list2,list3,list4]
for m in range(len(obj)):
for j in range(len(obj[m])):
print obj[m][j]
print "-------------"
return
grouppoker(washpoker(list))
6) 叫牌:
1. 将摸好的牌随机分给三个玩家
2. 叫地主:传过来的玩家名字,将底牌分配给他
7)1000以内的完数
count=0
for i in range(2,1001):
sum=0
for j in range(1,i):
if i%j==0:
sum +=j
if i==sum:
count+=1
print count
8)1,2,3,4组成不重复且数字也不重复的三位数
count=0
for i in range(1,5):
for j in range(1,5):
for k in range(1,5):
if i!=j and i!=k and j!=k:
count+=1
print i,j,k
print count
6. 输入与输出:input()/raw_input()与print语句
格式化输出:print ‘String %format1 %format2 ’ %(variable1,variable,…)例如,num = 7.9 print ‘the num is %f’ %num/print ‘the num is %d’ %num
7.常用函数:
dir([obj]):显示对象属性,如果没有提供参数,那么显示全局变量的名字
help([obj]):显示对象文档
len(obj):返回对象长度
range():返回一个整数列表,从0开始
range(a,b):返回从a开始到b-1的列表,range(a,b,c):c是步长
int(obj):转成int类型
str(obj):转成字符串类型
type(obj):返回对象类型
append(obj):给列表添加一个元素
extend([obj]):参数中的列表添加到自身列表的末尾
insert(a,b):从索引值为a的位置添加一个元素b,所以list.insert(0,x)相当于list.append()
remove(x):删除列表中第一个值为x的函数,如果没有,那么这个函数就会执行报错。
pop(i):删除列表指定位置的元素并返回它。i表示这个参数是可选的,如果不输入,将删除最后一个元素并返回
index(x):返回第一次出现x元素的索引值
count(x):统计元素x的个数
reverse():反转列表中的元素
random.randint:
random.randint()的函数原型为:random.randint(a, b),用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,生成的随机数n: a <= n <= b
random.uniform:
random.uniform的函数原型为:random.uniform(a, b),用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限。如果a > b,则生成的随机数n: a <= n <= b。如果 a <b, 则 b <= n <= a。
random.random
random.random()用于生成一个0到1的随机符点数: 0 <= n < 1.0
in 或者 not in
在python中可以通过in和not in关键字来判读一个list中是否包含一个元素,例如,
theList = ['a','b','c']
if 'a' in theList:
print 'a in the list'
练习:
1.List=['a','c','s','a','a','m','n','c','d','r','y','t','f','u','r','e','z','h','v','v','d','v','n','q']
1)列表不适用reverse函数 实现反转
2)列表使用reverse函数进行反转后 倒序(从z开始到a)统计 列表中各个字母数量总数如 z 15……………… a 12
3)按照统计的大小输出
答:1)list =['a','c','s','a','a','m','n','c','d','r','y','t','f','u','r','e','z','h','v','v','d','v','n','q']
for i in range(1,len(list)+1):
print list[-i]
list =['a','c','s','a','a','m','n','c','d','r','y','t','f','u','r','e','z','h','v','v','d','v','n','q']
#for i in range(1,len(list)+1):
# print list[-i]
list.reverse()
test=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
test.reverse()
for j in test:
print j,list.count(j)
3)list=['a','c','s','a','a','m','n','c','d','r','y','t','f','u','r','e','z','h','v','v','d','v','n','q']
countnum=[]
for i in range(97,123):
#print list.count(chr(i))
countnum.append(list.count(chr(i)))
print countnum
orderchr=[]
for i in range(max(countnum)+1):
for j in range(97,123):
if list.count(chr(j))==max(countnum)-i:#根据统计进行字母排序
orderchr.append(chr(j))
print orderchr
2.冒泡排序
def maopao(list):
temp=0
for i in range(0,len(list)-1):
for j in range(0,len(list)-1-i):
if list[j]>list[j+1]:
temp = list[j+1]
list[j+1]=list[j]
list[j]=temp
return list
8.python语句和语法
标识符:大小写敏感
Python关键字列表和iskeyword()
错误:expected an indented block;解决:首行缩进4个字符
9.模块
debugger:pdb允许断点调试,检查堆栈,还支持事后调试
logger:loggging分紧急、错误、警告、信息、调试五级日志
10.对象
三个特征:身份(对象的内存地址)、类型(type()查看对象类型)、值(数据项)
所有的对象都有boolean值
对象身份的比较:
is/is not 用来比较两个别名是否引用同一个对象
内建模块:dir(__builtins__):两个下划线
help(关键字),例如help(str)
在方法体中使用space空格键控制代码对齐
callable()可用于测试函数是否可调用
自动载入内置模块:import,导入一个模块后,可以使用模块名.方法名的形式,避免与内置模块中的方法冲突
不支持的类型有:char、byte、pointer
11.数字
1)支持的数字类型:整型、长整型、布尔类型、双精度浮点型、十进制浮点型和复数
2)整型:
布尔类型:True和False
标准整数类型:0x:十六进制;无前缀:十进制;0:八进制;0b:二进制
3)双精度浮点数:
4)复数
5)布尔数:
是整型的子类,但是不能被继承而生成它的子类,对于值为0的任何数字或空集(list、tuple、dict)中值都是false,数学运算中,True==1,False==0
12.序列:列表、元组和字符串
12.1适用操作符:
成员关系操作符:in、not in
连接操作符:+
重复操作符:*….sequence* int
切片操作(利用子序列结合三种操作方式,可以非常灵活的控制序列):
1)索引取值[]
2)索引范围取值[start,end]
3)步长切片[::step]
12.2常用一些方法
List.Extend、list.insert
12.3类型转换:
12.4格式化输出
字典:’%(key)format’ %dict
注意:要输出带有小数位的,一定要注意是print ’%1.4f’ %(1.0/3),里面的数一定要有一个是带有小数位的---可能和版本有关
12.5传参
可变参数:*为位置可变,可以将序列参数转变成每个元素作为单独参数,**为关键字可变,可以将字典转换乘关键字参数
13映射和集合类型
13.1字典
字典的键必须是可哈希的,判断又没有key用in或not in
13.2元组删除
13.3比较
标准类型操作符:<,>等比较操作符可以使用,实际上还是调用了cmp方法,该方法中首先比较字典长度,比较键的大小,最后比较值得大小;查找用dict[],成员关系用in,not in
14.文件和输入输出
14.1文件:是连续的字节序列;
14.2 文件的操作:
file_object =open(filename,access=’r’,buffering=-1)权限:r,w,a表示读取,写入,追加,+代表可读可写;buffering表示缓冲区大小,0表示不缓冲,1表示只缓冲一行数据,其他大于1的值表示使用定值作为缓冲区大小,不提供该参数或者给定负值代表使用系统默认的缓冲机制
file()与open()类似,但是一般推荐用open,除非处理特定的文件,使用file()内建函数
使用U模式打开时,换行符通常会被替换为newline(\n)
read(size=-1):读取字节到字符串中,最多读取给定数目个字节,不指定size参数,或者size为负数,文件会被读到末尾;
readlines(size=-1):参数size类似read,指定其他值的size,读取size个字节
close()
15.Python过程式编程:
15.1语句与语法
注释、续行(单一语句换行\ or ’’’)、代码组(缩进相同为同一代码块)、模块(导入时要放在特定路径下)
15.2标识符
第一个字符只能是字母或下划线,余下的字符可以是字母、数字、下划线,区分大小写;注:不能使用关键字,尽量避免内建模块中的关键字
15.2基本风格
注释、文档、缩进(4个字符)、标识符名称
15.3命名惯例
15.4主程序
注意:所有的模块都有能力执行代码;最高级别的语句(没有缩进的语句)在模块被导入的时候都会被执行,无论是否需要,因此妥当的做法是除了那些真正需要执行的代码,所有的功能代码都通过函数建立,所以仅在主程序模块中编写大量的顶级可执行代码,被导入的模块只应该存在较少的顶级执行代码
展开阅读全文