• Python全栈之路---day02(基础语法篇)


    Part one 格式化输出

    %s:字符串

    %d:digit 数字

    %%:只是单纯的显示%

    ps:格式化输出过程中要想输出%,再加一个%   eg:3%% 前一个%相当于转义

    3%%格式化输出  %%S格式化输出%S

    模式一:

    name=input('请输入姓名:')
    age=input('请输入年龄:')
    height=input('请输入身高:')
    msg='我叫%s,今年%s,身高%s' %(name,age,height)
    print(msg)

    模式二:

    name=input('请输入姓名:')
    age=(int)(input('请输入年龄:'))
    job=input('请输入工作:')
    hobbie=input('你的爱好:')
    msg='''
    --------Info of %s--------
    Name  : %s
    Age   : %d
    Job   : %s
    Hobbie: %s
    ---------------end--------------''' %(name,name,age,job,hobbie)
    print(msg)

    模式三:

    name=input('请输入姓名:')
    age=input('请输入年龄:')
    height=input('请输入身高:')
    msg='我叫%s,今年%s,身高%s,学习进度为3%%' %(name,age,height)
    print(msg)

    Part two 流程控制---while语句

    生活中经常会遇到需要循环的情境,比如:吃饭睡觉、听音乐等等。在程序代码的世界里不免也会存在很多需要循环进行的操作,在python中,我们应用while语句来对循环进行控制。其基本结构如下所示:

    While 条件:

             循环体

    Ps:如果条件为真,name循环体则执行,否则不执行

    那么当程序运行进入循环后,如何终止循环呢?

    方法有四种:

    1、  改变条件

    2、  调用关键字break

    3、  调用系统命令quit()、exit()。Ps:不建议使用

    4、  调用关键字continue(终止本次循环)

    有过其他编程语言经验的程序员都知道:else在大多数情况下都只于if搭配,但是在python中也存在while与else的搭配。while 后面的else 作用是指,当while 循环正常执行完,中间没有被break 中止的话,就会执行else后面的语句。如果执行过程中被break啦,就不会执行else的语句啦

    count=0
    while count<=5:
        count+=1
        if count==3:break
        print("Loop",count)
    else:
        print("循环正常执行完了")
    print("------out of while loop ------")

    Part three 基本运算符

    计算机可以进行的运算有很多种,可不只加减乘除这么简单,运算按种类可分为算数运算、比较运算、逻辑运算、赋值运算、成员运算、身份运算、位运算。今天暂且接触其中的几种运算。

    1、  算术运算

    以下假设变量:a=10,b=20

    2、  比较运算

    以下假设变量:a=10,b=20

    3、  赋值运算

    以下假设变量:a=10,b=20

    4、  逻辑运算

    针对逻辑运算的进一步研究:

    • ,在没有()的情况下not 优先级高于 and,and优先级高于or,即优先级关系为( )>not>and>or,同一优先级从左往右计算。
    •  x or y , x为真,值就是x,x为假,值是y;x and y, x为真,值是y,x为假,值是x。
     1 #x or y x为非0则返回x
     2 
     3 print(1  or 2) #1
     4 print(0 or 2)  #2
     5 print(3 or 2)  #3
     6 print(0 or 100) #100
     7 
     8 #ps int-->bool 非0转换为bool为True,0转换为bool为False
     9 print(bool(0)) #False
    10 print(bool(2))  #True
    11 print(bool(-2)) #True
    12 
    13 #bool-->int
    14 print(int(True))  #1
    15 print(int(False))  #0
    16 
    17 #x and y x为True,则返回y
    18 print(1 and 2)  #2
    19 print(0 and 2)  #0
    View Code

    5、  成员运算

    Python还支持成员运算符,测试实例中包含了一系列的成员,包括字符串,列表或元组。

    判断子元素是否在原字符串(字典,列表,集合)中

    6、  Python运算符优先级 

    以下表格列出了从最高到最低优先级的所有运算符:

    运算符描述
    ** 指数 (最高优先级)
    ~ + - 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@)
    * / % // 乘,除,取模和取整除
    + - 加法减法
    >> << 右移,左移运算符
    & 位 'AND'
    ^ | 位运算符
    <= < > >= 比较运算符
    <> == != 等于运算符
    = %= /= //= -= += *= **= 赋值运算符
    is is not 身份运算符
    in not in 成员运算符
    not and or 逻辑运算符

    Part four 初识编码

    计算机与人类的大脑不同,无法直接识别输入的各种类型的数据。在电脑中存在着成千上万的二极管,亮代表1不亮代表0,即实际上电脑存储和发送的数据均是由0和1组成的字符串,但是人们将其不同的0与1组合赋予不同的含义便可识别和传输人们想要的数据。

    最初,计算机所使用的密码本是ASCII码American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统ASCII码中只包含英文字母,数字以及特殊字符与二进制的对应关系,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256,所以,ASCII码最多只能表示 256 个符号

    随着计算机的发展. 以及普及率的提高. 流⾏到欧洲和亚洲. 这时ASCII码就不合适了。比如: 中⽂汉字有几万个. 而ASCII 多也就256个位置. 所以ASCII不行了. 怎么办呢? 这时, 不同的国家就提出了不同的编码用来适用于各自的语言环境(每个国家都有每个国家的GBK,每个国家的GBK都只包含ASCII码中内容以及本国自己的文字). 比如, 中国的GBK, GB2312, BIG5, ISO-8859-1等等. 这时各个国家都可以使用计算机了.

    经实际测试和查阅文档,GBK是采用单双字节变长编码,英文使用单字节编码,完全兼容ASCII字符编码,中文部分采用双字节编码。

    对于ASCII码中的内容,GBK完全沿用的ASCII码,所以一个英文字母(数字,特殊字母)用一个字节表示,而对于中文来说,一个中文用两个字节表示

    但是,随着全球化的普及,由于网络的连通,以及互联网产品的共用(不同国家的游戏,软件,建立联系等),各个国家都需要产生各种交集,此时急需一个密码本:要包含全世界所有的文字与二进制0101010的对应关系,所以创建了万国码:

    Unicode: 包含全世界所有的文字与二进制0101001的对应关系。

    起初:Unicode规定一个字符用两个字节表示:

      英文:  a b c  六个字节   一个英文2个字节       

      中文   中国   四个字节  一个中文用2个字节

    但是这种也不行,这种最多有65535种可能,可是中国文字有9万多,所以改成一个字符用四个字节表示:.       

      a  01000001 01000010 01000011 00000001       

      b  01000001 01000010 01100011 00000001       

      中 01001001 01000010 01100011 00000001       

    这样虽然解决了问题,但是又引出一个新的问题就是原本a可以用1个字节表示,却必须用4个字节,这样非常浪费资源,所以对Uniocde进行升级。 

    UTF-8:包含全世界所有的文字与二进制0101001的对应关系(最少用8位一个字节表示一个字符)。

    UTF-8 :最少用8位数,去表示一个字符.    

         英文:           8位,1个字节表示.   

        欧洲文字:         16位,两个字节表示一个字符.    

        中文,亚洲文字:       24位,三个字节表示.

    Part five 基础数据类型

    前一天已经接触过一些数据类型的知识了,现在我们来仔细学习一下基础数据类型。

    Python中常用的数据类型由7种,分别是:整数(int) ,字符串(str),布尔值(bool),列表(list),元组(tuple),字典(dict),集合(set).

    1、  整数(int)1,2,3 用于计算,这里不作详细介绍

    python给咱们提供了一种方法:bit_length()就是帮助你快速的计算整数在内存中占用的二进制码的长度.

    i=5
    print(i.bit_length())

    2、  字符串(str)

    2.3.1、字符串的索引与切片。

    组成字符串的字符从左至右,依次排列,他们都是有顺序的,就好比是部队的队列,从左至右依次报号(从零开始) :0,1,2,3....    索引即下标,就是字符串组成的元素从第一个开始,初始索引为0以此类推。

    a = 'ABCDEFGHIJK'
    print(a[0])
    print(a[3])
    print(a[5])
    print(a[7])

     切片就是通过索引(索引:索引:步长)截取字符串的一段,形成新的字符串(原则就是顾头不顾腚)

    a = 'ABCDEFGHIJK'
    print(a[0:3])  # print(a[:3]) 从开头开始取0可以默认不写
    print(a[2:5])
    print(a[:]) #默认到最后
    print(a[:-1]) # -1 是列表中最后一个元素的索引,但是要满足顾头不顾腚的原则,所以取不到K元素
    print(a[:5:2]) #加步长
    print(a[-1:-5:-2]) #反向加步长

    2.3.2、字符串常用方法。

    字符串除了可以用切片(步长)之外,还有一些其他的操作方法。

    #数字符串中的元素出现的个数。
    # ret3 = a1.count("a",0,4) # 可切片
    # print(ret3)
    
    a4 = "dkfjdkfasf54"
    #startswith 判断是否以...开头
    #endswith 判断是否以...结尾
    # ret4 = a4.endswith('jdk',3,6)  # 顾头不顾腚
    # print(ret4)  # 返回的是布尔值
    # ret5 = a4.startswith("kfj",1,4)
    # print(ret5)
    
    #split 以什么分割,最终形成一个列表此列表不含有这个分割的元素。
    # ret9 = 'title,Tilte,atre,'.split('t')
    # print(ret9)
    # ret91 = 'title,Tilte,atre,'.rsplit('t',1)
    # print(ret91)
    
    #format的三种玩法 格式化输出
    res='{} {} {}'.format('egon',18,'male')
    res='{1} {0} {1}'.format('egon',18,'male')
    res='{name} {age} {sex}'.format(sex='male',name='egon',age=18)
    
    #strip
    name='*barry**'
    print(name.strip('*'))
    print(name.lstrip('*'))
    print(name.rstrip('*'))
    
    #replace
    name='alex say :i have one tesla,my name is alex'
    print(name.replace('alex','SB',1))
    
    #####is系列
    name='taibai123'
    print(name.isalnum()) #字符串由字母或数字组成
    print(name.isalpha()) #字符串只由字母组成
    print(name.isdecimal()) #字符串只由十进制组成
    
    
    #############下面这些方法在数据类型补充时会讲到,现在不讲####################
    #寻找字符串中的元素是否存在
    # ret6 = a4.find("fjdk",1,6)
    # print(ret6)  # 返回的找到的元素的索引,如果找不到返回-1
    
    # ret61 = a4.index("fjdk",4,6)
    # print(ret61) # 返回的找到的元素的索引,找不到报错。
    
    #captalize,swapcase,title
    print(name.capitalize()) #首字母大写
    print(name.swapcase()) #大小写翻转
    msg='taibai say hi'
    print(msg.title()) #每个单词的首字母大写
    
    # 内同居中,总长度,空白处填充
    ret2 = a1.center(20,"*")
    print(ret2)
    View Code

    3、  布尔值(bool)

    布尔值就两种:True,False。就是反应条件的正确与否。

    真   1   True。

    假   0   False。 

    这里补充一下int str bool 三者数据类型之间的转换。

    #bool: True False
    #int-->str
    i=1
    s=str(i)
    
    #str-->int
    s='123'
    i=int(s)
    
    #int-->bool 只要是0-->False 非0就是True
    i=3
    b=bool(i)
    
    #bool-->int
    #True 1
    #False 0
    
    # str-->bool
    # s='' --->False
    # 非空字符串都是True
    # s="0"--->True

    4、  列表(list)

    python给咱们也提供了一类数据类型,他能承载多种数据类型,这类数据类型被称作容器类数据类型可以存储大量的数据。列表就属于容器类的数据类型。

    列表是python的基础数据类型之一 ,其他编程语言也有类似的数据类型.比如JS中的数 组, java中的数组等等. 它是以[ ]括起来, 每个元素用' , '隔开而且可以存放各种数据类型

    定义与输出:

    #列表
    li=['alex',[1,2,3],'wusir','egon','女神']
    print(li[0]) #alex
    print(li[1]) #[1, 2, 3]
    print(li[0:3]) #['alex', [1, 2, 3], 'wusir']

    #列表增append
    li=['alex',[1,2,3],'wusir','egon','女神']
    li.append('小碗')
    print(li) #['alex', [1, 2, 3], 'wusir', 'egon', '女神', '小碗']
    li.append(1)
    print(li) #['alex', [1, 2, 3], 'wusir', 'egon', '女神', '小碗', 1]
    li=['alex',[1,2,3],'wusir','egon','女神']
    li.insert(4,'春哥')
    print(li) #['alex', [1, 2, 3], 'wusir', 'egon', '春哥', '女神']
    #迭代(可迭代的对象才行,123就不行)
    li.extend('二哥')
    li.extend([1,2,3])
    print(li)  #['alex', [1, 2, 3], 'wusir', 'egon', '春哥', '女神', '二', '哥', 1, 2, 3]

    #
    li=['alex',[1,2,3],'wusir','egon','女神']
    name=li.pop(1)
    print(name)#可返回删除的对象  [1, 2, 3]
    name1=li.pop()#默认删最后一个
    print(name1)  #女神
    li.remove('egon')#按元素去删除
    print(li)  #['alex', 'wusir']
    li.clear()#清空 也可 del li
    #切片删
    del li[2:]
    print(li) #[]

    #
    li=['alex',[1,2,3],'wusir','egon','女神']
    li[0]='男神'
    #切片改
    li[0:2]='小白'
    li[0:3]=[1,2,3,'春哥','xiaobai']
    print(li) #[1, 2, 3, '春哥', 'xiaobai', 'egon', '女神']

    #
    li=['alex',[1,2,3],'wusir','egon','女神']
    for i in li:
        print(i)
    
    print(li[0:2])

    公共方法

    #公共方法:
    li=['alex',[1,2,3],'wusir','egon','女神']
    l=len(li)
    print(l) #5
    num=li.count('xiaobai')
    print(num) #0
    print(li.index('wusir')) #2
    
    #正向排序
    li=[1,4,7,2,4,9,22]
    li.sort()
    print(li) #[1, 2, 4, 4, 7, 9, 22]
    #倒向排序
    li.sort(reverse=True)
    print(li) #[22, 9, 7, 4, 4, 2, 1]
    #反转
    li.reverse()
    print(li) #[1, 2, 4, 4, 7, 9, 22]

    嵌套

    #列表的嵌套
    li=['taibai','wuli','袁和平',['Alex',89],23]
    print(li[1][1]) #u
    name=li[0].capitalize()
    print(name)  #Taibai
    li[0]=name
    print(li) #['Taibai', 'wuli', '袁和平', ['Alex', 89], 23]

    5、  元祖(tuple)

    Why:对于容器型数据类型list,无论谁都可以对其增删改查,那么有一些重要的数据放在list中是不安全的,所以需要一种容器类的数据类型存放重要的数据,创建之初只能查看而不能增删改,这种数据类型就是元组。

    what:这个容器型数据类型就是元组。

     元组:俗称不可变的列表,又被成为只读列表,元祖也是python的基本数据类型之一,用小括号括起来,里面可以放任何数据类型的数据,查询可以,循环也可以,切片也可以.但就是不能改.只读列表,可循环查询,可切片

    儿子不能改,孙子可能可以改
    tu=(1,2,3,'alex',[2,3,4,'taibai'],'egon')
    print(tu[3])
    print(tu[0:4])
    for i in tu:
        print(i)
    tu[4][3]=tu[4][3].upper()
    print(tu)

    用符号连接元素

    s='Alex'
    s1='_'.join(s)
    print(s1)  #A_l_e_x
    # #列表转换为字符串 join 列表--->字符串
    # #字符串--->列表 split()
    li=['taibai','xiaobai','女神']
    li1='*'.join(li)
    print(li1) #taibai*xiaobai*女神

    6、  字典(dict)

    数据类型划分:
    可变数据类型:列表list、字典dict、集合set 不可哈希
    不可变数据类型:元祖、bool、int、str 可哈希
    dict的key必须是不可变数据类型,可哈希,value可谓任意数据类型
    dict优点:二分法查找、存储大量的关系型数据
    dict特点:无序的

    字典的创建及输出:
    dict ={
        'name':['小明','小红','小白'],
        'cqu':[{'num':71,'avg_age':18},
               {'num':71,'avg_age':18},
               {'num':71,'avg_age':18},],
        True:1,
        (1,2,3):'gh',
        2:'二哥',
    }
    print(dict)

    dic={'age':18,'name':'wan','sex':'man'}
    #增:
    dic['height']=185   #没有键值对、添加
    dic['age']=16       #如果有键则覆盖
    print(dic)   #{'age': 16, 'name': 'wan', 'sex': 'man', 'height': 185}
    
    dic.setdefault('weight')#默认赋值为null
    dic.setdefault('name','xiaoer')#有该键值对不做任何改变
    print(dic)  #{'age': 16, 'name': 'wan', 'sex': 'man', 'height': 185, 'weight': None}
     删
     #
    dic={'age':18,'name':'wan','sex':'man'}
    print(dic.pop('age'))#有返回值,按键去删除      18
    print(dic.pop('二哥','没有此键'))#避免出错,可设置返回值    没有此键
    print(dic)   #{'name': 'wan', 'sex': 'man'}
    
    dic.popitem()#随机删除,有返回值:删除的键值
    print(dic)  #{'name': 'wan'}
    #
    # dic.clear()#清空字典
    # del dic['name']#删除
    # del dic
    #
    dic={'age':18,'name':'wan','sex':'man'}
    dic['age']=16
    dic={'age':18,'name':'wan','sex':'man'}
    dic1={'name':'Alex',"weight":75}
    dic1.update(dic)#覆盖添加
    print(dic)  #{'age': 18, 'name': 'wan', 'sex': 'man'}
    print(dic1)  #{'name': 'wan', 'weight': 75, 'age': 18, 'sex': 'man'}

    #
    dic={'age':18,'name':'wan','sex':'man'}
    print(dic.keys(),type(dic.keys()))#
    print(dic.values())#
    print(dic.items())#键值
    for i in dic:
        print(i)    #默认打出键
    for i in dic.keys():
        print(i)
    for i in dic.values():
        print(i)
    for i in dic.items():
        print(i)
    for k,v in dic.items():
        print(k,v)
    
    print(dic['name'])
     

    嵌套

    dic={
        'name':['Alex','wuli','xiaoming'],
        'cqu':{
            'qi':'2019',
            'money':8000,
            'address':'CQ',
        },
        'age':21
    }
    
    dic['age'] = 56  #
    dic['name'].append('haohao')
    print(dic)  #{'name': ['Alex', 'wuli', 'xiaoming', 'haohao'], 'cqu': {'qi': '2019', 'money': 8000, 'address': 'CQ'}, 'age': 56}
    dic['name'][1]=dic['name'][1].upper()
    print(dic)  #{'name': ['Alex', 'WULI', 'xiaoming', 'haohao'], 'cqu': {'qi': '2019', 'money': 8000, 'address': 'CQ'}, 'age': 56}
    
    dic['cqu']['female']=6
    print(dic) #{'name': ['Alex', 'WULI', 'xiaoming', 'haohao'], 'cqu': {'qi': '2019', 'money': 8000, 'address': 'CQ', 'female': 6}, 'age': 56}
    #

    7、  集合(set)

    可变的数据类型,他里面的元素是不可变的数据类型,无序、不重复  {}

    集合的创建、增、改、删、查(for遍历)
    set1=set({1,2,3})
    set2={1,2,3,[2,3],{'name','alex'}}#错的


    set1={'xiaoming','xiaohong','xiaobai','xiaonan'} # #add set1.add('nvsheng') print(set1)#{'xiaobai', 'nvsheng', 'xiaoming', 'xiaonan', 'xiaohong'} #update set1.update('abc')#迭代加 print(set1)#{'xiaobai', 'nvsheng', 'b', 'c', 'xiaoming', 'a', 'xiaonan', 'xiaohong'} #delete set1.pop()#随机删除 print(set1.pop())#有返回值 c print(set1)#{'xiaonan', 'xiaohong', 'xiaoming', 'xiaobai', 'a', 'nvsheng'} set1.remove('xiaobai')#按元素删 print(set1)#{'xiaonan', 'xiaohong', 'xiaoming', 'a', 'nvsheng'} # set1.clear()#清空

     集合的其他运算(交、并....)

    #求交集
    set1={1,2,3,4,5}
    set2={4,5,6,7,8}
    set3=set1&set2
    print(set3)  #{4, 5}
    print(set1.intersection(set2))  #{4, 5}
    #求并集
    set1={1,2,3,4,5}
    set2={4,5,6,7,8}
    print(set1|set2)  #{1, 2, 3, 4, 5, 6, 7, 8}
    print(set2.union(set1)) #{1, 2, 3, 4, 5, 6, 7, 8}
    #求反交集
    set1={1,2,3,4,5}
    set2={4,5,6,7,8}
    print(set1^set2)  #{1, 2, 3, 6, 7, 8}
    print(set1.symmetric_difference(set2))  #{1, 2, 3, 6, 7, 8}
    #求差集
    set1={1,2,3,4,5}
    set2={4,5,6,7,8}
    print(set1-set2)  #{1, 2, 3}
    print(set1.difference(set2)) #{1, 2, 3}
    #子集与超集
    set1={1,2,3}
    set2={1,2,3,4,5}
    print(set1<set2)  #True
    print(set1.issubset(set2))  #True
    print(set2>set1)  #True
    print(set2.issuperset(set1))  #True
    
    #去重
    li=[1,2,33,7,4,8,2]
    set1=set(li)
    print(set1) #{1, 2, 33, 4, 7, 8}
    li=list(set1)
    print(li)  #{1, 2, 33, 4, 7, 8}
    
    s=frozenset('barry')#set本身是可变的数据类型,可用该方法将其变为不可变的数据类型
    print(s,type(s))  #frozenset({'r', 'b', 'a', 'y'}) <class 'frozenset'>

    Part six 其他(for、enumerate、range)

    for循环:用户按照顺序循环可迭代对象的内容。

    复制代码
    msg = '柳柳爱火锅'
    for item in msg:
        print(item)
    
    li = ['alex','星仔','女神','egon','小伟']
    for i in li:
        print(i)
    
    dic = {'name':'星仔','age':18,'sex':'man'}
    for k,v in dic.items():
        print(k,v)
    复制代码

    enumerate:枚举,对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值。

    复制代码
    li = ['alex','星仔','女神','egon','小伟']
    for i in enumerate(li):
        print(i)
    for index,name in enumerate(li,1):
        print(index,name)
    for index, name in enumerate(li, 100):  # 起始位置默认是0,可更改
        print(index, name)    
    复制代码

    range:指定范围,生成指定数字。

    复制代码
    for i in range(1,10):
        print(i)
    
    for i in range(1,10,2):  # 步长
        print(i)
    
    for i in range(10,1,-2): # 反向步长
        print(i)
  • 相关阅读:
    分布式缓存
    分布式事务
    数据库系列-分库分表
    消息队列系列-简介
    JAVA系列-引用
    生产环境CPU占用过高分析
    技术书单(部分)
    GitHub的强大搜索功能简介
    VS2019 community版本下载Extension太慢解决方案
    Python2同时输出中文和变量时中文乱码
  • 原文地址:https://www.cnblogs.com/zhuoning/p/11354402.html
Copyright © 2020-2023  润新知