一.计算机在存数据的时候,都是以二进制的形式存在计算机中的(存一个数的补码)
1.原码:数据的二进制形式
正数的原码:最高位为符号位,正数的符号位为0,后面的是数值大小
负数的原码:最高位为符号位,正数的符号位为1,后面的是数值大小
例:
10->1010->原码-0b 0 0001010
-10->1010->原码-0b 1 0001010
2.反码:
正数的反码:反码和原码一样
负数的反码:符号位不变,后面的每一位的值取反(0->1,1->0)
例:
10->0 0001010
-10->1 1110101
3.补码:
正数的补码:补码和反码、原码一样
负数的补码:符号位不变,反码加1
-10->1 1110110
4.加法器
原码:2+-3 -->10000101
补码:2+-3 -->00000010+11111101=11111111-->反码:11111110:原码10000001-->(-1)
-3:10000011:11111100:11111101
二、字符串
1.什么是字符串
a.在python中用单引号或者双引号括起来的字符集就是字符串
b.字符串中的每个独立的单元我们叫做字符,例如:字符串'abc123'中的'a','b','c','1','2','3'就是字符
2.转义字符
注意:python中没有字符类型,如果要表示字符就是用一个长度是1的字符串表示
长度:指的就是字符串中字符的个数,例如:"abc"-长度是3
通过\将一些特殊的字符转换成一个具有特殊功能或者特殊意义的字符,就是转义字符
常见的转义字符
\n 换行
\t 制表符(相当于tab键)
\\ 出现一个斜杠
\' 出现’
\" 出现”
在计算字符串长度的时候,字符串的长度是1
3.Unicode编码
python中字符的编码采用Unicode编码
将字符转换成指定的数值,这个过程就是编码。(编码的目的是方便计算机存储)
将数值转换成对应的符号的过程就是反编码(解码)
unicode是采用两个字节对一个字符进行编码,Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。目前的Unicode字符分为17组编排,0x0000 至 0x10FFFF,每组称为平面(Plane),而每平面拥有65536个码位,共1114112个。然而目前只用了少数平面。UTF-8、UTF-16、UTF-32都是将数字转换到程序数据的编码方案。
a).将Unicode码转换成字符:chr(码)
print(char(0x4E00))
print(char(0x4E01))
b).将字符转换成Unicode编码:ord(字符)
print(hex(ord("你")))
三、获取字符串
字符串实质可以是一个不可变的序列,序列内容是字符,一旦字符串确定,那么里面的字符和字符的位置就不可变了,例如:"abc"
1.怎么获取单个字符
python中的字符串,可以通过下标(索引)来获取指定位置上的位置:字符串[索引]
说明:
a.字符串:可以是字符串值,也可以是字符串变量
b.[]:中括号是固定语法
c.索引:
从0开始到字符串长度减1
str1='abcd'
print(str1[0])
从-1从到负的长度(-1对应的是最后一个字符,-2对应的是倒数第二个字符)
注意:索引不能越界,否则会报错(产生异常)
2.获取部分字符(获取子串)--切片
字符串[下标1:下标2]:从下标1开始获取,获取到下标2前的所有的字符:左包右不包
str2="hello world"
print(str2[0:4])
注意:下标1对应的位置一定要在下标2对应的位置的前面
切片时下标可以越界,越界的时候就取临界值
下标1的值<下标2的值
切片方法2:
字符串[下标1:下标2:步进]
例子:
str="123456789"
print(str[0:10:2])
13579
说明:从下标1开始获取,每次下标值增加步进值,每增加一次取一个字符,直到取到下标2前为止
print(str[-1:1:-2])
9753
注意:
a.步进如果是正数,那么下标1对应的字符的位置一定要在下标2对应的位置的前面
步进是负数,那么下标1对应的位置一定要在下标2对应的位置的后面
b.下标2对应的字符是取不到的
下标的省略:
切片的时候,下标1和下标2是可以省略的
例:
print(str2[-2:-1])
如果下标1不写,默认从开头(可能是字符串的第一个字符也可能是最后一个字符,主要是看步进的值)开始获取,如果下标2不写默认到字符串结尾(可能是字符串的第一个字符,也可能是字符串的最后一个字符,主要看步进)
print(str[:]) #123456789
print(str[::-1]) #987654321
print(str[-1::-1]) #987654321
print(str[:5:1]) #12345
print(str[:5:-1]) #987
print(str[:4]) #1234
print(str[2:]) #3456789
如果下标1和下标2都不写,则相当于复制一个新的字符串,如果步进为-1,则相当于是反转复制字符串
练习:要求将一个字符串中的所有奇数位上的字符获取出来
print(str[1::2]) #2468
四、字符串的相关运算
1.+ 运算符
python支持两个字符串相加,其效果就是将两个字符串拼接在一起产生一个新的字符串
print('abc'+'123') #abc123
注意:如果+的一边是字符串,那么另一边也必须是字符串
2.* 运算符
格式:
字符串 * 整数:字符串重复多次
print('abc' * 3) #abcabcabc
3.支持所有的比较运算符
print("abc"=="abc") #True
print("abc">"abd") #False
print("abc"<"abd") #True
print("abcd'>"abcde") #False
一个字符一个字符相比,比较到不一样为止。比较的是每一位的字符的Unicode值
print('一'<'丁') #True
4.in 和not in
str1 in str2:判断str1是否在str2中(str2是否包含str1/str1是否是str2的子串),结果是bool值
5.获取字符串的长度
字符串的长度指的是字符串中字符的个数
内置函数len()
len("12344") #5
len("12345\n") #6
空串:长度为0
a=''
b=""
6.阻止转义
在字符串的最前面添加r或者R可以阻止转义
print(r'a\nb') #a\nb
print(R'a\nb') #a\nb
print(len(r'a\nb\\')) #6
练习:
str1 = r'\nabc123' 求str1[3] #b
str2 = 'abc123\\123' 求str2[-5] #3
五、字符串相关的方法
python为字符串提供了很多的内建函数
字符串.函数()
注意:这些所有函数的功能都不会影响原来的字符串,而是产生一个新的字符串
1.capitalize()
#将字符串的第一个字符转换为大写
str = 'hello python'
newstr = str1.capitalize()
print(newstr) #Hello python
2.center(width,fillchar)
#返回一个指定width居中的字符串,fillchar是填充字符,默认是空格
print("abc".center(40,'&'))
#&&&&&&&&&&&&&&&&&&abc&&&&&&&&&&&&&&&&&&&
#说明;让字符串变成width对应的长度,原内容居中,剩余的部分使用fillchar的值来填充
3.rjust(width,fillchar)
#让字符串变成width对应的长度,原内容靠右,剩余的部分使用fillchar的值来填充
print("abc".rjust(20,">")) #>>>>>>>>>>>>>>>>>abc
print("1".rjust(3,'0')) #001
4.count(str)
#判断str值在原字符串中出现的次数
print('abcaaa'.count('a')) #4
5.join()
str1.join(str2):在str2中的每个字符之间插入一个str1
print('+'.join("abc")) #a+b+c
6.replace()
str1.replace(old,new):将str1中的old全部替换成new
print("abcda".replace('a','$')) #$bcd$
7.endswith(suffix, beg=0, end=len(string))
检查字符串串是否以 obj 结束,如果beg 或者 end 指定则检查指 定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False.
其中suffix表示要检查的结尾字符串,beg和end如果默认不写则是比较全部字符串。如果beg和end不为0,那么end必须大于beg。
print("hello world".endswith('ld'))
print("hello world".endswith('l'))
print("hello world".endswith('l',7,10))
'''
结果:
True
False
True
'''
8.expandtabs(tabsize=8)
把字符串中的tab转换成空格,tab符号默认空格是8个
str1=' 123 '
print(str1.expandtabs(tabsize=8))
9.find(str, beg=0 end=len(string))
检测 str 是否包含在字符串串中,如果指定范围 beg 和 end ,则 检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1
print("hello world".find('l'))
print("hello world".find('a'))
'''
结果:
2
-1
'''
注意:如果字符串有多个要寻找的字符串,那么返回要寻找的字符串第一次出现的值
10.index(str, beg=0, end=len(string))
和find()方法一样,只不过如果str不在字符串中会报⼀个异常.
print('hello world'.index('a'))
print('hello world'.index('l'))
11.isalnum()
如果字符串里面至少有一个字符,并且所有的字符都是unicode编码但不包括ascii里面除字符和数值的字符则返回True,否则返回False
print('aᥤ'.isalnum())
'''
结果:True
'''
print('!~a'.isalnum())
'''
结果:False
'''
12.isalpha()
如果字符串里面至少有一个字符,并且所有字符都是unicode编码,但是不是ascii码里面非字母的部分则为True,否则为False
print('h中ᥤ'.isalpha())
'''
结果:True
'''
print('3!w'.isalpha())
'''
结果:False
'''
13.isdigit()
如果字符串只包含数字则返回 True 否则返回 False..
print('1一'.isdigit())
'''
结果:False
'''
print('1'.isdigit())
'''
结果:True
'''
14.islower()
如果字符串中包含一个区分大小写的字符,并且所有这些 (区分大小写的)字符都是小写,则返回 True,否则返回 False
print('哈哈h'.islower())
'''
结果:True
'''
print('bBd'.islower())
'''
结果:False
'''
15.isnumeric()
如果字符串中只包含数字字符,则返回 True,否则返回 False(单个字符表示数字都行)
print('1一壹'.isnumeric())
'''
结果:True
'''
print('h1'.isnumeric())
'''
结果:False
'''
16.isspace()
如果字符串中只包含空白,则返回 True,否则返回 False.
print(' '.isspace())
'''
结果:True
'''
print(' s'.isspace())
'''
结果:False
'''
17.istitle()
如果字符串是标题化的(见 title())则返回 True,否则返回 False
print('Hello World'.istitle())
'''
结果:True
'''
print('Hello world'.istitle())
print('你好'.istitle())
'''
结果:False
'''
注意:完全标题化是所有单词首字母大写
18.isupper()
如果字符串中包含至少⼀一个区分大小写的字符,并且所有这些 (区分⼤大小写的)字符都是大写,则返回 True,否则返回 False
print('hH'.isupper())
'''
结果:False
'''
print('不H'.isupper())
'''
结果:True
'''
19.len(string)
返回字符串的长度
print(len('s1\\'))
'''
结果:3
'''
20.lower()
转换字符串中所有大写字符为小写.
print('HaH'.lower())
'''
结果:hah
'''
21.lstrip()
截掉字符串左边的空格或指定字符
print(' hello world ')
22.maketrans()
创建字符映射的转换表,对于接受两个参数的简单的调用方 式,第一个参数是字符串,表示需要转换的字符,第二个参数 也是字符串表示转换的⽬目标
dic={'e':'w'}
print('hello'.maketrans(dic))
23.max()
返回字符串 str 中最大的字母。
print(max('max中'))
'''
结果:中
'''
24.min()
返回字符串 str 中小的字母,中文也行
print(min('max中'))
'''
结果:a
'''
25.rfind(str, beg=0,end=len(string))
类似于 find()函数,不过是从右边开始查找.
print('hello world'.rfind('d'))
'''
结果:10
'''
26.rindex( str, beg=0, end=len(string))
类似于 index(),不过是从右边开始.
print('hello world'.rindex('w'))
'''
结果:7
'''
27.rstrip()
删除字符串字符串末尾的空格
print('hello '.rstrip())
28.split(str="", num=string.count(str))
num=string.count(str)) 以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num 个子字符
lst='a+b+c+d'.split('+',2)
print(lst)
'''
结果:['a', 'b', 'c+d']
'''
29. startswith(str, beg=0,end=len(string))
检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查。
print('abc'.startswith('a')) #True
print('abc'.startswith('b')) #False
30.strip([chars])
在字符串上执行 lstrip()和 rstrip()
print(' abc '.strip())
31.swapcase()
将字符串中大写转换为小写,小写转换为大写
print('abcABC'.swapcase()) #ABCabc
32.upper()
转换字符串中的小写字母为大写
print('abc'.upper()) #ABC
33.zfill(width)
返回长度为 width 的字符串,原字符串右对齐,前面填充0
print('abc'.zfill(20)) #00000000000000000abc
34.isdecimal()
检查字符串是否只包含十进制字符,如果是返回 true,否则返 回 false。
print("10".isdecimal()) #True
print('10x'.isdecmal()) #False
35.translate(table, deletechars="")
根据 str 给出的表(包含 256 个字符)转换 string 的字符, 要过滤掉的字符放到 deletechars 参数中
36.splitlines([keepends])
按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表, 如果参数 keepends 为 False,不包含换行符,如果为 True,则 保留留换行符。