1. 什么是数据?
x=2 2就是我们要存储的数据
2. 为何数据要用不同的类型
数据是用来表示状态的,不同的状态就应该用不同的类型的数据来表示
3. 数据类型
数字(整型(int),长整型(long),浮点(float),复数(complex))
字符串
列表
元组
字典
集合
4. 数字(int,float,complex)
作用:主要用于年龄,等级,薪资,号码等数字相关的。
定义:
age=10 #实质是age=int(10)
salary=3000.3 #实质是salary=float(3000.3)
数字可以进行转化,平常数字是十进制,可以转换为二进制,八进制,十六进制等。
4.1 长整型
在python2中有长整型的概念,python3中没有这个概念
1 Python 2.7.5 (default, Nov 6 2016, 00:28:07) 2 [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux2 3 Type "help", "copyright", "credits" or "license" for more information. 4 >>> mun=3L 5 >>> type(mun) 6 <type 'long'>
4.2 复数
1 >>> x=1-2j 2 >>> x.real 3 1.0 4 >>> x.imag 5 -2.0
5. 字符串
作用:姓名,性别,国籍,地址等信息描述。
定义:在单引号,双引号,3引号之类的,都称为字符串。例如:name='fang'
常用操作:
移除空白strip
切分split
长度len
索引
切片
其他操作
1 #字符串移除空白strip 2 name='*****fanglingen*****' 3 print(name.strip('*')) #移除*,默认是移除空白 4 print(name.lstrip('*')) #移除左边的* 5 print(name.rstrip('*')) #移除右边的* 6 7 #字符串分割split 8 name='root:x:0:0::/root:/bin/bash' 9 print(name.split(':')) #默认以空格分割 10 print(name.split(':',1)) #以左边第一个:号为分割符,默认就是以左边数 11 name='a|b|c' 12 print(name.rsplit('|',1)) #以右边的第一个|号,为分隔符 13 14 #startswith,endswith字符串的开头和结尾 15 name='alex_SB' 16 print(name.endswith('SB')) #判断字符串以什么结尾的真假 17 print(name.startswith('al')) #判断字符串以什么开头的真假 18 # 19 # #字符串替换replace 20 name='alex say :i have one tesla,my name is alex' 21 print(name.replace('alex','SB',1)) #以第一个alex字符串替换为SB 22 23 # #format的三种玩法 24 res='{} {} {}'.format('fang',18,'male') #按顺序添加 25 res='{0} {1} {2}'.format('fang',18,'male') #按索引添加 26 res='{name} {age} {set}'.format(name='fang',age=18,set='male') 27 print(res) 28 29 #find,rfind,index,rindex,coun 按照字符查找索引 30 name='egon say hello' 31 print(name.find('o',1,3)) #顾头不顾尾,从左查找,找不到返回-1,找到显示索引 32 print(name.rfind('e',0,3)) #同上 33 # print(name.index('o',5,8)) #同上,找不到会报错 34 print(name.count('e',1,3)) #顾头不顾尾,如果不指定范围则查找所有 35 36 #join 对字符串进行添加 37 tag=' ' 38 print(tag.join(['egon','say','hello','world'])) #可迭代对象必须都是字符串 39 40 #center,ljust,rjust,zfill 字符串填充 41 name='egon' 42 print(name.center(30,'*')) #字符串长度为30,字符串在中间,字符不够的填充*号 43 print(name.ljust(30,'*')) #字符串靠左,长度为30,字符不够的填充*号 44 print(name.rjust(30,'*')) #字符串靠右,长度为30,字符不够的填充*号 45 print(name.zfill(50)) #字符串长度为50,字符不够在左边填充0 46 47 #expandtabs 可以指定字符串之间的空格长度 48 name='egon\thello' 49 print(name) 50 print(name.expandtabs(1)) 51 52 #lower,upper 字符串大小写转换 53 name='Egon' 54 print(name.lower()) #把字符串中的字符全部转换为小写 55 print(name.upper()) #把字符串中的字符全部转为大写 56 57 #captalize,swapcase,title 58 name='egon' 59 print(name.capitalize()) #首字母大写 60 print(name.swapcase()) #大小写翻转 61 msg='egon say hi' 62 print(msg.title()) #每个单词的首字母大写 63 64 #is数字系列 65 #在python3中 66 num1=b'4' #bytes 67 num2=u'4' #unicode,python3中无需加u就是unicode 68 num3='四' #中文数字 69 num4='Ⅳ' #罗马数字 70 71 #isdigt:bytes,unicode 对数字进行判断 72 print(num1.isdigit()) #True 73 print(num2.isdigit()) #True 74 print(num3.isdigit()) #False 75 print(num4.isdigit()) #False 76 77 #isdecimal:uncicode 78 #bytes类型无isdecimal方法 79 print(num2.isdecimal()) #True 80 print(num3.isdecimal()) #False 81 print(num4.isdecimal()) #False 82 83 #isnumberic:unicode,中文数字,罗马数字 84 #bytes类型无isnumberic方法 85 print(num2.isnumeric()) #True 86 print(num3.isnumeric()) #True 87 print(num4.isnumeric()) #True 88 # 89 # #三者不能判断浮点数 90 num5='4.3' 91 print(num5.isdigit()) 92 print(num5.isdecimal()) 93 print(num5.isnumeric()) 94 ''' 95 总结: 96 最常用的是isdigit,可以判断bytes和unicode类型,这也是最常见的数字应用场景 97 如果要判断中文数字或罗马数字,则需要用到isnumeric 98 ''' 99 100 #is其他 101 print('===>') 102 name='egon123' 103 print(name.isalnum()) #字符串由字母和数字组成 104 print(name.isalpha()) #字符串只由字母组成 105 106 print(name.isidentifier()) #是否是合法标识符 107 print(name.islower()) #是否是小写 108 print(name.isupper()) #是否全是大写 109 print(name.isspace()) #是否只包含空白字符 110 print(name.istitle()) #是否是每个词首字母大写的字符串
练习
# 写代码,有如下变量,请按照要求实现每个功能 (共6分,每小题各0.5分) name = " aleX" # 1) 移除 name 变量对应的值两边的空格,并输出处理结果 # 2) 判断 name 变量对应的值是否以 "al" 开头,并输出结果 # 3) 判断 name 变量对应的值是否以 "X" 结尾,并输出结果 # 4) 将 name 变量对应的值中的 “l” 替换为 “p”,并输出结果 # 5) 将 name 变量对应的值根据 “l” 分割,并输出结果。 # 6) 将 name 变量对应的值变大写,并输出结果 # 7) 将 name 变量对应的值变小写,并输出结果 # 8) 请输出 name 变量对应的值的第 2 个字符? # 9) 请输出 name 变量对应的值的前 3 个字符? # 10) 请输出 name 变量对应的值的后 2 个字符? # 11) 请输出 name 变量对应的值中 “e” 所在索引位置? # 12) 获取子序列,去掉最后一个字符。如: oldboy 则获取 oldbo。
name = " aleX" # 1) 移除 name 变量对应的值两边的空格,并输出处理结果 print(name.strip()) # 2) 判断 name 变量对应的值是否以 "al" 开头,并输出结果 print(name.startswith('al')) # 3) 判断 name 变量对应的值是否以 "X" 结尾,并输出结果 print(name.endswith('X')) # 4) 将 name 变量对应的值中的 “l” 替换为 “p”,并输出结果 print(name.replace('l','p')) # 5) 将 name 变量对应的值根据 “l” 分割,并输出结果。 print(name.split('l')) # 6) 将 name 变量对应的值变大写,并输出结果 print(name.upper()) # 7) 将 name 变量对应的值变小写,并输出结果 print(name.lower()) # 8) 请输出 name 变量对应的值的第 2 个字符? print(name[1]) # 9) 请输出 name 变量对应的值的前 3 个字符? print(name[0:3]) # 10) 请输出 name 变量对应的值的后 2 个字符? print(name[-2:]) # 11) 请输出 name 变量对应的值中 “e” 所在索引位置? print(name.find('e')) # 12) 获取子序列,去掉最后一个字符。如: oldboy 则获取 oldbo。 print(name[:-1])
6. 列表
作用:多个装备,多个属性等
定义:[ ] 中可以有多个任意类型的值,以逗号分割
l=['b','b','c'] #实质是l=list(['a','b','c']) 或者l=list('abc')
常用操作
索引
切片
追加
删除
长度
循环
包含in
1 my_girl_friends=['alex','wupeiqi','yuanhao',4,10,30] 2 #按照索引查找 3 print(my_girl_friends[0]) 4 5 #追加 6 my_girl_friends.append('oldboy') 7 print(my_girl_friends) 8 9 #切片 10 print(my_girl_friends[1:3]) 11 12 #删除 (remove按照值,pop按照索引) 13 #remove按照值删除 14 my_girl_friends.remove('alex') 15 print(my_girl_friends) 16 17 #pop按照索引删除 18 my_girl_friends.pop() 19 my_girl_friends.pop(1) 20 21 #len长度,有几个元素 22 print(len(my_girl_friends)) 23 24 #insert插入,在那个索引之前插入 25 my_girl_friends.insert(1,'Sb') 26 print(my_girl_friends) 27 28 # #清空列表 29 my_girl_friends.clear() 30 print(my_girl_friends) 31 32 #拷贝列表 33 l=my_girl_friends.copy() 34 print(l) 35 36 #查看某个元素的个数 37 print(my_girl_friends.count('alex')) 38 39 #extend把多个元素以列表的形式添加到列表中 40 my_girl_friends.extend(['oldboy1','oldboy2','oldboy3']) 41 print(my_girl_friends) 42 43 index查看元素在列表中的索引 44 my_girl_friends.index('alex') 45 print(my_girl_friends.index('al')) 46 47 #reverse列表中的元素位置翻转 48 my_girl_friends.reverse() 49 print(my_girl_friends) 50 51 #sort排序 52 l=[3,-1,5,2] 53 #从大到小排列 54 l.sort(reverse=True) 55 print(l) 56 #从小到大排列 57 l.sort(reverse=False) 58 print(l)
练习
有列表data=['alex',49,[1900,3,18]]分别取出列表中的姓名,年龄,出生年,月,日赋值给不同的变量
1 data=['alex',49,[1900,3,18]] 2 name=data[0] 3 age=data[1] 4 year=data[2][0] 5 month=data[2][1] 6 day=data[2][2] 7 print("name :",name,"age :",age,"calculate_age: ",year,"年",month,"月",day,"日")
模拟队列 (先进先出)
1 l=['a','b','c','d'] 2 l.append('e') 3 l.pop(0) 4 print(l) 5 l.pop(0) 6 print(l) 7 l.pop(0) 8 print(l) 9 l.pop(0) 10 print(l)
模拟堆栈 (先进后出)
1 l=['a','b','c','d'] 2 l.append('e') 3 l.pop(-1) 4 print(l) 5 l.pop(-1) 6 print(l) 7 l.pop(-1) 8 print(l) 9 l.pop(-1) 10 print(l)
7. 元组
作用:存多个值,对比列表来说,不可变,主要用来读
定义:与列表类似,[]换成()
可以当作字典的key
age=(11,22,33,44,55) #实质是age=tuple((11,22,33,44,55))
常用操作
索引
切片
追加
删除
长度
循环
包含in
1 data=(11,22,33,44,55,66,77,88,99) 2 #查看元素的索引 3 print(data.index(11)) 4 5 #查看元素的数量 6 print(data.count(11)) 7 8 #按照索引切片,得到一个新元组 9 print(data[3:5]) 10 11 #查看元组里的元素个数 12 print(len(data)) 13 14 #循环元组 15 for n in data: 16 print(n) 17 18 #包含in 19 print(22 in data)
练习 :简单购物车
实现打印商品的详细信息,用户输入商品名和个数,则将商品名,价格,个数加入购物列表,如果,输入为空或其他非法信息,要求用户重新输入。
msg_dic={
'apple' :10
'tesla' :100000
'mac' :3000
'lenovo' :30000
'chichen' :10
}
1 msg_dic={ 2 'apple' :10, 3 'tesla' :100000, 4 'mac' :3000, 5 'lenovo' :30000, 6 'chichen' :10 7 } 8 goods_l=[] 9 while True: 10 for key,itme in msg_dic.items(): 11 print('name:{name} price:{price}'.format(name=key,price=itme)) 12 choic = input('请输入商品名:').strip() 13 if not choic or choic not in msg_dic.keys():continue 14 conut=input('请输入购买商品数量:').strip() 15 if not conut.isdigit():continue 16 goods_l.append((choic,msg_dic[choic],conut)) 17 print(goods_l)
8. 字典
作用:存放多个值,key-valuec存取,取值速度快
定义:key是不可变的类型,value可以是任意类型
1 info={'name':'egon','age':18,'sex':'male'} #本质info=dict({....}) 2 或 3 info=dict(name='egon',age=18,sex='male') 4 或 5 info=dict([['name','egon'],('age',18)]) #只能多个key对应一个value 6 或 7 print({}.fromkeys(('name','age','sex'),None)) #可以设置key的初始值
常用操作:
存/取
删除
键s, 值s 键值对
长度
循环
包含in
1 info={'name':'egon','age':18,'sex':'male'} 2 #删除 3 print(info.pop('name')) #删除key,value 4 print(info) 5 print(info.pop('dadfafdadf',None)) #删除不存在的key,value不报错 6 7 print(info.popitem()) #删除随机删除key,value 8 print(info.popitem()) 9 print(info) 10 #取值 11 print(info['name']) 12 print(info.get('name')) 13 print(info.get('dafdaf',None)) #取值,查找不存在的key的值,不报错 14 15 #循环 16 print(info.keys(),type(info.keys())) 17 print(info.values()) 18 19 for key in info.keys(): 20 print(key) 21 22 for key in info.values(): 23 print(key) 24 25 for key in info: 26 print(key,info[key]) 27 28 print(info.items()) 29 for key,value in info.items(): # key,value=('name','egon') 30 print(key,value) 31 32 #合并字典,key相同的,会把key的值变为新字典中的值 33 print(info) 34 dic={'a':1,'b':2,'name':'SHUAI'} 35 info.update(dic) 36 print(info) 37 38 #添加字典中的key和value 39 d={} 40 print(d) 41 d['name']='egon' 42 d['age']=18 43 d['sex']='male' 44 d['hobby']=[] 45 d['hobby'].append('play basketball') 46 d['hobby'].append('play football') 47 48 d.setdefault('hobby',[]).append('play1') #d['hobby'] 49 d.setdefault('hobby',[]).append('play2') #d['hobby'] 50 d.setdefault('hobby',[]).append('play3') #d['hobby'] 51 print(d)
练习
1. 有下列集合[11,22,33,44,55,66,77,88,99,90] ,将所有大于66的值保存在k1中,将小于66的值保存在k2中
即 {k1: 大于66的值,k2:小于66的值}
1 data=[11,22,33,44,55,66,77,88,99,90] 2 s1=[] 3 s2=[] 4 for itme in data: 5 if itme >= 66: 6 s1.append(itme) 7 else: 8 s2.append(itme) 9 print({"k1":s1,"k2":s2}) 10 11 a={'k1':[],'k2':[]} 12 c=[11,22,33,44,55,66,77,88,99,90] 13 for i in c: 14 if i>66: 15 a['k1'].append(i) 16 else: 17 a['k2'].append(i) 18 print(a)
2. 统计s='hello alex alex say hello sb sb'中的每个单词的个数
结果如:{‘hello’ :2,‘alex’:2,‘say’:1,‘sb’:2}
1 s='hello alex alex say hello sb sb' 2 data={} 3 for item in s.split(): 4 if not item in data.keys(): 5 data[item]=1 6 else: 7 data[item]+=1 8 print(data)
9. 集合
作用:去重,关系运算
定义:由不同元素组成的的集合,集合是一种无序排列的可hash值,可以当作字典的key
集合的目的是将不同的值存放在一起,不同的集合间用来做关系运算,不必纠结集合中单个值
常用方法:
in 和not in
|合集
&交集
-差集
^对称差集
==
>,>= ,<,<= 父集,子集
练习
一· 关系运算:
有一下2个集合,pythons是报名python班的学员的集合,linuxs是报名linux班的学员集合
pythons=('alex','egon','wupeiqi','yuanhao','gangdan','biubiu')
linuxs=('wupeiqi','oldboy','gangdan')
1.求出即报名python又报名linux的学员集合
2.求出所有的学员集合
3.求出只报名python的学员集合
4.求出没有同时报名的学员集合
1 pythons = {'alex','egon','wupeiqi','yuanhao','gangdan','biubiu'} 2 linuxs = {'wupeiqi','oldboy','gangdan'} 3 # 1.求出即报名python又报名linux的学员集合 4 print(pythons & linuxs) 5 # 2.求出所有的学员集合 6 print(pythons | linuxs) 7 # 3.求出只报名python的学员集合 8 print(pythons - linuxs) 9 # 4.求出没有同时报名的学员集合 10 print(pythons ^ linuxs)
二·去重:
1.有列表l=['a','b',1,'a','a'],列表内的元素均为可hash类型,去重,新列表无需保持列表原来的顺序。
2.在上题的基础上保持列表原来的顺序
3.有如下列表,列表内的元素均为不可hash的类型,去重,新列表保持原来的顺序。
1 l=[ 2 {'name':'egon','age':18,'sex':'male'}, 3 {'name':'alex','age':73,'sex':'male'}, 4 {'name':'egon','age':20,'sex':'female'}, 5 {'name':'egon','age':18,'sex':'male'}, 6 {'name':'egon','age':18,'sex':'male'}, 7 ]
1 #1.有列表l=['a','b',1,'a','a'],列表内的元素均为可hash类型,去重,新列表无需保持列表原来的顺序 2 l=['a','b',1,'a','a'] 3 print(set(l)) 4 5 #2.在上题的基础上,保存列表原来的顺序 6 #不用集合 7 new_l=[] 8 for item in l: 9 if item not in new_l: 10 new_l.append(item) 11 print(new_l) 12 13 #用集合 14 l1=[] 15 s=set() 16 for item in l: 17 if item not in s: 18 s.add(item) #添加元素到元组 19 l1.append(item) 20 print(l1) 21 #3.有如下列表,列表元素为不可hash类型,去重,得到新列表,且新列表一定要保持列表原来的顺序 22 l=[ 23 {'name':'egon','age':18,'sex':'male'}, 24 {'name':'alex','age':73,'sex':'male'}, 25 {'name':'egon','age':20,'sex':'female'}, 26 {'name':'egon','age':18,'sex':'male'}, 27 {'name':'egon','age':18,'sex':'male'} 28 ] 29 s=set() 30 l1=[] 31 for itme in l: 32 val=(itme['name'],itme['age'],itme['sex']) 33 if val not in s: 34 s.add(val) 35 l1.append(itme) 36 print(l1)
10. 数据类型总结:
11.运行符
成员运算(in not in )
身份运算(is not is)
详细http://www.cnblogs.com/fanglingen/articles/7131469.html
12.文件处理
1 #user文件内容 2 test1|test1123|0 3 test2|test2123|0 4 test3|test3123|0 5 test4|test4123|0 6 test5|test5123|0 7 8 f1=open('user.txt','r') 9 data =f1.read() #把整个文件当作字符串来读 10 f1.close() #关闭文件 11 # print(data) 12 user_info = [] 13 user_str_info = data.split('\n') 14 for item in user_str_info: 15 temp = item.split('|') 16 # print(temp[2]) 17 v ={ 18 'name': temp[0], 19 'pwd':temp[1], 20 'times':temp[2] 21 } 22 user_info.append(v) 23 print(user_info)