python之详解字符串

前置疑问:

Q1::链式赋值内存是怎么样的?
Q2:解包赋值有何用处?
Q3:python中有常量吗?如何表示常量?
Q4:python内置的数据类型有哪些?每种类型之间的操作有哪些?
Q5:字符串怎么创建?
Q6:字符串有哪些操作?
Q7:什么是字符串的驻留机制?


学习内容:

1、赋值的方法。
2、内置数据类型和转换。
3、字符串类型的表示和操作。


学习产出:

A1:x=y=123地址表示如图
A2:
可以用来进行交换

a, b, c = 1, 2, 3 # a = 1, b = 2, c = 3
a, b = b, a #a = 2, b= 1

A3:
1、python中没有常量。
2、可以人为约定的表示常量,全部用大写表示,多个单词之间用下划线链接:MAX_NUMBER = 100;表示常量最大值为100。

A4:

1、整型:

1.1 什么是整型?
  • 整数,比如:123,456
1.2 进制表示:
#二进制 0b或者0B 0~1 逢二进一 
>>> x = 0b111 #x = 7 2^2+2^1+2^0=7
>>> x
7
>>> 
#八进制 0o或者0O 0~7 逢八进一
>>> x = 0o77 #7* 8^1 + 7*8^0 = 63
>>> x
63
>>> 
#十六进制 0X或者0x 0~9 A-->10 B-->11 C-->12 D-->13 E-->14 F-->15 
>>> x = 0xff # 15*16^1 + 15*16^0 = 255
>>> x
255
>>> 
1.3 转换int()实现 自动转换
  • 整型表示范围:32位计算机,为 -2^31 ~ 2^31 - 1
  • python中整型表示可以任意大小,取消long类型。
  • 转换时浮点数直接舍去小数部分 int(9.9) 结果为9。
  • 转换格式说明int(“123”),int(“abc”)可以和int(“123abc”)就不行。
  • 自动转换 int + float = float, 比如:2 + 8.8 = 10.8
>>> x = 10000000000000000000000
>>> x
10000000000000000000000
>>> int(9.9)
9
>>> int("123")
123
>>> int("abc")
Traceback (most recent call last):
  File "<pyshell#17>", line 1, in <module>
    int("abc")
ValueError: invalid literal for int() with base 10: 'abc'
>>> int("123abc")
Traceback (most recent call last):
  File "<pyshell#20>", line 1, in <module>
    int("123abc")
ValueError: invalid literal for int() with base 10: '123abc'
>>> 2 + 8.8
10.8
1.4 python整数缓存机制

在命令行中对小的范围整数进行缓存[-5,256],在pycharm或者文件中范围是[-5,∞)。
满足范围的不用另开辟内存存储,在缓存中调用就行;不满足范围的需要另开辟内存,即使两个变量值一样,但地址也不一样。
IDLE和pycharm分别进行测试
IDEL中进行测试
pycharm中进行测试

1.5、数字和基本运算符
运算符解释举例结果
+加法5 + 611
-减法56 - 1937
*乘法7 * 856
/浮点数除法7 / 23.5
//整除除法7 / 23
%摸运算(取余)7 % 31
**幂运算2 ** 38
>>> 5 + 6
11
>>> 56 - 19
37
>>> 7 * 8
56
>>> 7 / 2
3.5
>>> 7 // 2
3
>>> 7 % 3
1
>>> 2 ** 3
8
>>> 

2、浮点型

2.1什么是浮点型

小数,称为浮点数。比如3.14、5.56

2.2类型转换 float()

比如float(999):结果为999.0

>>> x = 999
>>> float(x)
999.0
>>> float("123")
123.0
>>> float("123abc")
Traceback (most recent call last):
  File "<pyshell#29>", line 1, in <module>
    float("123abc")
ValueError: could not convert string to float: '123abc'
>>> float("abc")
Traceback (most recent call last):
  File "<pyshell#30>", line 1, in <module>
    float("abc")
ValueError: could not convert string to float: 'abc'
2.3 四舍五入

round(value),比如round(999.9) 结果为1000

>>> round(999.9)
1000
>>> round(999.4)
999

3、布尔型

3.1 比较运算符
运算符解释举例
==比较对象的值是否相等(1 == 2)False
!=比较对象的值是否不等于1 != 2 True
>返回a是否大于b1 > 2 False
<返回a是否小于b1 < 2 True
>=返回a是否大于等于 b4 <= 4 True
<=返回a是否小于等于b3 >= 4 False

常用在判断语句和循环语句中

>>> 1 == 2
False
>>> 1!=2
True
>>> 1 > 2
False
>>> 1 < 2
True
>>> 4 <= 4
True
>>> 3 >= 4
False
3.2 逻辑运算符
运算符格式说明
or 逻辑或x or yx为True ,则不用计算y,返回True;x为False,返回y值
and 逻辑与x and yx 为False ,返回False;x为True,返回y值
not 逻辑非not xx为True,返回False;x为False,返回True
>>> x = True
>>> y = False
>>> x or 100
True
>>> y or 100
100
>>> x and 100
100
>>> y and 100
False
>>> not x
False
>>> not y
True
3.3 同一运算符
运算符说明
is判断两个标识符是否引用同一个对象,比较的是地址
is not判断两个标识符是不是引用不同对象,比较的是地址
>>> a = 100
>>> b = 100
>>> a is b
True
>>> a = 10000
>>> b = 10000
>>> a is b
False
3.4 is 与 == 的区别
运算符说明举例
is比较的是地址a = 1000, b = 1000, a is b 返回False
==比较的是值a = 1000, b = 1000 , a == b 返回True
>>> a = 1000
>>> b = 1000
>>> a is b
False
>>> a == b
True
>>> 

4、字符串型

A5:

4.1 创建字符串的三种方式

单引号’’ 比如a = ‘abc’
双引号" " 比如a = “I’m a student!”
三引号创建多行字符串 比如 a = ‘’’ ‘‘she’’ ‘‘is’’ “good”

>>> a = 'abc'
>>> a
'abc'
>>> a = "abc"
>>> a
'abc'
>>> a = """ "she" "is" "good" """
>>> a
' "she" "is" "good" '
>>> b = """ name = "xiaoming" number = "123456" sex = "man" """
>>> b
' name = "xiaoming" number = "123456" sex = "man" '

len()可以返回字符串长度

>>> b = """ name = "xiaoming" number = "123456" sex = "man" """
>>> b
' name = "xiaoming" number = "123456" sex = "man" '
>>> len(b)
49

A6:

4.2 常见操作
  • 转义字符
转义字符解释
\(出现在行尾)反斜杠符号
\反斜杠符号
单引号
‘’双引号
\n换行
\r回车
\t制表符
>>> a = "aaa\\bbb\ccc"
>>> a
'aaa\\bbb\\ccc'
>>> b = "aaaa\
bbbbb"
>>> b
'aaaabbbbb'
>>> c = "a\nb\nc"
>>> c
'a\nb\nc'
>>> print(c)
a
b
c
  • str()转换成字符串
>>> str(123)
'123'
>>> str(1.23)
'1.23'
>>> str("abc")
'abc'
  • +拼接字符串 *复制字符串
>>> "abc" + "efg"
'abcefg'
>>> "abc" "efg"
'abcefg'
>>> "abc" * 3
'abcabcabc'
  • []提取字符串
    正向下标:0 1 2 3 4 5 6 7 ···
    反向下标:-n -n-1 ··· -5 -4 -3 -2 -1
>>> a = "123abcdefghijklmn"
>>> a[0]
'1'
>>> a[-1]
'n'
>>> a[1+1]
'3'
  • 替换字符串中字符 replace()
>>> a.replace('123','666') #会生成新的一个对象,开辟一个新的地址,原值保持不变
'666abcdefghijklmn'
  • 字符串切片slice操作
    格式[start开始位置: end结束位置: step步长]
    常见格式:
    [:]切取全部
    [start:]设定起始 默认结束位置
    [:end]默认起始位置,设定结束位置
    [::-1]反转
>>> a
'123abcdefghijklmn'
>>> a[:]
'123abcdefghijklmn'
>>> a[4:] 
'bcdefghijklmn'
>>> a[:4]
'123a'
>>> a[:-5]
'123abcdefghi'
>>> a[::-1]
'nmlkjihgfedcba321'
  • split()与join()
    split()指定分隔符切割字符串成多个子字符串(默认为空格)存储到列表中。
>>> a = "a b c d e f g h d i j k l m d n o p q "
>>> a.split()
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'd', 'i', 'j', 'k', 'l', 'm', 'd', 'n', 'o', 'p', 'q']
>>> a.split('d')
['a b c ', ' e f g h ', ' i j k l m ', ' n o p q ']

join()与split相反,将一系列子字符串连起来。

>>> b = ['a b c', 'd e f g', 'h i j k']
>>> b
['a b c', 'd e f g', 'h i j k']
>>> "*".join(b)           #以*号连接
'a b c*d e f g*h i j k'
>>> " ".join(b)          #以空格连接
'a b c d e f g h i j k'

join 与 + 区别

方法区别
join()将子字符串从列表中拼接,会计算好长度多少,只创建一次对象,效率高。
+每次连接会生成新的对象,比如连接1000个字符,需要创建1000个字符串对象,效率低。
a = ""
for i in range(1000000):
    a += "test"
time02 = time.time()

print("拼接时间为:"+str((time02 - time01)))

time03 = time.time()
a = []
for i in range(1000000):
    a.append("test")
a = " ".join(a)
time04 = time.time()

print("拼接时间为:"+str(time04 - time03))

拼接时间为:0.742779016494751
拼接时间为:0.14162111282348633

明显可以看出join的速度比+快

A7:

  • 字符串驻留机制

在python中满足正确格式(字母、数字、下划线组成)的字符串,不用另外开辟内存存储,而不满足的需要另开启内存存储。

>>> str1 = "abc_333"
>>> str2 = "abc_333"
>>> str1 is str2
True
>>> str3 = "#abc#"
>>> str4 = "#abc#"
>>> str3 is str4
False
>>> str3 == str4
True
  • 查找操作
方法解释结果
str.startswith(“xxx”)是否指定xxx开头返回True/False
str.endswith(“xxx”)是否指定xxx结尾返回True/False
str.find(“x”)查找字符x第一次出现的位置返回下标
str.rfind(“x”)查找字符x最后一次出现的位置返回下标
str.count(“x”)统计字符x出现多少次返回数值
str.isalnum()所有字符全是字母或数字返回True/False
str.capitalize()产生第一字符为大写的新字符串Abcde
str.title()产生每个单词首字母大写的新字符串I Love You
str.upper()产生字母全部大写的新字符串I LOVE YOU
str.lower()产生字母全部小写的新字符串i love you
str.swapcase()产生大小写字母转换的新字符串i lOVER yOUR
>>> str = "Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆 于1990 年代初设计,作为一门叫做ABC语言的替代品"
>>> str
'Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆 于1990 年代初设计,作为一门叫做ABC语言的替代品'
>>> str.startswith("Python")
True
>>> str.endswith("替代品")
True
>>> str.find("的")
21
>>> str.rfind("的")
53
>>> str.count("的")
2
>>> str.isalnum()
False

>>> str1 = "I Love you"
>>> str1.swapcase()
'i lOVE YOU'

>>> str2 = "i love you"
>>> str2.capitalize()
'I love you'

>>> str2.title()
'I Love You'

>>> str2.upper()
'I LOVE YOU'

>>> str2.lower()
'i love you'

  • 字符串的格式化
    str.format(),通过该函数进行格式化
>>> a = "name is:{0}, age is:{1}, sex is:{2}"
>>> a.format("xiaoming",18,"man")
'name is:xiaoming, age is:18, sex is:man'
>>> b = "name is:{name}, age is:{age}, sex is:{sex}"
>>> b.format(name="xiaohong",age=18,sex="woman")
'name is:xiaohong, age is:18, sex is:woman'

  • 填充和对齐
    ^居中、<左对齐、>右对齐
    常见格式“{:xyz}”.format(“xxx”);x:什么字符填充,y:什么方式对齐,z:共多长
>>> "{:*>20}".format("python")
'**************python'

>>> "{:*<20}".format("python")
'python**************'

>>> "{:*^20}".format("python")
'*******python*******'
  • 数字格式化
    对象是浮点数用f,对象是整数用d
>>> "{:.2f}".format(3.1415) #保留两位小数
'3.14'

>>> "{:0>2d}".format(3) #左边填充0,长度共为2
'03'

>>> "{:*^8}".format(56) #左右填充*,长度共为8
'***56***'

今日代码:

#练习一

x = 10
a = 5
b = 1
y = 2
z = (5 + 10*x) / 5 - (13*(y - 1)*(a+b)) / x + 9*(5/x + (12 + x) / y)
print(z)


#练习二
mon_sal = int(input("请输入月薪:"))
sal = 12 * mon_sal
print("{:d}".format(sal))

#练习三

str = ""
for i in range(9):
    str += "爱你一百遍"
print(str)

str1 = []
for i in range(9):
    str1.append("爱你一百遍")
str1 = "".join(str1)
print(str1)

#练习四

str3 = "to be or not to be"
print(str3[::-1])

#练习五
str4 = "pythonpythonpythonpythonpython"
print(str4[::6])

116.7
请输入月薪:15000
180000
爱你一百遍爱你一百遍爱你一百遍爱你一百遍爱你一百遍爱你一百遍爱你一百遍爱你一百遍爱你一百遍
爱你一百遍爱你一百遍爱你一百遍爱你一百遍爱你一百遍爱你一百遍爱你一百遍爱你一百遍爱你一百遍
eb ot ton ro eb ot
ppppp
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值