zoukankan      html  css  js  c++  java
  • 第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

         

      

        

  • 相关阅读:
    大数计算问题
    句子逆序
    字符个数统计
    提取不重复的整数
    合并表记录
    浅谈之高级查询over(partition by)
    proc之建表添加数据报错解决
    浅谈之过滤条件【or】
    浅谈之索引失效
    浅谈之表连接方法
  • 原文地址:https://www.cnblogs.com/fanglingen/p/7156678.html
Copyright © 2011-2022 走看看