1.数据存储形式
计算机以二进制的形式存储
(1).原码:数据的二进制形式
10 --> 1010 原码:00001010
-10 --> 原码:10001010
(2).反码
- 正数的反码:反码和原码一样
- 负数的反码:符号位不变,后面每一位取反
10 --> 反码:00001010
-10 --> 反码:11110101
(3).补码
- 正数的补码:补码和原码一样
- 负数的补码:符号位不变,后面每一位取反再加1(反码+1)
2.认识字符串
- 用单引号或者双引号括起来的字符集就是字符串
- 字符串中的每个独立的单元就叫字符
3.转义字符
- 通过 \ 将一些特殊的字符转换成一个具有特殊功能或特殊意义的字符,就是转义字符。
-
常见的转义字符
\n --- 换行
\t --- 制表符(tab)
\' --- '
(1).需要显示转义字符,在前面加 \ 即可。
\\ --- \
计算字符串长度的时候,转义字符的长度是1
/n /t //
(2).如果需要同时转义多个字符,可以在字符串前面加 r 即可。
a = r'abcd\nsde\t'
print(a)
abcd\nsde\t #a
(3).python中字符的编码采用的是Unicode编码
A.Unicode编码包括了ASCII码。
B.Unicode是采用两个字节对一个字符进行编码(2^15),将世界上所有符号进行编码。
- 将字符转换成指定的数值,这个过程就是编码(目的是方便计算机存储)
- 将数值转换成对应的符号的过程及时反编码(解码)
Unicode和字符的转换
1).将Unicode码转换成字符:chr(编码)--
print(chr(0xAC00))
print(chr(0x4e60))
가
习
2)将字符转换成Unicode编码:ord(字符)
code1 = ord('星')
code2 = ord('辰')
print(hex(code1), hex(code2))
0x661f 0x8fb0
4.获取字符
- 字符串实质可以是一个不可变的序列,序列内容是字符。
- 一旦字符串确定,那么里面的字符和字符的位置就不可变了,例如‘abc’
A. 怎么获取单个字符
python中的字符串,可以通过下标(索引)来获取指定位置上的字符:字符串[索引]
说明:
a.字符串:可以是字符串值,也可以是字符串变量
b. []:中括号是固定语法
c.索引:从0开始到字符串长度减1(0对应第一个字符);-1~-长度(-1对应最后一个字符)
注意:索引不能越界,否则越界!(产生异常)
str1 = 'abc' #a->0 , b->1 , c->2
print(str1[2])
c
B.获取部分字符串(获取子串) -- 切片
注意:
步进如果是正数,那么下标1对应的位置必须在下标2的前面;如果步进为负数,那么下标1对应的位置必须在下标2的后面
下标2对应的字符是取不到的
- 字符串[下标1:下标2] :
说明:从下标1开始,获取到下标2前的所有字符
str2 = 'hello world'
print(str2[0:4])
print(str2[-4:-1])
hell
orl
- 字符串[下标1:下标2:步进]
说明:从下标1开始获取,每次下标值增加步进值,每增加一次取一次,直到取到下标2为止。
str2 = 'hello world'
print(str2[0:8:2])
hlow
[Finished in 0.3s]
-
切片的时候,下标1和下标2是可以省略
下标1省略:默认从开始的位置开始获取(可能是第一个字符,也可能是最后一个开始,取决于步进)
下标2省略:从下标1开始获取(同上)
效果如下:
str2 = 'hello world' print(str2[:8:1]) print(str2[:8:-1]) print(str2[1::1]) print(str2[1::-1]) hello wo dl ello world eh [Finished in 0.3s]
- 下标1和下标2都省略
str = 'hello world and python' print(str[::2]) #打印所有奇数位 hlowrdadpto [Finished in 0.3s]
5.字符串运算
1.加法运算
python支持两个字符串相加,效果就是将两个字符串拼接在一起产生一个新的字符串
print('abc'+'123')
abc123
[Finished in 0.3s]
注意:“+”号的两边必须是同一类型
2.乘法运算
格式:字符串*整数
print('abc' * 3)
abcabcabc
[Finished in 0.2s]
3.支持所有的比较运算符
str1 = 'abc'
print('abc' == str1)
print('abcd' > 'ac')
#每一位依次比较其 Unicode码值大小
True
False
[Finished in 0.3s]
4.in 和 not in
'a' in 'abd' : 判断 'a' 是否在 'abd' 中
判断结果为布尔值
5.获取字符串长度
字符串长度 = 字符串个数
使用 len() 内置函数
str3 = 'project'
print(len(str3))
7
补充:空串
str = '' #长度是0
6.阻止转义
在字符串的最前面添加 r/R 可以阻止转义
print(r'a\nb')
a\nb
7.python为字符串提供了很多的內建函数
格式: 字符串.函数()
这些所有函数的功能都不会影响原来的字符串,而是产生一个新的字符串
A.capitalize():将字符串第一个字符转换成大写
str1 = 'hello world'
print(str1.capitalize())
Hello world
[Finished in 0.2s]
B.center(width, fillchar) : 让字符串居中(width 宽度 , fillchar 填充的字符)
print('abc'.center(10,'*'))
***abc****
C.rjust(width , fillchar) : 让字符串局右(width 宽度 , fillchar 填充的字符)
number = '1'
new_id = number.rjust(3,'0')
print(new_id)
001
[Finished in 0.2s]
同理 ljust(width,fillchar)左对齐
D. str.count(sub, start= 0,end=len(string))
统计次数(sub是搜索的子字符串,start和end分别是开始和结束位置)
print('adgfdsaaa' .count('a'))
4
E.str1.join(str2)
在str2中的每个字符串之间插入一个str1
print('+'.join('abc'))
a+b+c
F. str1.replace(old, new,num)
将str1中的old全部替换成new(num表示替换前几个)
new_str = 'abcdfdwdadfswqaqd'.replace('a','+')
print(new_str)
+bcdfdwd+dfswq+qd
6.字符串的格式化
语法:'格式符' %(格式符对应的值)
-
常见格式化字符:
- 格式化字符串 ---> %s
- 格式化数字 ---> %d
- 格式化浮点数 ---> %f
- 格式化字符 ---> %c (一般用于ascii码或者Unicode码)
first_name = '星'
last_name = '辰'
age = 18
newstr = 'hello,%s%s!今年%d岁' %(first_name,last_name,age)
print(newstr)
hello,星辰!今年18岁
[Finished in 0.5s]
%n.mf :m表示显示的最小总宽度,n表示小数点位数
a = 3434.12345
print('%8.4f'%a)
3434.1235
[Finished in 0.6s]
附:
7.数据类型转换
1.数据类型的自动转换
a = 10 #整型
b = 12.5 #浮点型
result = a+ b #浮点型--会自动转换整型为浮点型
2.强制转换
基本语法:类型名(数据)
其他类型 ---> 整型
int(12.5)---> 12
去掉字符串的引号后,字符串的本身就是整数,才能转换成整型
int('123') ---> 123
int ( '123a')
int ('123.5')其他类型 ---> 浮点型
float(True) ---> 1.0
去掉字符串的引号后,字符串的本身就是浮点数,才能转换成浮点型
float('2e3') ---> 2000.0其他类型 ---> 布尔型
所有数据类型的数据都可以转换成布尔
(1).数字中:除了0都是True
bool(100) ---> True
bool(-12.5) ---> True
bool (0) ---> False
(2).字符串中除了空串都是True
bool ('False') ---> True
bool ('') ---> False
bool (None) ---> False其他类型 ---> 字符串
所有数据都可以转换成字符串
str(100) ---> '100'
str(True) ---> 'True'
8.字符串相关方法
python的字符串内建函数
name.split(',')
按照逗号分割(不写默认按照空格分割)
string.capitalize()
把字符串的第一个字符大写
string.center(width)
返回一个原字符串居中,并使用空格填充至长度 width 的新字符串
string.count(str, beg=0, end=len(string))
返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数
string.decode(encoding='UTF-8', errors='strict')
以 encoding 指定的编码格式解码 string,如果出错默认报一个 ValueError 的 异 常 , 除 非 errors 指 定 的 是 'ignore' 或 者'replace'
string.encode(encoding='UTF-8', errors='strict')
以 encoding 指定的编码格式编码 string,如果出错默认报一个ValueError 的异常,除非 errors 指定的是'ignore'或者'replace'
string.endswith(obj, beg=0, end=len(string))
检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False.
string.expandtabs(tabsize=8)
字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8。
string.find(str, beg=0, end=len(string))
检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1
string.format()
格式化字符串
string.index(str, beg=0, end=len(string))
跟find()方法一样,只不过如果str不在 string中会报一个异常.
string.isalnum()
如果 string 至少有一个字符并且所有字符都是字母或数字则返
回 True,否则返回 False
string.isalpha()
如果 string 至少有一个字符并且所有字符都是字母则返回 True,
否则返回 False
string.isdecimal()
如果 string 只包含十进制数字则返回 True 否则返回 False.
string.isdigit()
如果 string 只包含数字则返回 True 否则返回 False.
string.islower()
如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False
string.isnumeric()
如果 string 中只包含数字字符,则返回 True,否则返回 False
string.isspace()
如果 string 中只包含空格,则返回 True,否则返回 False.
string.istitle()
如果 string 是标题化的(见 title())则返回 True,否则返回 False
string.isupper()
如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False
string.join(seq)
以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
string.ljust(width)
返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串
string.lower()
转换 string 中所有大写字符为小写.
string.lstrip()
截掉 string 左边的空格
string.maketrans(intab, outtab)
maketrans() 方法用于创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。
max(str)
返回字符串 str 中最大的字母。
min(str)
返回字符串 str 中最小的字母。
string.partition(str)
有点像 find()和 split()的结合体,从 str 出现的第一个位置起,把 字 符 串 string 分 成 一 个 3 元 素 的 元 组 (string_pre_str,str,string_post_str),如果 string 中不包含str 则 string_pre_str == string.
string.replace(str1, str2, num=string.count(str1))
把 string 中的 str1 替换成 str2,如果 num 指定,则替换不超过 num 次.
string.rfind(str, beg=0,end=len(string) )
类似于 find()函数,不过是从右边开始查找.
string.rindex( str, beg=0,end=len(string))
类似于 index(),不过是从右边开始.
string.rjust(width)
返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串
string.rpartition(str)
类似于 partition()函数,不过是从右边开始查找.
string.rstrip()
删除 string 字符串末尾的空格.
string.split(str="", num=string.count(str))
以 str 为分隔符切片 string,如果 num有指定值,则仅分隔 num 个子字符串
string.splitlines([keepends])
按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。
string.startswith(obj, beg=0,end=len(string))
检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查.
在 string 上执行 lstrip()和 rstrip()
string.swapcase()
翻转 string 中的大小写
string.title()
返回"标题化"的 string,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle())
string.translate(str, del="")
根据 str 给出的表(包含 256 个字符)转换 string 的字符,要过滤掉的字符放到 del 参数中
string.upper()
转换 string 中的小写字母为大写
string.zfill(width)
返回长度为 width 的字符串,原字符串 string 右对齐,前面填充0
string.isdecimal()
isdecimal()方法检查字符串是否只包含十进制字符。这种方法只存在于unicode对象。