Python变量以及常用数字类型(上)
好好学习,天天向上。又到了齐小猴写笔记的时间,今天的内容是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后面那个,是不是还好好的待着呢
变量及常用类型的上篇写到这,下篇预告:元组、列表和字典,如果一篇写不下可能还会有个中篇,具体情况等发布,不见不散