美文网首页软件测试
Python变量以及常用数字类型(上)

Python变量以及常用数字类型(上)

作者: 齐小猴 | 来源:发表于2019-07-28 12:52 被阅读77次

    好好学习,天天向上。又到了齐小猴写笔记的时间,今天的内容是python 变量以及常用数字类型,废话不多说,撸起袖子开始写

    变量

    1.说到变量,先回顾上一篇说过的标识符,自己定义,自己命名,由字母,下划线以及数字组成,必须小写字母,变量名是归属于标识符里面的,也需要我们自己命名,命名规则也是一样一样一样的

    a = 1
    b = 2
    

    这里定义了两个变量,变量a和变量b,a=1和b=2是分别对两个变量进行赋值,就好比我们小学时学数学x=1,y=2是一个道理,等号左边是变量名,右边是变量值,看不懂去补习小学数学。
    python里面一旦创建了一个变量,赋值给它以后,就会存储在python的内存里。那么我们在定义变量的时候要注意不要出现同名变量,什么意思呢,写一段试一下

    a = 1
    a = 2
    print(a)
    

    这里先定义一个变量a,赋值让它等于 1,紧接着,下面又定义了与它同名的变量a,赋值为2,这是输出a的结果

    D:\python\python.exe D:/python-test/day_01/day_01_3.py
    2
    

    可以看到,a的值是2,也就是说,最新的赋值会覆盖掉上一次的赋值,所以在定义变量时不能出现同名变量,如果出现,会以最新的值赋给该变量
    2.第二个需要注意的点是,如果你要引用一个变量,在引用之前,要确定是否已经定义并且赋值,同样举个栗子

    print(a)
    

    这里未定义过变量a,直接输出

    D:\python\python.exe D:/python-test/day_01/day_01_3.py
    Traceback (most recent call last):
      File "D:/python-test/day_01/day_01_3.py", line 5, in <module>
        print(a)
    NameError: name 'a' is not defined
    
    Process finished with exit code 1
    

    结果华丽丽的报错了,报错内容就是a没有被定义,如果在输出之前先定义一下变量a,并赋予一个值给它

    a = 1
    print(a)
    

    一定会得到你想要的结果

    D:\python\python.exe D:/python-test/day_01/day_01_3.py
    1
    
    

    python常见的数据类型

    数字

    1.整数 int
    2.浮点数float
    整型和浮点型是一个非常简单的概念,简单的说就是整数和小数,大家都是读过小学的人,可以轻而易举的判断出1是整数,2.5是小数,那么这里面1就是整型,2.5是浮点型,python呢也可以轻而易举的判断出,怎么看呢,用之前说过的type()函数

    a = 1
    b = 2.5
    print(type(a))
    print(type(b))
    
    D:\python\python.exe D:/python-test/day_01/day_01_3.py
    <class 'int'>
    <class 'float'>
    
    字符串

    1.成对的单引号或者成对的双引号括起来的内容都是字符串

    c = '1'
    d = "hello"
    print(type(c))
    print(type(d))
    
    D:\python\python.exe D:/python-test/day_01/day_01_3.py
    <class 'str'>
    <class 'str'>
    

    这里可以看到,单引号里面的1和双引号里面的hello,都是字符串
    2.字符串的取值访问

    d = "hello"
    print(d)
    

    在这里,d是一个字符串,hello,想要取到d的值,只需要print输出,执行一下,得到结果

    D:\python\python.exe D:/python-test/day_01/day_01_3.py
    hello
    

    完美!那如果我想取到hello中的e呢,稍微加个小改动即可

    d = "hello"
    print(d[1])
    

    看一下结果

    D:\python\python.exe D:/python-test/day_01/day_01_3.py
    e
    

    这是什么原理?第一,因为字符串里面的元素是由一个一个的字符组成,数一下hello,这里面有5个字符。第二,字符串里的每一个字符都是有索引的,位置是从0开始的,如何理解这一句,我们画个表格


    image.png

    把hello的每一个字符装进一个独立的表格,作为他们自己的索引,他们的位置从0开始,下一行标注他们的位置


    image.png
    这里可以比较直观的看出,我们想要的e在1的位置,所以,这个取值的方法是:字符串名[索引值],那么如果想要取o怎么取?就是这样:
    d = "hello"
    print(d[4])
    

    上面的这个是正序访问,还有一种方法是反序访问,从数据的尾部开始定义索引,索引位置从-1开始


    image.png

    所以,要取o还有第二种方法,那就是

    d = "hello"
    print(d[-1])
    

    3.如何处理字符串里的特殊字符
    特殊字符有什么呢,比如说换行字符\n,制表符\t
    这个处理方法在上一篇基础语法里有写过,转义,用r,R,或者\,此处不啰嗦,忘了的回去看基础语法篇
    4.字符串的运算
    字符串的运算符号主要有三个,先说前两个:+和*
    其中+是拼接字符串的意思,还是举个栗子:

    a = '123'
    b = ' is a student'
    c = a+b
    print(c)
    

    a和b分别是两个字符串,c用+将它们俩拼接,输出结果是:

    D:\python\python.exe D:/python-test/day_01/day_01_3.py
    123 is a student
    

    拼接后的c同样也是字符串

    print(type(c))
    
    D:\python\python.exe D:/python-test/day_01/day_01_3.py
    <class 'str'>
    

    “+”说完了,那“ * ”呢?它的作用是重复字符串,还是刚刚的变量a,用*做个运算

    a = '123'
    print(a*5)
    

    它的结果是将a重复输出5次

    D:\python\python.exe D:/python-test/day_01/day_01_3.py
    123123123123123
    

    +和*介绍完毕,让它们去后台吃盒饭,下面是第三个运算符,它是一个成员运算符,主要用来判断字符串in或者not in,返回值是布尔值,所谓的布尔值就是True和False

    a = 'hello'
    print('h' in a)
    

    此处定义变量a,赋值字符串hello,下面输出判断字母h是否在变量a里面

    D:\python\python.exe D:/python-test/day_01/day_01_3.py
    True
    

    返回的结果是True,布尔值,相反的

    a = 'hello'
    print('t' in a)
    

    判断字母t是否在a里面

    D:\python\python.exe D:/python-test/day_01/day_01_3.py
    False
    

    结果就是False
    到这里,字符串的运算基本说完了,那么问题来了,字符串在拼接的时候,必须是相同类型的字符串之间才可以进行拼接,如果,想要把不同类型的数据进行拼接怎么办

    a = 1
    b = 'hello'
    print(a+b)
    

    a是整数,b是字符串,a和b拼接,结果就是,报错了!

    D:\python\python.exe D:/python-test/day_01/day_01_3.py
    Traceback (most recent call last):
      File "D:/python-test/day_01/day_01_3.py", line 34, in <module>
        print(a+b)
    TypeError: unsupported operand type(s) for +: 'int' and 'str'
    

    为啥报错,人家也说的很明显,不支持不同int和str类型的数据拼接,有啥办法,当然有办法!
    a是整型对吧,把它转成字符串呗

    a = 1
    b = 'hello'
    print(str(a)+b)
    

    这样能不能拼?肯定能,再报错我就输一箱可乐给你

    D:\python\python.exe D:/python-test/day_01/day_01_3.py
    1hello
    

    这里注意:只能把数字类型转换成字符串,不能把字母转成数字
    4.字符串的切片
    上面说过根据字符串的索引去取值,但是这个取值有一个缺点,就是只能获取到单个值,如果想要取到一串字符串里面的子字符串,这个时候切片就可以出场了,也就是说,切片就是可以根据你的要求去取值
    用法是这样的:字符串名[m:n:k],m是索引开始的地方,n是索引结束的地方+1,k是步长。m和k不难理解,容易让人懵逼的地方是n,索引结束的地方+1怎么解释,还是以字符串hello为例

    a = 'hello'
    res = a[0:4:1]
    print(res)
    

    m是0,索引开始的位置,k是1,从索引值0开始依次加1,顺序0,1,2.....,n这里定义为4,假设索引结束的地方是n,那么这个输出结果是一直取到索引位置4,会是hello,现在运行一下结果

    D:\python\python.exe D:/python-test/day_01/day_01_3.py
    hell
    

    诶,好像比假设中想象的结果少了点什么,少了个o,这时候返回去看当时的用法:

    n是索引结束的地方+1

    这里的n是4对吧,4是结束的地方+1,那么结束的地方是几呢,小学加减法,肯定是3啊,所以,从0开始,每次加1,到3的位置结束,结果是“hell”,这下没毛病了,如果想要打出完整的“hello”,只需要这样

    a = 'hello'
    res = a[0:5:1]
    print(res)
    

    结束位置再加1,变成5,确认过眼神,输出是对的人:

    D:\python\python.exe D:/python-test/day_01/day_01_3.py
    hello
    

    k如果等于2或者其他值,除了取值的步长间隔,没有其他差别,给个例子自己体会

    a = 'hello'
    res = a[0:5:2]
    print(res)
    
    D:\python\python.exe D:/python-test/day_01/day_01_3.py
    hlo
    

    如果不输入k,k就取默认值1

    a = 'hello'
    res = a[0:5]
    print(res)
    

    不输入k,这里的k默认是1,结果是一样的

    D:\python\python.exe D:/python-test/day_01/day_01_3.py
    hello
    

    如果m和n也不输入,默认从头取到尾

    a = 'hello'
    res = a[:]
    print(res)
    
    D:\python\python.exe D:/python-test/day_01/day_01_3.py
    hello
    

    5.字符串的格式化输出
    格式化输出根据概念一句两句说不清楚,直接上栗子吧:

    name = '静静'
    age = 18
    

    先定义俩变量,名字是静静,别问我静静是谁,年龄18,现在要输出一个什么样的结果呢?把他俩连成一句话,小学语文造句嘛,上面说过字符串拼接是吧,好

    name = '静静'
    age = 18
    print(name+',今年'+str(age)+'岁')
    
    D:\python\python.exe D:/python-test/day_01/day_01_3.py
    静静,今年18岁
    

    拼是拼上了,没啥问题,但是呢,如果想拼一句很长的话,这个方法着实有点麻烦,又要拼,又要转换格式,一不小心还搞不好会出错,想个办法优化一下:

    name = '静静'
    age = 18
    print(name,'今年',age,'岁')
    

    用逗号隔开,相当于隔开不同的元素,这样不需要通过转换整数的数据类型去和字符串拼接

    D:\python\python.exe D:/python-test/day_01/day_01_3.py
    静静 今年 18 岁
    

    比上面的方法好了一点,但是也不是特别好,输出的结果里面多了好多空格,因为逗号是输出不同元素,中间就会多一个空格,所以这个办法也不完美,下面介绍格式化输出:
    (1)第一种格式化输出方式:
    首先介绍几个字符:%d表示要放一个整数,%f表示要放一个浮点数,%s表示要放一个字符串,那么上面的代码可以这样写

    name = '静静'
    age = 18
    print('%s今年%d岁'%(name, age))
    

    输出一个完整的字符串:"%s今年%d岁",其中有一个字符串的取值%s,和一个整数取值%d,他们的值分别取变量name和变量age,按顺序将name赋值给%s,age赋值给%d

    D:\python\python.exe D:/python-test/day_01/day_01_3.py
    静静今年18岁
    

    (2)第二种格式化输出方式
    利用format{}

    name = '静静'
    age = 18
    print('{}今年{}岁'.format(name, age))
    

    用法就是,{}代表此处要取值,按照顺序,取format后面的变量,在这里,name赋值给第一个{},age赋值给第二个{},所以结果是:

    D:\python\python.exe D:/python-test/day_01/day_01_3.py
    静静今年18岁
    

    刚刚的例子是{}里面不指定数值,就会按照顺序取值,那如果{}给了指定值会怎样

    name = '静静'
    age = 18
    print('{1}今年{1}岁'.format(name, age))
    

    这里给的1可不是整数1,是索引值,也就是位置,跟之前说的一样,从0开始,如果是这样,那么输出的是:

    D:\python\python.exe D:/python-test/day_01/day_01_3.py
    18今年18岁
    

    两个{}取的都是age(因为format里面的数据也是有索引的,并且也是从0开始标记,name索引是0,age是1),所以如果改成

    name = '静静'
    age = 18
    print('{0}今年{1}岁'.format(name, age))
    

    那么输出结果就是:

    D:\python\python.exe D:/python-test/day_01/day_01_3.py
    静静今年18岁
    

    6.字符串的内建函数使用
    终于说到字符串的最后一个内容了,别睡,挺住!我会尽量少废话,言简意赅
    (1)字符串的大小写切换,upper()和lower(),直接上栗子,聪明如你不需要解释

    str1 = 'hello'
    res = str1.upper()
    print('切换后的结果{}'.format(res))
    
    D:\python\python.exe D:/python-test/day_01/day_01_3.py
    切换后的结果HELLO
    
    str2 = 'PYTHON'
    res = str2.lower()
    print('转换后的结果{}'.format(res))
    
    D:\python\python.exe D:/python-test/day_01/day_01_3.py
    转换后的结果python
    

    (2)字符串的查找,find()函数
    它可以用来找单个字符或者子字符串
    a.单个字符:如果能找到,就返回单个字符在字符串里面的索引值
    b.子字符串:如果能找到,就返回子字符串的第一个元素在原字符串里面的索引值
    c.如果没找到,就返回-1
    以下分别举例
    a.单个字符:

    str1 ='hello'
    res = str1.find('o')
    print('查找的结果:{}'.format(res))
    
    D:\python\python.exe D:/python-test/day_01/day_01_3.py
    查找的结果:4
    

    b.子字符串

    str1 ='hello'
    res = str1.find('ell')
    print('查找的结果:{}'.format(res))
    
    D:\python\python.exe D:/python-test/day_01/day_01_3.py
    查找的结果:1
    

    c.找不到

    str1 ='hello'
    res = str1.find('666')
    print('查找的结果:{}'.format(res))
    
    D:\python\python.exe D:/python-test/day_01/day_01_3.py
    查找的结果:-1
    

    (3)字符串的替换 replace()
    它的用法就是replace('要替换的目标字符','替换后的新值')
    例如,将hello中的l都替换成@

    str1 = 'hello'
    res =str1.replace('l', '@')
    print('替换后的结果:{}'.format(res))
    
    D:\python\python.exe D:/python-test/day_01/day_01_3.py
    替换后的结果:he@@o
    

    两个l都被替换成了@,如果只想替换一个怎么办?别担心,replace()方法可以指定替换次数,这样用replace('要替换的目标字符','替换后的新值',替换次数)

    str1 = 'hello'
    res =str1.replace('l', '@', 1)
    print('替换后的结果:{}'.format(res))
    
    D:\python\python.exe D:/python-test/day_01/day_01_3.py
    替换后的结果:he@lo
    

    注意:只能指定替换次数,不能指定替换哪一个字符,不要想太多
    (4)字符串的切割 split()
    它会将我们的字符串根据指定的元素进行切割,切割后的结果返回列表类型的数据,但是元素类型还是字符串,比如一个西瓜切成三半,每一半还是西瓜

    str1 = 'potato'
    res = str1.split('o')
    print('切割后的结果:{}'.format(res))
    

    以元素o的位置切割字符串potato,两个o切两刀,所以会有三段,切割后的字符串存到列表里,结果是:

    D:\python\python.exe D:/python-test/day_01/day_01_3.py
    切割后的结果:['p', 'tat', '']
    

    (5)字符串头尾的处理 strip()
    它专门去掉字符串头和尾的元素
    还用刚刚的potato,把尾巴上的o去掉

    str1 = 'potato'
    res =str1.strip('o')
    print('处理后的结果:{}'.format(res))
    
    D:\python\python.exe D:/python-test/day_01/day_01_3.py
    处理后的结果:potat
    

    如果结尾有两个o

    str1 = 'potatoo'
    res =str1.strip('o')
    print('处理后的结果:{}'.format(res))
    

    结果就是,两个o都不留

    D:\python\python.exe D:/python-test/day_01/day_01_3.py
    处理后的结果:potat
    

    加入开头也有o

    str1 = 'oopotatoo'
    res =str1.strip('o')
    print('处理后的结果:{}'.format(res))
    

    那么,他们会手拉手一起走,去哪了?不知道,咱也不敢问,反正不在字符串里了

    D:\python\python.exe D:/python-test/day_01/day_01_3.py
    处理后的结果:potat
    

    注意:这里只会去掉头和尾上的o,中间的不会去掉,p后面那个,是不是还好好的待着呢
    变量及常用类型的上篇写到这,下篇预告:元组、列表和字典,如果一篇写不下可能还会有个中篇,具体情况等发布,不见不散

    相关文章

      网友评论

        本文标题:Python变量以及常用数字类型(上)

        本文链接:https://www.haomeiwen.com/subject/zhverctx.html