目录
python中的变量是为了让计算机像人一样去记忆事物的某种状态,变量值就是用来存储事物状态的,而事物的状态是分成不同类型的(比如:人的性别、年龄),相应的变量值也会有不同的类型。
一、数字
在这里把整形、浮点型及复数型统计为数字一种类型。名字+括号的意思就是调用某个功能。
1、int() 整形
1、作用
用来记录人的年龄、人数、年月等整数相关的状态。
2、定义
age = 18 year = 2022 people = 7
2、float() 浮点型
1、作用
用来记录人的身高、体重等小数相关的状态
2、定义
height = 170.0 weight = 60.3
3、complex 复数型
与数学中的复数一样。
数字类型的使用
数字类型主要就是用来做数学运算与比较运算,因此数字类型除了与运算符结合使用之外,并无需要掌握的内置方法
# 1 int可以将由纯整数构成的字符串直接转换成整型,若包含其他任意非整数符号,则会报错
s = '123'
res = int(s)
print(res,type(res))
# 输出结果:(123, <class 'int'>)
print(int('11.3')) # 错误演示:字符串内包含了非整数符号.
'''
Traceback (most recent call last):
File "D:\pycharm_text\demo.py", line 1, in <module>
print(int('11.3'))
ValueError: invalid literal for int() with base 10: '11.3'
'''
# 2 float()可以将数字的字符串转换为浮点型,可以包含‘.’、‘e',包含其他字符也会报错。
print(float('11e2')) # 1100.0
二、索引
字符串是字符的有序集合,可以通过其位置(下标)来获得具体的元素。在 python 中,字符串中的字符是通过索引来提取的,索引从 0 开始。
1、按索引取值(正向取,反向取):
s = 'hello world'
# 1、 正向取(从左往右)
print(s1[6]) # 结果:w
# 2、 反向取(负号表示从右往左)
print(s1[-1]) # 结果:d
# 3、 对于str来说,只能按照索引取值,不能更改里面的字符
print(s1[0] = 'H') # 报错TypeError
2、切片
s1 = 'hello world'
# 1、 顾头不顾尾:取出索引为0到8的所有字符
print(s1[0:9]) # 结果:hello wor
# 2、 步长:0:9:2,第三个参数2代表步长,会从0开始,每次累加一个2即可,所以会取出索引0、2、4、6、8的字符
print(s1[0:9:2]) # 结果:hlowr
# 3、 反向切片
print(s1[::-1]) # -1表示从右往左依次取值 就是拷贝了一份字符串
# 结果:dlrow olleh
# 4、只取最后一个字符
print([-1])
三、str() 字符串
1、作用
用来记录人的名字、性别等描述性质的状态
2、定义
# 用单引号、双引号、多引号,都可以定义字符串,本质上是没有区别的
name = 'sunoeast'
sex = "男"
# 需要考虑引号嵌套的配对问题
msg = "My name is sunoeast, I'm 18 years old!" #内层有单引号,外层就需要用双引号
数据类型转换:str()可以将任意数据类型转换成字符串类型
type(str([1,2,3])) # list--->str
<class 'str'>
type(str((1,2,3))) # tuple--->str
<class 'str'>
type(str({"name":"sunoeast","age":18})) # dict--->str
<class 'str'>
type(str({1,2,3,4})) # set--->str
<class 'str'>
3、字符串中运算符的使用
1、数字可以进行加减乘除等运算,字符串也可以,但只能进行"相加"和"相乘"运算。
name = 'sunoeast'
age = '18'
print(name + age) # 相加其实就是简单的字符串拼接
print(name * 5) # 相乘就相当于将字符串相加了5次
2、获取长度len()
获取字符串的长度,即字符的个数,但凡存在于引号内的都算作字符(比如:空格)
s1 = 'hello world'
print(len(s1)) # 长度为11
3、成员运算in 、not in
# 判断hel 是否在 str1里面
s1 = 'hello world'
print('hel' in s1) # True
print('ho' not in s1) # True
补充:循环的使用
s1 = '12345'
for i in s1: # 依次取出字符串中的每一个字符
print(i)
4、字符串中的方法
下面的这些方法都是创建了新的字符串,并没有修改原字符串中的任何内容,因为字符串是不可变的。
1、移除指定字符:strip()
移除两边的指定字符,中间的字符无法移除
s1 = '###hello#world###'
s1.strip('#') # 移除左右两边的指定字符,中间的字符无法移除
s1.rstrip('#') # 移除右边的指定字符
s1.lstrip('#') # 移除左边的指定字符
2、分割字符串:split()
输出结果放在列表中
# split会按照**从左到右**的顺序对字符串进行切分,可以指定分割次数
s1 = 'D:/a/b/c/d.txt'
print(s1.split('/',1)) # 输出结果放在列表中
# 输出结果:['D:', 'a/b/c/d.txt']
# rsplit刚好与split相反,从 右往左 分割,可以指定切割次数
print(s1.rsplit('/',1))
# 输出结果:['D:/a/b/c', 'd.txt']
# 二者的区别就在于指定分割次数时,只要不是所有次数就能很直观看出
3、连接字符串:join()
从可迭代对象中取出多个字符串,然后按照指定的分隔符进行拼接,拼接的结果为字符串
'%'.join('hello') # 从字符串'hello'中取出多个字符串,然后按照%作为分隔符号进行拼接
# 输出结果:'h%e%l%l%o'
'|'.join(['sunoeast','18','sleep']) # 从列表中取出多个字符串,然后按照’|‘作为分隔符号进行拼接。
# 输出结果:'sunoeast|18|sleep'
4、替换字符串:replace()
这里要注意是产生了一个新的字符串而不是改变了原字符串
# 用新的字符替换字符串中旧的字符
s1 = 'my name is 小明, my age is 18' # 将小明的年龄由18岁改成20岁
s1 = s1.replace('18', '20') # 语法:replace('旧内容', '新内容')
# 这里只是将字符串s1重新赋值,可以将s1换位s2验证
# 可以指定修改的个数
s1 = 'my name is 小明, my age is 18'
s2 = s1.replace('my', 'My',1) # 只把一个my改为My
print(s1) # my name is 小明, my age is 18
print(s2) # My name is 小明, my age is 18
5、切换字母大小写:upper(),lower()
通常应用于用户登录验证码
s1 = 'My nAme is SunoEast'
print(s1.upper()) # 将英文字符串全部变大写
# MY NAME IS SUNOEAST
print(s1.lower()) # 将英文字符串全部变小写
# my name is sunoeast
# captalize,swapcase,title
# captalize:首字母大写
>>> message = 'hello world'
>>> message.capitalize()
Hello world
# swapcase:大小写翻转
>>> message = 'Hello World'
>>> message.swapcase()
hELLO wORLD
# title:每个单词的首字母大写
>>> msg = 'hello world'
>>> msg.title()
Hello World
6、判断字符串开头和结尾:startswith()、endswith()
s1 = 'hello world'
# startswith()判断字符串是否以括号内指定的字符开头,结果为布尔值True或False
print(s1.startswith('he'))
# True
print(s1.startswith('j'))
# False
# endswith()判断字符串是否以括号内指定的字符结尾,结果为布尔值True或False
print(s1.endswith('d'))
# True
print(s1.endswith('tony'))
# False
7、判断字符串是否是纯数字:isdigit()
判断字符串是否是纯数字组成,返回结果为True或False
s1 = '5201314'
s1.isdigit()
# True
s1 = '123g123'
s1.isdigit()
# False
# is数字系列
# 通常应用于银行系统,在python3中
num1 = b'4' # bytes
num2 = u'4' # unicode,python3中无需加u就是unicode
num3 = '四' # 中文数字
num4 = 'Ⅳ' # 罗马数字
#isdigt:bytes,unicode
>>> num1.isdigit()
True
>>> num2.isdigit()
True
>>> num3.isdigit()
False
>>> num4.isdigit()
False
#isdecimal:uncicode(bytes类型无isdecimal方法)
>>> num2.isdecimal()
True
>>> num3.isdecimal()
False
>>> num4.isdecimal()
False
#isnumberic:unicode,中文数字,罗马数字(bytes类型无isnumberic方法)
>>> num2.isnumeric()
True
>>> num3.isnumeric()
True
>>> num4.isnumeric()
True
# 三者不能判断浮点数
>>> num5 = '4.3'
>>> num5.isdigit()
False
>>> num5.isdecimal()
False
>>> num5.isnumeric()
False
'''
总结:
最常用的是isdigit,可以判断bytes和unicode类型,这也是最常见的数字应用场景
如果要判断中文数字或罗马数字,则需要用到isnumeric。
'''
8、查找字符串: find()、index()、count()
推荐使用find() 因为它不会报错
# 1、find(),rfind()
'''
find:从指定范围内查找子字符串的起始索引,找得到则返回字符第一次出现的 索引,
找不到则返回-1
'''
s1 = 'hello world'
print(s1.find('o', 1, 7)) # 在切片为1到7(顾头不顾尾)的字符中查找字符o的索引
# 结果:4
print(s1.rfind('o')) # 结果:7
# 2、index(),rindex()
# index与find类似,但它找不到时会报错
# print(s1.index('e', 2, 4)) # 报错ValueError
# 5、count():统计字符在字符串中出现的次数
# 统计字符串o出现的次数
print(s1.count('o')) # 结果:2
# 字符串o在索引1~5范围内出现的次数
print(s1.count('o', 1, 6)) # 结果:1
补充
1.center,ljust,rjust,zfill
>>> name='sunoeast'
>>> name.center(30,'-') # 总宽度为30,字符串居中显示,不够用-填充
-----------sunoeast-----------
>>> name.ljust(30,'*') # 总宽度为30,字符串左对齐显示,不够用*填充
sunoeast**********************
>>> name.rjust(30,'*') # 总宽度为30,字符串右对齐显示,不够用*填充
**********************sunoeast
>>> name.zfill(50) # 总宽度为50,字符串右对齐显示,不够用0填充
000000000000000000000000000000000000000000sunoeast
2.expandtabs
>>> name = 'sunoeast\thello' # \t表示制表符(tab键)
>>> name
sunoeast hello
>>> name.expandtabs(1) # 修改\t制表符代表的空格数
sunoeast hello
3.is其他
>>> name = 'sunoeast123'
>>> name.isalnum() #字符串中既可以包含数字也可以包含字母
True
>>> name.isalpha() #字符串中只包含字母
False
>>> name.isidentifier() # 检查字符串是否是有效标识符
True
>>> name.islower() # 字符串是否是纯小写
True
>>> name.isupper() # 字符串是否是纯大写
False
>>> name.isspace() # 字符串是否全是空格
False
>>> name.istitle() # 字符串中的单词首字母是否都是大写
False