zoukankan      html  css  js  c++  java
  • python day2:python的基本数据类型及其方法

    python day2

    2019/10/5

    1. 编码转换

    编程是外国佬发明的,所以一开始的编码表只有英文与标点符号,没有中文的事。
    ASCII编码表:一个字符占用两个字节。
    后来中国人发明了GBK编码表,可以显示中文。
    再后来又有了Unicode万国码. Unicode可以包容全世界人民的语言。Unicode是统一用4个字节来表示一个字符。python2默认使用unicode码表。
    又有了utf-8。utf-8是表示英文仍然是两个字节,中文占用3到6个字节。现在python3默认使用utf-8作为编码方式。
    每个模块的开头的# -*- coding:utf-8 -*-就是指明编码方式是utf-8。
    python2.x的编码方式之间的转换如下:
    编码转换
    就是utf-8如果要转换成gbk,必须要通过unicode作为中转。

    # -*- coding:utf-8 -*-
    
    #下面是python2的情况
    temp = '张三' 
    #decode()方法是解码,解码必须指定原来的编码方式,就是解码成unicode码。
    temp_unicode = temp.decode('utf-8')
    #编码也要指定需要编码的码表。
    tem_gbk=temp_unicode.encode('gbk')
    print(temp,temp_unicode,temp_gbk,sep='	')
    
    #下面是python3的情况
    #python3中,自动转换utf-8,unicode,gbk
    #python3中,移除了unicode类型
    temp='李四'
    temp_gbk=temp.encode('gbk')
    

    2. python的基本数据类型

    总共有八种基本数据类型:int(数字),float(浮点数),str(字符串),bool(布尔值),list(列表),tuple(元组),dict(字典),set(集合)。
    每种数据类型都有自己独有的方法与属性。
    python是强类型语言,不同类型之间不能相互运算
    可以通过type(x)函数判断某个变量x是哪种类型。
    可以通过dir(x)函数来判断某个对象x有哪些方法。
    可以通过help(type(x))函数来判断某个对象x的具体方法说明。
    所有类型具备的方法都在它的类中。
    2.1. 数值类型(int,float)
    数值类型有加减乘除幂运算,也有比较操作等。

    #打开buitlins模块,看到int类基本上都是魔法方法(左右两边都是双下划线叫魔法方法,比如__add__)。
    int(x,base=10)  #将数值型字符串x转化成整数,默认是10进制,也可以改成8,16。
    a=2#将2赋值给变量2
    a.__eq__(5)  #就是判断2是否==5
    a.__add__(5)  #就是2+5
    a.__sub__(1)  # 2-1
    a.__mul__(3)   # 2*3
    a.__div__(2)    # 2/2,返回1.0
    a.__divmod__(2)  #2除以2,返回得是商和余组成的元组。
    a.__floordiv__(2)  # 就是2//2,取商是1。
    a.__ge__(1)  #就是a>=1,g是great,e是equal
    a.__gt__(1)  #就是a>1,g是great,t是than。
    a.__le__(1)  #就是a<=1,l是less,e是equal
    a.__lt__(1)  #就是a<1,l是less,t是than.
    a.__mod__(2)  #就是a%2,取余是0。
    a.__pow__(3)   # 2**3
    a.__lshift__(2)  # a<<2,a的二进制左移2位,相当于a*(2**2)
    a.__rshift__(2)  # a>>2,a的二进制右移2位,相当于a/(2**2)
    

    2.2. str(字符串)
    而str,就会有很多方法了。常用方法有:strip,index,切片,split,join,len.(记得学英语的时候,记不住太多单词,慢慢用着用着就会了。)
    capitalize,center,count,decode,encode,endswith,startswith,expandtabs,find,index,format,join,isdigit,split,strip,title,lstrip,rstrip,partition,replace,swapcase,upper,lower.

    s1 = 'love is Not {0} EaSy'
    s1.capitalize()  # 返回s1的一份复制,并且是首字母大写,其余小写
    s1.center(20,'-')  # 让字符串在指定长度内居中,不够的长度以第二个参数进行填充。第二个参数默认是空格。
    s1.count('N',2,10) #从指定长度统计第一个参数即N出现的次数。后面两个参数2与10可以不写,默认是None,就会搜寻整个字符串。
    s1.decode('utf-8) # 某UTF8解码
    s1.encode('gbk') #以gbk码表进行编码。
    s1.endswith('y',1,8)  #判断指定索引长度即第2个到7个是否以y结束,为真则返回True,假则是False。
    s1.find('e',3,6)   # 从指定索引长度即第3个到第5个,去找到e,如果找到了,返回e的索引值,找不到则返回-1
    s1.index('e')  # 返回e的索引值,如果e不存在,则会报错。也可以指定索引长度。
    s1.format('so')  #字符串的格式化,将so代替占位符{0}。
    ‘*’.join([1,2,3])  #join是连接方法,参数一般是可迭代对象。使用*去连接列表中元素,并返回一个字符串‘123’
    s1.isdigit()  #判断s1是否是整数型字符串
    s1.split(' ')  #以传递的参数空格作为分隔符,返回一个列表,即['love','is','Not','{0}','EaSy']
    s1.strip()  #去掉字符串左右两边的空格。
    s1.title()   # 每一个单词的首字母都大写
    s1.lstrip()  #去掉左边的空格。
    s1.rstrip()  # 去掉右边的空格
    s1.partition('is')  # 按照给定字符串,分成三部分,并返回一个元组。
    s1.replace('Not','so')  # 将not替换为so
    s1.swapcase()  #大小写一一转换
    s1.upper()   #全部大写
    s1.lower()   #全部小写
    s1.isalnum()  #判断字符串是否是由字母或数字组成。
    s1.isalpha()  #判断字符串是否全部由字母组成。
    

    3. for 迭代遍历

    for迭代遍历的语法格式如下:

    for item in iterable:
        执行语句
    

    一开始的时候不是太懂,是没有搞懂迭代与遍历的意思,可迭代对象是iterable,iterable或者为空,或者至少有1个以上的元素,for item in iterable就是把item当作iterable里面的每一个元素,这样iterable里面的每个元素都走一遍就叫迭代。
    比如:for x in [1,2,3,4]意思就是x按照顺序依次等于1,2,3,4,后面的执行语句每次都执行一次。

    4. 列表list

    形如[1,'2',True,'张三']这样用中括号括起来的就是列表list。列表的元素可以是任意数据类型,也就是说列表里面还可以嵌套列表。
    列表是有顺序的,就是有索引值,列表的第一个元素的索引值从0开始,第二个元素索引值是1,依此类推。
    定义列表有两种方法,一种是直接用中括号写,比如list1 = [1,3,'4',],第二种就是使用内置函数list,比如list1=list(1,2,3)(一个变量后面跟着括号叫做函数调用,比如list()就是调用list函数)
    列表的方法:索引,切片,append,clear,count,extend,index,insert,pop,remove,reverse,sort.
    列表也是可迭代的。凡是可是用索引来查元素的,就是有序的。

    list1=[1,2,'3',True,'x']   #定义一个列表包含5个元素,并将其赋值给变量list1.
    # 列表的索引
    list1[0]  # 取列表的第1个元素1
    list1[-1] # 索引值也可以是负数,表示倒着取,-1表示最后一个元素。
    list1[2] #取列表的第3个元素,即'3'。
    list1[-2] # 取列表的倒数第2个元素,即True.
    #可以通过索引直接修改列表的元素
    list[0] = 8 #将第1个由1改为8了
    #列表的切片
    #切片就是取列表的某一段。切片是按照索引值来进行的,并且是包括左边不包括右边,即左包右不包。
    list1[0:2]#表示从索引值0开始,一直到索引值为2结束(不包括2),也就是取索引值0与1这两个元素,并返回这两个元素组成的新列表,即[1,2]。
    list1[0:2:2]#切片有三个参数,第一个表示从哪开始,第二个表示到哪结束,第三个表示步长,步长即每隔多少个取一个。
    #上面表示从0开始,到2结束,步长为2。即取奇数项索引,所以只取到了元素1。
    list1[:]#第一个参数不写则默认是0,第二个参数不写,则默认是列表长度,第三个参数不写则默认是1,所以这里表示复制一份列表。
    list1[-4::-2]#表示倒着取,步长为2,前面的索引值也得是负数。结果是[2]。
    #往列表的最后项追加元素
    list1.append(7)
    #往列表里面插入指定索引位置元素
    list1.insert(1,'李四')
    #统计列表中某个元素的出现次数,可以指定索引长度。
    list1.count(1,0,3)#表示在索引值从0到3终止这个切片段,1这个元素出现了多少次。如果不指定索引长度,则默认是整个列表。
    #扩展,将另一个可迭代对象的元素添加到列表的末尾。
    a=list(1,2,3)
    list1.extend(a)#
    #返回某个元素的索引值,也可以指定索引长度
    list1.index(1,0,4),如果不写,则默认是整个列表第一次出现元素1的索引值。
    #pop是从列表中抽取一个元素,返回且删除这个元素。参数是索引值。
    list1.pop(-2)#删除倒数第2个元素
    list1.pop()#不写索引值,则默认删除最后一个元素。
    #remove是删除元素,参数是删除元素。
    list1.remove('x')#删除元素x
    #反转,就是倒着顺序显示列表
    list1.reverse()#将元素按照反转的顺序进行排列
    #排序,sort(self,key=None, reverse=False)。key是传递一个排序函数,而reverse是布尔值,默认为False,则按升序进行排列,如果为真,则按逆序进行排列。
    #排序时,英文与数字默认按照ASCII码表进行排序,中文按UNICODE码。
    list2=[-1,-2,3,7,-9]
    list2.sort()
    list1.sort(key=abs,reverse=True)
    

    5. 元组tuple

    形如(1,2,'3',True)的就是元组。元组是有序的可迭代的不可变对象。
    元组与列表差不多,只是没有增删改切片方法,所以元组是不可变对象。
    定义元组有两种方法,一种是直接定义:t1=(1,2,'3',True),
    第二种就是使用tuple函数,t1=tuple(list(1,2,3)),tuple后面跟可迭代对象。
    元组可以通过索引查看元素,但是没有切片。

    6. 字典dict

    字典是key:value形式的键值对的集合,无序的,可迭代的,可变对象。
    定义字典有两种方法,一种是直接定义:d1={1:'x','some':2,3:True}
    第二是通过dict函数定义:d2=dict(1=3,name='lanxing',z=True)
    注意:key必须是不可变对象,value则可以是任意数据类型。
    字典的方法:key索引,clear,copy,fromkeys,get,items,keys,pop,popitem,setdefault,update,values。

    d1={1:'x','some':2,3:True}#定义一个dict
    v1= d1[1] #通过key来访问value
    v2= d1['some'] 
    d1['some']='y' #通过key来修改value,如果key存在,则修改value,如果不存在,则创建新的key:value对。
    d1[‘x'] = 'z' #创建新的key:value对。
    d1.copy() #浅复制一份字典
    d2=dict() #创建一个空字典
    #fromkeys(S[,v])方法表示创建一个新字典,新字典的key是来自第一个参数,值是可选的,默认是None,如果写了,则每个值都是一样的。
    d3=d2.fromkeys(d1,'x')
    #D.get(k[,d]),根据key获得值,如果key存在,则返回D[key],不存在则返回d,默认d就是None
    d1.get('hello',5) #返回5,因为索引hello并不存在
    #返回所有的键值对,键值对以元组展示,所有的元组存储在列表中
    d1.items() #输出是形如dict_items([(1, 'x'), ('some', 2), (3, True)])
    #d1.keys(),返回所有的key列表
    d1.keys()
    #d1.keys(),返回所有的key列表
    d1.values()
    #d1.pop(key[,v])输出指定key的值在屏幕上,并删除指定key的键值对,如果key不存在会报错。也可以指定key不存在时,返回的值。
    d1.pop(1)
    #随机删除一个键值对。
    d1.popitem()
    #D.setdefault(k[,v=none]),如果k存在,则返回D[k],不存在则创建D[k]=v。
    d1.setdefault('z','helloworld')
    ’‘’
    def update(self, E=None, **F): # known special case of dict.update
            """ 更新
                {'name':'alex', 'age': 18000}
                [('name','sbsbsb'),]
            """
            """
            D.update([E, ]**F) -> None.  Update D from dict/iterable E and F.
            If E present and has a .keys() method, does:     for k in E: D[k] = E[k]
            If E present and lacks .keys() method, does:     for (k, v) in E: D[k] = v
            In either case, this is followed by: for k in F: D[k] = F[k]
            """
            pass
    ‘’‘
    d3 = {'name':'张三','age':18}
    d1.update(d3,sex='male',hobby='coding')
    {'some': 2, 3: True, 'name': '张三', 'age': 18, 'sex': 'male', 'hobby': 'coding'}
    
    

    7. 枚举enumerate

    为可迭代对象增加序列号:0,1,2,3...,默认从0开始,可以指定。

    for k,v in enumerate(list(('name1','name2','name3'))):
        #('name1','name2','name3')是一个元组,list括号只接一个参数,即可迭代对象,而元组是可迭代对象。enumerate括号也是传入的可迭代对象。
        print(k,v)
    

    8. range和xrange

    8.1. python2.x

    range()立刻在内存中生成数字序列。
    xrange(1,10,3)生成可迭代的数字序列。左包,右不包。从1开始,到10终止,步长为3。

    8.2. python3.x中

    range等于xrange.

    for i in range(1,10,3):
        print(i)
    

    9. 作业

    '''
    一、元素分类
    
    有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
    即: {'k1': 大于66的所有值, 'k2': 小于66的所有值}
    
    二、查找
    查找列表中元素,移除每个元素的空格,并查找以 a或A开头 并且以 c 结尾的所有元素。
        li = ["alec", " aric", "Alex", "Tony", "rain"]
        tu = ("alec", " aric", "Alex", "Tony", "rain") 
        dic = {'k1': "alex", 'k2': ' aric',  "k3": "Alex", "k4": "Tony"}
     
    三、输出商品列表,用户输入序号,显示用户选中的商品
        商品 li = ["手机", "电脑", '鼠标垫', '游艇']
     
    四、购物车
    功能要求:
    
    要求用户输入总资产,例如:2000
    显示商品列表,让用户根据序号选择商品,加入购物车
    购买,如果商品总额大于总资产,提示账户余额不足,否则,购买成功。
    附加:可充值、某商品移除购物车
    1
    2
    3
    4
    5
    6
    goods = [
        {"name": "电脑", "price": 1999},
        {"name": "鼠标", "price": 10},
        {"name": "游艇", "price": 20},
        {"name": "美女", "price": 998},
    ]
     五、用户交互,显示省市县三级联动的选择
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    dic = {
        "河北": {
            "石家庄": ["鹿泉", "藁城", "元氏"],
            "邯郸": ["永年", "涉县", "磁县"],
        }
        "河南": {
            ...
        }
        "山西": {
            ...
        }
     
    }
    '''
    #第一题
    '''
    d1 = {}
    list0 = [x*10+x for x in range(1, 10)]
    list1 = []
    list2 = []
    for x in list0:
        if x > 66:
            list1.append(x)
        elif x < 66:
            list2.append(x)
    d1['k1'] = list1
    d1['k2'] = list2
    print(d1)
    '''
    
    #第二题
    '''
    list0=[li,tu,dic.values()]
    list1 = []
    for j in list0:
        for i in j:
            i=i.strip()
            if i.startswith('a') or i.startswith('A') and i.endswith('c'):
                list1.append(i)
    print(list1)
    '''
    
    #第三题
    '''
    li = ["手机", "电脑", '鼠标垫', '游艇']
    
    for k, g in enumerate(li):
        print(k,g)
    while True:
        choice = input('请输入商品序列号选择商品')
        if choice.isdigit():
            if 0<=int(choice)<=len(li):
                print(li[int(choice)])
        else:
            break
    '''
    #第四题
    '''
    goods = [
        {"name": "电脑", "price": 1999},
        {"name": "鼠标", "price": 10},
        {"name": "游艇", "price": 20},
        {"name": "美女", "price": 998},
    ]
    for k, v in enumerate(goods):
        list1 = list(v.values())
        print(k, list1[0], list1[1])
    asset = int(input('请输入你的总资产:'))
    list2 = []
    sum = 0
    dict1 = {}
    while True:
        choice = input('请输入序列号选择商品或或c清除商品或或m充值或q退出:>>>')
        if choice.strip().isdigit():
            num = int(choice)
            if 0 <= num < len(goods):
                if asset - goods[num]['price'] >= 0:
                    list2.append(goods[num]['name'])
                    asset = asset - goods[num]['price']
                    sum += goods[num]['price']
                    dict1[goods[num]['name']] = goods[num]['price']
                    print('购买商品%s成功,花费金额%s,总共消费金额%s,剩余金额%s' %
                          (goods[num]['name'], goods[num]['price'], sum, asset))
                else:
                    print('余额不足,请充值')
        elif choice.strip().lower() == 'c':
            print('购物清单如下:')
            set2 = set(list2)
            list3 = []
            for k, v in enumerate(set2):
                print('序号:%s 数量:%s 商品:%s 总金额:%s' %
                      (k, list2.count(v), v, list2.count(v)*dict1[v]))
                list3.append(v)
    
            choice2 = int(input('请输入移除的商品序列号:>>>'))
            list2.remove(list3[choice2])
            asset = asset + dict1[list3[choice2]]
        elif choice.strip().lower() == 'm':
            money = int(input('请输入充值金额:>>>'))
            asset = asset + money
    
        elif choice.strip().lower() == 'q':
            print('购买商品如下:')
            set2 = set(list2)
            for k, v in enumerate(set2):
                print('序号:%s 数量:%s 商品:%s 总金额:%s' %
                      (k, list2.count(v), v, list2.count(v)*dict1[v]))
            print('剩余金额%s' % asset)
            break
        else:
            print('输入错误,请输入序列号')
    '''
    
    #第五题
    '''
    dic = {
        "河北": {
            "石家庄": ["鹿泉", "藁城", "元氏"],
            "邯郸": ["永年", "涉县", "磁县"],
        },
        "河南": {
            '郑州': ['郑一', '郑二'],
            '开封': ['开一', '开二']
        },
        "山西": {
            '太原': ['太一', '太二'],
            '同大': ['同一', '同二']
    
        }
    
    }
    for k, v in enumerate(dic.keys()):
            print(k, v)
    while True:   
        province_choice = int(input('请输入序号选择哪个省:>>>').strip())
        if province_choice == 0:
            list1=list(dic['河北'].keys())
            for i in range(len(list1)):
                print(i,list1[i] )
            city_choice = int(input('请输入序号选择哪个市:>>>').strip())
            if city_choice == 0:
                list2 = dic['河北']['石家庄']
                for j in range(len(list2)):
                    print(j,list2[j])
                town_choice = int(input('请输入序号选择哪个县:>>>').strip())
                if town_choice==0:
                    print(list2[0])
                elif town_choice==1:
                    print(list2[1])
                elif town_choice==2:
                    print(list2[2])
        elif province_choice == 1:
            pass
        else:
            pass
    '''
    
  • 相关阅读:
    解决input 输入框频繁请求问题,如果拿取最后一次接口返回的值
    记录两个小问题
    axios 如何取消请求
    给vue组件绑定原生事件
    Vue3 与 Vue2的不同之处一 简单介绍 Vue 核心最基本的功能
    js将数组对象中,以某个值相同的对象合并成一个;即把某个值相同的对象内容合并成一个
    postcss-preset-env
    webpack5 tree shaking
    深拷贝
    webpack 性能优化
  • 原文地址:https://www.cnblogs.com/lanxing0422/p/pythonday2.html
Copyright © 2011-2022 走看看