第六章:基本数据类型(数字、索引、字符串)

目录

一、数字

1、int() 整形

2、float() 浮点型

3、complex 复数型

二、索引

1、按索引取值(正向取,反向取):

2、切片

三、str() 字符串

1、作用

2、定义

3、字符串中运算符的使用

4、字符串中的方法


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值