python入门(二)
2016-01-04 22:06
901 查看
一、算数运算
>>> 2+3 #加法 5 >>> 2-3 #减法 -1 >>> 2*3 #乘法 6 >>> 2/3 #除法,这是计算机的除法,所以2/3的得数不为0.6666,计算规则请自行搜索 0 >>> 2%3 #取余数 2 >>> 2**3 #2的3次方 8
>>> import math #导入math,有点像java包一样 >>> math.pi #求π的值 3.141592653589793 >>> math.sqrt(9.0) #求浮点数的平方根,不是浮点数的会自动强转,在C++中需要手动强制转换类型 3.0 >>> import random >>> random.random() #随机生成一个数in[0,1] 0.6479743424406383 >>> random.choice([1,2,3,4]) #在列表1,2,3,4中随机选一个 1
二、字符串
>>> s="Hello" #不管是字符/字符串,""和''是通用的 >>> len(s) #计算字符串有多少长度,C语言中类似计算会将\0计算在内,而python不会 5 >>> s[0] #好强大,竟然还可以当数组用。。。 'H' >>> s[-1] #求倒数第一个字符 'o' >>> s[1:] #从下标为1的字符开始到结束 'ello' >>> s[:3] #从下标为0的字符开始取3-0个字符出来,前面那个空没写就默认为0 'Hel' >>> s[1:3] #从下标为1的字符开始取3-1个字符出来 'el' >>> s+",World!" #字符串相加 'Hello,World!' >>> s 'Hello' >>> s*3 #打印三遍字符串 'HelloHelloHello'
>>> s[0]='z' Traceback (most recent call last): #本想用C语言中的思想试一把的,啊,竟然不给用,出现了错误 File "<stdin>", line 1, in <module> TypeError: 'str' object does not support item assignment >>> s='z'+s[1:] #Python中不能通过对某一位进行赋值而改变字符串,但可以通过建立一个新字符串并以同一个变量名对其赋值 >>> s 'zello' >>> s #Python会自动清理旧的对象,改变之后都是zello啦,要记住,不要后面的看不懂了 'zello' >>> s=s[0:2]+'A'+s[3] #再来玩一把,高级的哦。。。 >>> s 'zeAl' #可恶竟然把o抛弃了,想要带上o可以把s[3]改为s[3:]。
>>> s='zello' #还原zello来试下前面说的,这样写直接全部覆盖,并清除旧对象 >>> s 'zello' >>> s=s[0:2]+'A'+s[3:] #带上o咯 >>> s 'zeAlo'
>>> s="Hello" #还原为Hello,玩下别的 >>> s 'Hello' >>> s.find("ell") #这点有点像java啦,返回的是字符串ell的开始字符e的下标 1 >>> s.find('z') #没找到,返回-1 -1 >>> s.replace("ell","xyz") #这个是将ell替换为xyz,注意replace操作并不会改变该字符串,而是创建一个新的字符串作为结果。这个先记住后面再总结。 'Hxyzo' >>> s #看吧,还是打印原来的字符串 'Hello'
>>>line="aaa,bbb,cccc,dd" #上更高级的 >>> line 'aaa,bbb,cccc,dd' >>> line.split(',') #根据逗号“,”分割字符串 ['aaa', 'bbb', 'cccc', 'dd'] >>> 4000 s.upper() #将s的字符串转为大写 'HELLO' >>> s #打印s的字符串,竟然还是不变啊 'Hello' >>> s #根据字符串具有不可变性,s这个字符串不会变的,那s='z'+s[1:]这个为什么变了,因为改变 字符串后,给s重新赋值了 'Hello' >>> line 'aaa,bbb,cccc,dd' >>> line+'a' 'aaa,bbb,cccc,dda' >>> line=line.rstrip() #返回上一次更改,并重新赋值给line >>> line #所以line又变回原来的样子了 'aaa,bbb,cccc,dd'
三、模式匹配
>>> import re >>> match = re.match('Hello[\t]*(.*)world','Hello Python world') >>> match.group(1) ' Python ' >>> >>> match.group(2) Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: no such group >>> >>> match=re.match('/(.*)/(.*)/(.*)','/usr/home/zrqsophia') >>> match.groups() ('usr', 'home', 'zrqsophia') >>>
match函数,其第一部分定义了模式,后一部分是要匹配的文本content。
比如这个模式match = re.match(‘Hello[\t](.)world’,’Hello Python world’),就是以Hello开头,连上n个’\t’,再接着任意字符并将其保存至匹配的group中,最后以‘world’结尾的模式在’Hello Python world’中匹配的结果。
四、列表[],Python数据类型
python列表是一个与任意类型的对象位置相关的有序集合。列表最大的特点就是,没有固定类型的约束:>>> L = [123, "Space", 1.23] #列表,可以存放多种类型的对象 >>> len(L) #对象个数 3 >>> L[0] #取下标为0的对象 123 >>> L[:-1] #取0到-1个对象,就像把这些对象连结成一个圈,然后倒着数,这点和字符串那边有点区别,后面做下对比 [123, 'Space'] >>> >>> L+[4,5,6] #列表可以加上另一个列表 [123, 'Space', 1.23, 4, 5, 6] >>> L [123, 'Space', 1.23] #没进行赋值操作,所以还是原来的那个列表 >>>
特定类型的操作:与string不同,list是可变的(相对于字符串的不可变性而言),但是有的方法是有针对性类型的,比如append函数只接受字符串:
>>> L.append("NT") #接着用上面的L,并在后面添加字符串NT >>> L [123, 'Space', 1.23, 'NT'] #啊~,没赋值啊,NT怎么呆在上面了,这里就要注意啦,这个和字符串是不同的,根据字符串具有不可变性 >>> L.append(5) #再添加一个5试试 >>> L [123, 'Space', 1.23, 'NT', 5] #还真是,这可以当作是字符串与列表的一个区别吧 >>> L.pop(2) #取出下标为2的对象 1.23 >>> L [123, 'Space', 'NT', 5] #取出的对象木有了 >>>
>>> M=["bb", "aa", "cc"] >>> M.sort() >>> M ['aa', 'bb', 'cc'] >>> M.reverse() >>> M ['cc', 'bb', 'aa'] >>>
列表嵌套
>>> M=[[1,2], ... [3,4], ... [5,6]] >>> M [[1, 2], [3, 4], [5, 6]] >>> M[1] [3, 4] >>> M [[1, 2], [3, 4], [5, 6]] >>> M[1][1] #有点C语言中的二维数组的味道啊 4 >>>
列表解析
>>> M [[1, 2], [3, 4], [5, 6]] >>> M[1][1] 4 >>> [row[1]+1 for row in M] #下标为1行的数都+1,然后再打印 [3, 5, 7] >>> [row[1] for row in M if row[1]%3==0] #下标为1行的数,如果可以被3整除,则打印出来 [6] >>> diag = [M[i][i] for i in [0,1]] >>> diag [1, 4] >>> str = [c*2 for c in 'spam'] >>> str ['ss', 'pp', 'aa', 'mm'] >>>
五、字典{},Python数据类型,注意字典不能像列表那样进行像数组那样操作
字典的赋值方式>>> D = {"fooditem":2,"zrqsophia":"s.w.","color":"#CCFFEE"} >>> D["zrqsophia"] #字典字典,说白了就可可以查的东西嘛,zrqsophia其实就像是s.w.的标识符 's.w.' >>> D["fooditem"]+=1 #和下面加了分号的进行对比下 >>> D {'zrqsophia': 's.w.', 'fooditem': 3, 'color': '#CCFFEE'} >>> D["fooditem"]+=1; #加了分号下面的输出3竟然变成了4 >>> D {'zrqsophia': 's.w.', 'fooditem': 4, 'color': '#CCFFEE'} >>> D={} >>> D["name"] = "sophia" #进行字典赋值 >>> D["job"] = "coder" >>> D["age"] = 21 >>> D #字典插入,是从前面插入的 {'age': 21, 'job': 'coder', 'name': 'sophia'} >>>
嵌套
>>> D={"name":"Sophia","property":["coder",21,"acmer"]} >>> D["property"] ['coder', 21, 'acmer'] >>>
键的排序:for循环
怎么变得这么难了,一定要撑住。。。。。。
>>> D={"name":"Sophia","property":["coder",21,"acmer"]} >>> D["property"] ['coder', 21, 'acmer'] #不知不觉怎么把""输成''好了,不管了,风格变就变吧,后面整理的时候再统一下风格。 >>> Ks=D.keys() #查找D的关键字,也就是前面所说的像标识符的东西 >>> Ks ['property', 'name'] #从后往前打印出来所有的关键字 >>> Ks.sort() #从前往后打印,Oracle/MySQL反正是SQL语句里也有这个东西,忘了是什么意思了。。。无语 >>> Ks ['name', 'property'] >>> for key in Ks: ... print key,"=>",D[key] #注意啦,注意啦~ print前面是有tab键的,为什么呢,先放着后面整理规划的时候, 再说得更详细些 ... #直接回车就可以退出这个...等待输入啦 name => Sophia property => ['coder', 21, 'acmer'] >>> D {'property': ['coder', 21, 'acmer'], 'name': 'Sophia'} >>> for key in sorted(D): ... print key, "=>",D[key] ... name => Sophia property => ['coder', 21, 'acmer'] >>> for a in D: ... print a, "->",D[a] #这个->咋回事?其实就是前 b97e 面和前面的=>的一样的,只是我没说而已,循环打印的时候,就可以看到啦。 ... property -> ['coder', 21, 'acmer'] name -> Sophia >>>
迭代
>>> s = [x **2 for x in[1,2,3,4,5]] #循环打印出in里面元素的平方 >>> s [1, 4, 9, 16, 25] >>>
if测试
>>> D = {'a':1,'c':3,'b':2} >>> D {'a': 1, 'c': 3, 'b': 2} >>> D['e'] = 5 #添加一个关键字和数值 >>> D {'a': 1, 'c': 3, 'b': 2, 'e': 5} >>> D['f'] #查找f,木有啊,就报错了 Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'f' >>> D.has_key('f') #查看D中是否有f,没有就返回False False >>> if not D.has_key('f'): #if not False 代表的就是True啦,所以打印missing,这样写有点怪怪的 ... print 'missing' ... missing >>>
六、元组
元组的最大特点是不可变,也就是说元组是不可变的序列。>>> T = (1,2,3,4) #其实和字符串挺像的,现在就不介绍了 >>> len(T) 4 >>> T+(5,6) (1, 2, 3, 4, 5, 6) >>> T (1, 2, 3, 4) >>> T = T+(5,6) >>> T (1, 2, 3, 4, 5, 6) >>> T[0] 1 >>> T[0]=2 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'tuple' object does not support item assignment >>>
七、文件
>>> f = open ('E:\\a.txt','w') #注意啦注意啦,r是打开存在的文件,否则报错,w是可以不存在的,不存在则创建一个,\\一定要写两个斜杠 >>> f.write('Hello\n') #看下E盘文本是不是多了Hello,对的写进去了 >>> f.write('World!\n') >>> f.close() >>> >>> f = open ('E:\\a.txt') #python默认文件打开方式为读'r' >>> bytes = f.read() >>> bytes 'Hello\nWorld!\n' >>> print bytes Hello World! >>> bytes.split('\n') ['Hello', 'World!', ''] >>> bytes.split() ['Hello', 'World!'] >>>
当然,除了open函数,python还有高级的文件类工具:pipes、fifos、sockets、keyed-access files等。例如文件描述符(descriptor file)支持文件锁定和其他底层工具,而sockets提供网络和进程间接口。
八、用户自定义类
>>> class Worker: ... def __init__(self,name,pay): ... self.name = name ... self.pay = pay ... def lastName(self): ... return self.name.split()[-1] ... def giveRaise(self,percent): ... self.pay *= (1.0+percent) ... >>>bob = Worker('Bob Smith,20000) >>>sue = Worker('Sue Jones',40000) >>>bob.laseName() 'Smith' >>>sue.giveRaise(.10) >>>sue.pay 44000.0
类中成员默认类型是public的(虽然python中我们还没有介绍成员变量的类型),“self”对象时我们把这叫做面向对象模型的原因,即一个函数总有一个隐含的对象,这和C++非常相似。
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例
- Python 七步捉虫法