美文网首页1~10
04 字符串相关运算以及类型转换

04 字符串相关运算以及类型转换

作者: 贺夕 | 来源:发表于2019-01-02 19:45 被阅读0次

======获取字符======

1. 获取单个字符

字符串中的每一个字符都会对应一个唯一的下标(索引), 用来表示字符在字符串中的位置.

下标是从 0 开始依次增加, 0 对应的是第一个字符(0 ~ 字符串长度 -1)

可以是从 -1 开始依次减小, -1 代表最后一个字符(-1 ~ -字符串长度)

例如: "hello"  -> h
    '\tpytho\u4e00n'  # p 在(左1, 右-7)

a. 语法:

字符串[下标] —— 获取字符串中指定下标对应的字符

b. 说明:

字符串 —— 只要结果是字符串的表达式都可以, 例如: 字符串字面量, 字符串变量
[] —— 固定写法
下标 —— 需要获取的字符对应的下表; 注意: 这儿的下表不能越界,必须在范围之内
result = 'how are you!'[0]
        # 12位字符, 获取字符串'hao are you!'中下标是 0 的字符, 并且赋给变量result
print(result)  # h

print('how are you!'[-4])  # y
# print('how are you!'[-13])  # (-12 ~ 11)越界IndexError: string index out of range

str1 = 'good good study! day day up!'
print(str1[10]) # 取 s
print(str1[-1]) # 取 !

2.获取部分字符(字符串切片)

方法一

a. 语法:

字符串[开始下标: 结束下标: 步长] —— 从开始下标开始, 获取到结束下标 前 为止. 每次下标值 加上步长去获取下一个
b. 说明:
字符串 —— 只要结果是字符串的表达式都可以, 例如: 字符串字面量, 字符串变量
[] —— 固定写法
开始下标、结束下标 —— 下标值(这儿的下标可以越界)
步长 —— 必须是整数(正数和负数都行);如果步长是正数,是从开始下标开始 从前往后获取,如果步长是负数,是从开始下标开始 从后往前获取

注意:

当步长为正,要求开始下标对应的字符位置必须在结束下标对应的字符的前面,否则结果是空串!

当步长为负,要求开始下标对应的字符为止必须在结束下标对应的字符的后面,否则结果是空串!

不管怎么取,结束下标一定取不到!

str1 = 'hello python!'
print(str1[0:4:1]) # hell  从前往后取
print(str1[0:4:2]) # hl    从前往后取
print(str1[0:7:3]) # hlp
print(str1[0:-1:2]) # hlopto
print(str1[-1:0:-2]) # !otpil  从后往前取
print(str1[-1:-100:-1]) # !nohtyp olleh 结束下标越界   从后往前取
print(str1[100:-100:-1]) # !nohtyp olleh # 开始下标和结束下标越界
获取一个字符串中所有下标是奇数的字符(顺序)
print(str1[1:100:2])  #el yhn

str2 = "{'name':'小明', 'age': 18}"   # 去掉 {}
print(str2[1:-1:1]) # 'name':'小明', 'age': 18

方法二

字符串[开始下标:结束下标] —— 步长是 1 ; 从开始下标开始到结束下标为止,一个一个的取
print('when i was young!'[2:6])  # en i

方法三:(省略开始下标和结束下标)

a. 省略开始下标 - 字符串[:结束下标:步长] —— 当步长是正数,从字符串的第一个字符开始取到结束下标前为止; 当步长是负数,从字符串的最后一个字符开始取到结束下标前为止。
b. 省略结束下标 - 字符串[开始下标::步长] —— 当步长为正数,从开始下标开始取到字符串最后一个字符为止;当步长为负数,从开始下标开始取到字符串的第一个字符为止。
str3 = 'when i was young!'
print(str3[:6], str3[:6:-1])    # when i !gnuoy saw

print(str3[2:], str3[2::-1])    # en i was young! ehw
print(str3[:])                  # when i was young!
print(str3[::-1])               # !gnuoy saw i nehw   让字符串倒序 ★

======字符串相关运算======

1. 字符串支持的运算符: +, *, >, <, ==, !=, >=, <=

python中的字符串支持数学运算符中的 + 和 * ,以及所有的比较运算符

a. + : 字符串1 + 字符串2 - 将 字符串1和字符串2 拼接在一起产生一个 新的字符串

 new_str = 'abc' + '123'
 print(new_str)   # abc123

注意: 字符串 和 数字 不能混合相加!

b. * : 字符串 * N - N 是正整数;字符串重复N次产生一个新的字符串

new_str = 'abc' * 3
print(new_str)      # abcabcabc

new_str = 'abc' + '123'
print(new_str)  # abc123
name = '张三'
message = '吃饭了吗?'
print(name + message)  # 张三吃饭了吗?
print(name + message + '...')  # 张三吃饭了吗?...
# print('abc' + 123)  # “123”错误 TypeError: must be str, not int

new_str = 'abc' * 3
print(new_str)   # abcabcabc
print(('abc' + '123') * 2)  # abc123abc123
print('abc' + '123' * 2)  # abc123123

c. 比较是否相等

==, != 可以判断两个字符是否相等或者不相等
 print('abc' == 'abc')  # True
 print('abc' != 'abc')  # Flase

d. 比较大小:从第一个字符开始依次往后找,找到第一个不相等的字符,判断它们的编码值的大小,

谁的编码值大,对应的字符串就大,就不再往后继续比较了

print('abdcb' > 'abcde')  # True  d > c 故正确
print('abdcb' > 'zbcde')  # False a < z 故错误
应用:
1. 判断是否是小写字母:'a' <= char <= 'z' <===> char >= 'a' and char <= 'z' 注: 只有python可以是前者的写法
2. 判断是否是大写字母:'A' <= char <= 'Z'
print('abc' == 'abc')  # True
print('abc' != 'abc')  # Flase

print('abdcb' > 'abcde')  # True  d > c 故正确
print('abdcb' > 'zbcde')  # False a < z 故错误
print('abc' < 'abcd')     # True  多一个字符 d
判断一个字符串中第三个字符是否是字母
str1 = 'shk23.ssy23'
char = str1[2]  # 将第3个字符取出
print('是否是字母:', 'a' <= char <= 'z' or 'A' <= char <= 'Z')  # 是否是字母: True
print('是否是中文:', '\u4e00' <= char <= '\u9fa5')  # 是否是中文: False

2. in 和 not in 操作

字符串1 in 字符串2 -> 判断 字符串2 中是否包 含字符串1 (判断 1 是否是 2 的子串)
print('abc' in 'hello abc')     # True    均有'abc'
print('abc' in 'ahello bc')     # False   位置顺序不可变,故错误
字符串1 not in 字符串2 -> 判断 字符串2 中是否包 含字符串1 (判断 1 是否是 2 的子串)
print('abc' not in 'hello abc')     # False   
print('abc' not in 'ahello bc')     # True   


print('abc' in 'hello abc')     # True    均有'abc'
print('abc' in 'ahello bc')     # False   位置顺序不可变,故错误

print('abc' not in 'hello abc')     # False
print('abc' not in 'ahello bc')     # True

print('A' in 'hello Abc')   # True

3. len 函数

len(序列) —— 获取序列长度,获取序列中元素的个数

len(字符串) —— 获取字符串的长度(字符的个数) >>结果是一个整数

print(len('abc'))   # 3  长度为 3 (整数)

注意:

一个可以转移的转义字符的长度是 1 !
一个编码字符的长度是 1 !
一个空格字符的长度是 1 !
手动在键盘上按一个tab,一般是4个空格,长度是4;一个 \t 来表示的 tab,其长度为 1 ,比较方便
print(len('abc'))   # 3

str1 = input('请输入:')
last_char = str1[len(str1) - 1]     # 获取输入中的最后一个字符
print(last_char)    # 获取输入中的最后一个字符

str1 = '    abc' # 其中abc之前是一个tab键(4个空格)
print(str1)
print(len(str1))    # 7 个字符
str2 = '\tabc'      # \t 是随着tab的变化而变化,方便
print(len(str2))    # 4 个字符

======格式字符串======

1. 什么是格式字符串?

在字符串中通过格式占位符来代替字符串中变化的部分,然后在后面通过数据或变量确定变化(变化的字符串就是格式字符串)

语法:

包含 占位符的字符串 % (值1,值2,值3...)有多少占位符就有多少值

说明:

占位符 —— %s (字符串)
%d (整数)
%f (小数) > %.Nf 保留小数点后N位小数
%c (字符) > 可以将数字转换成字符
% —— 固定写法
() —— 固定写法,字符串中只有一个占位符的时候,这个括号()可以省略
括号中的值 —— 值 和 占位符 要一一对应(个数、类型、位置都要对应)
name = input('姓名:')
age = 18
sex = '男'
# =============加法操作============
# mesage = '我叫XXX, 今年xx岁,性别:X,月薪x万'
# mesage ='我叫' + name',今年' + age + '岁,性别:' + sex
# print(mesage)

# =============格式字符串操作========
message = '我叫%s,今年%d,性别:%s,月薪%.2f万,字符:%c' % (name, age, sex, 1.5, 97)
print(message)  # 我叫小明,今年18,性别:男,月薪1.50万,字符:a

练习:输入一个字符串,用一个变量保存输入的字符串的相关信息:XXX的长度是XX,最后一个字符是X

例如:输入abc -> abc 的长度是3,最后一个字符是 c
input_str = input('请输入一个字符串:')
message = '%s的长度是%d,最后一个字符是%c' % (input_str, len(input_str), input_str[-1])
print(message)  # sadsadd的长度是7,最后一个字符是d

======类型转换======

1. 基本语法

语法:

类型名(数据)—— 将指定数据转换成指定类型

说明:

类型名 —— 任何python支持的,或自定的类型都可以
数据 —— 需要转换的对象(类型名不同,要求可能不一样)

2. 转换实例

int(数据) -> 将其它数据转换成整型
float(数据) -> 将其它数据转换成浮点型
bool(数据) -> 将其它类型转换成布尔
str(数据) -> 将其他数据转换成字符串
age = input('年龄:')
print(type(age), age)
print('是否能进入网吧:', age >= 18) # 需要加 int()
print('是否能进入网吧:', int(age) >= 18)

1. 转换成整型

a = int(12.9)   # 浮点数可以转换成整数,直接保留整数部分
b = int(False)  # 所有布尔可以转换成整数, True -> 1; False -> 0
c = int('-120') # 只有去掉字符串的引号后,本身就是一个整数的字符串才能转换成整数
print(a, b, c)  # 12 0 -120

2. 转换成浮点型

a = float(100)  # 所有整数都可以转换成浮点数,在后面加 .0
b = float(True) # 所有布尔可以转换成浮点数,True -> 1.0;False -> 0.0
c = float('12.9') # 去掉引号后,本身就是一个数字的字符串能转换成浮点型
print(a, b, c)  # 100.0 1.0 12.9

3. 转换成布尔类型

python中所有的数据都可以转换成布尔

所有为 空 为 0 的值都会转换成False,其它都是True

a = bool(100)   # True
b = bool(-0.0)  # False
c = bool('abc') # True
d = bool('')    # False
e = bool([])    # False
f = bool(None)  # False
print(a, b, c, d, e, f)  # True False True False False False

4. 转换成字符串类型

python中所有的数据都可以转换成字符串,而且转换的时候就是单纯的在外面加引号''

a = str(100)
print(a)  # 100
print('abc' + str(100))  # abc100

练习:输入三个数字,求三个数的和

num1 = input('第一个数:')       # 1
num2 = input('第二个数字:')     # 2
num3 = input('第三个数字:')     # 3
print(float(num1) + float(num2) + float(num3))  # 6.0

相关文章

  • 04 字符串相关运算以及类型转换

    ======获取字符====== 1. 获取单个字符 字符串中的每一个字符都会对应一个唯一的下标(索引), 用来表...

  • 前端面试题系列之-原生js篇

    隐式类型转换相关 字符串连接符与算数运算符 字符串连接符+:会把其他数据类型调用String()方法转换成字符串然...

  • 2020-06-12 day 2

    数据类型转换 自动类型转换 强制类型转换 运算符 加减乘除字符串加是追加的方式比较运算符== < > >= <= ...

  • 其他类型转换成字符串类型

    数据类型强制转换 字符串相关数据类型转换

  • js

    数据类型隐式转换。 纯数字字符串和字符串在参与数学运算时,除了加号之外,其他运算都会隐式转换。 其他数据类型参与任...

  • JS初步,类型及转换

    js里运算时会进行判断,自动进行数据类型的转换。也有手动方法进行转换。 类型转换 任意类型转字符串 任意类型转数字...

  • JavaScript散乱(一)

    变量和计算 js中使用typeof能得到哪些类型? 强制类型转换 可能引起强制类型转换的操作 字符串拼接 ==运算...

  • python 内置函数

    类型转换函数 变量相关 数学函数 进制相关函数 字符串相关函数

  • js 各种基础类型的转换(下)隐式转换

    前言 在进行比较运算,或者进行四则运算时,常常会触发JS中的隐式转换机制。 非字符串到字符串的类型转换 加号运算符...

  • JavaScript学习----!和!!的区别

    ! 作用: 逻辑运算 类型转换。将null、undefined和空字符串都转换为false,其余均为true。 !...

网友评论

    本文标题:04 字符串相关运算以及类型转换

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