第2章 数据类型

 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'>
View Code

      4.2  复数

     
1 >>> x=1-2j
2 >>> x.real 
3 1.0
4 >>> x.imag
5 -2.0
View Code

  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	hello'
 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())       #是否是每个词首字母大写的字符串
View Code

     练习

# 写代码,有如下变量,请按照要求实现每个功能 (共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])
View Code

 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)
View Code

           练习

                   有列表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,"")
View Code

           模拟队列 (先进先出)

 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)
View Code

           模拟堆栈  (先进后出)

 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)
View Code

 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)
View Code

      练习 :简单购物车

      实现打印商品的详细信息,用户输入商品名和个数,则将商品名,价格,个数加入购物列表,如果,输入为空或其他非法信息,要求用户重新输入。

      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)
View Code

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的初始值
View Code

     常用操作:

           存/取

           删除

           键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)
View Code

          练习

          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)
View Code

          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)
View Code

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)
View Code

             二·去重:

              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 ]
View Code
 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)
View Code

 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('
')
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)
View Code

     

  

    

原文地址:https://www.cnblogs.com/fanglingen/p/7156678.html