1.注释
2.标识符
'''
a.字母、数字、下划线_、python3中可以是中文
b.数字不能开头
c.大小写敏感
'''
3.变量
'''
a.变量干什么的? 存储数据
b.怎么声明变量? 变量名 = 值
c.变量名的要求:标识符,不能是关键字;PEP8(所有的字母都要小写,多个单词之间用下划线隔开),见名知义
d.python中声明变量和给变量赋值的原理
'''
a = 10
a1 = 10; b1 = 100
a2 = b2 = c3 = 10
声明一个变量保存年龄
age = 18
name = '余婷'
student_name = '刘欢'
a = 10
print(id(a))
b = 10
a = 100
print(id(a), id(b))
4.基本数据类型(int,float,bool)
True False
5.运算符
a.数学运算符(+,-,*,/,%, //, **)、b.比较运算符(>,<,==,!=,>=,<=)、c.逻辑运算符(and, or, not)、
赋值运算符(=, +=, -=, =,...,*=) 赋值符号的左边必须是变量,
b.运算顺序(数学 > 比较 > 逻辑 > 赋值),可以通过括号来改变优先级
a = 10
a += 2 # a = a + 2
6.进制
a.基数
b.0b(二) bin(); 0o(八) oct(); 0x(十六) hex()
0b11
0o67
0x1f
(了解)
计算机在存数据的时候,都是以二进制的形式存在计算机中的(存一个数的补码)。
1.原码:数据的二进制形式
'''
正数的原码:符号位的值是0,后面是数值大小
负数的原码:符号位的值是1,后面是去掉符号的数值大小
'''
10 -> 1010 原码: 00001010
-10 -> 原码:10001010
2.反码:
'''
正数的反码:反码和原码一样
负数的反码:符号不变,后面的每一位的值取反(0->1, 1->0)
'''
10 -> 反码:00001010
-10 -> 反码:11110101
3.补码:
'''
正数的补码:补码和原码一样
负数的补码:反码+1
'''
10 -> 补码:00001010
-10 -> 补码:11110110
计算机只有加法器,没有办法做减操作
2+(-3) --> 00000010 + 10000011 = 10000101(-5) - 原码相加的结果
2+ (-3) --> 00000010 + 11111101 = 11111111(补码) = 11111110(反码) = 10000001(-1) - 补码相加的结果
1.什么是字符串
"""
a.用单引号或者双引号括起来的字符集就是字符串
'ahshu123~!*&&^耍数组', "a k987"
b.字符串中的每个独立的单元我们叫字符,
例如:字符串'abc123'中'a','b','c','1','2','3'就是字符
"""
name = '骆昊'
poem = '床前明月光'
2.转义字符
'''
说明:python中没有字符类型,如果要表示字符,就是用一个长度是1的字符串表示,例如:'a','1',
长度:指的就是字符串中字符的个数,例如:'abc' - 长度是3 ,'abc123, 你好'-长度是:10
a.通过\将一些特殊的字符转换成一个具有特殊功能或者特殊意义的字符,就是转义字符。
b.常见的转义字符:
\n --- 换行
\t --- 制表符(相当于tab键)
\ ---
' --- '
" --- "
在计算字符串长度的时候,转义字符的长度是1
'''
poem = '床前明月光,\t疑是地上霜\n'
print(poem)
str1 = 'abc\scd'
print(str1)
str2 = 'abc'123"abc'
print(str2)
str3 = "abc"123"
print(str3)
3.Unicode编码
"""
a.python中字符的编码采用的是Unicode编码
b.Unicode是采用两个字节对一个字符进行编码(2^15),能够将世界上所有的符号进行编码
c.Unicode编码中包含了ascii码
将字符转换成指定的数值,这个过程就是编码。(编码的目的是方便计算机存储)
将数值转换成对应的符号的过程就是反编码(解码)
0 --> 0
'0' --> 48
"""
1).将Unicode码转换成字符: chr(编码)
print(chr(0xA001))
print(chr(0xAC00))
print(chr(0x4e60))
2).将字符转换成Unicode编码: ord(字符)
code1 = ord('余') # 结果是10进制的
code2 = ord('婷')
print(hex(code1), hex(code2))
字符串实质可以是一个不可变的序列,序列内容是字符。
一旦字符串确定,那么里面的字符和字符的位置就不可变了,例如:'abc'
1.怎么获取单个字符
'''
python中的字符串,可以通过下标(索引)来获取指定位置上的字符:字符串[索引]
说明:
a.字符串:可以是字符串值,也可以是字符串变量
b.[]: 中括号使固定语法
c.索引:从0开始到字符串长度减1 (0对应第一个字符);
-1 ~ -长度(-1对应的是最后一个字符, -2对应的是倒数第2个字符)
注意:索引不能越界,否则会报错(产生异常)
'''
str1 = 'acbd' # a->0, c->1, b->2, d->3
print(str1[0])
print(str1[4]) # IndexError: string index out of range
name = '王海飞'
print(name[1])
print(name[-1], name[-2], name[-3])
print('abc'[2])
print(name[-4]) # IndexError: string index out of range
2. 获取部分字符(获取子串) -- 切片
字符串[下标1:下标2] : 从下标1开始,获取到下标2前的所有的字符
(从下标1开始,每次下标值加1,一直加到下标2前)
注意:下标1对应的位置,一定要在下标2对应的位置前
str2 = 'hello world'
print(str2[0:4]) # hell
print(str2[2:7]) # llo w
print(str2[2:-1]) # llo worl
print(str2[3:12]) # 切片时下标可以越界,越界的时候就取临界值
print(str2[-5:-2])
print(str2[-5:9])
字符串[下标1:下标2:步进]
"""
从下标1开始获取,每次下标值增加步进值,没增加一次取一个字符,直到取到下标2前为止
注意:a.步进如果是正数,那么下标1对应的字符的位置一定要下标2对应的位置的前面;
步进是负数,那么下标1对应的位置一定要在下标2对应的位置的后面
b.下标2对应字符是取不到的
"""
str3 = 'helloPython'
print(str3[0:5:2]) # hlo 步进:3 hl
print(str3[-1:5:-1]) # nohty
下标的省略
"""
切片的时候,下标1和下标2是可以省略的
下标1省略:默认从开头开始获取(开头可能是字符串的第一个字符,也可能是字符串的最后一个字符)
"""
str4 = 'good good study,day day up'
print(str4[:4])
print(str4[:4:-1])
"""
下标2省略: 从下标1位置开始获取,获取到结束(结束可能是字符串的最后一个字符,也可能是字符串的第一个字符)
"""
print(str4[1:])
print(str4[3::-1])
print(str4[:]) # good good study,day day up
print(str4[::-1]) # pu yad yad,yduts doog doog
练习:要求将一个字符串中所有下标是奇数位上的字符获取出来
str5 = 'abcdefgh'
print(str5[1::2])
1. + 运算符
"""
字符串1+字符串2:
python支持两个字符串相加, 其效果就是将两个字符串拼接在一起产生一个新的字符串
注意:如果+的一边是字符串,那么另外一个也必须是字符串
"""
print('abc'+'123')
str1 = 'world'
newstr = 'hello' + ' ' + str1
print(newstr)
print(10+'abc') # TypeError: unsupported operand type(s) for +: 'int' and 'str'
2. * 运算符
"""
字符串1整数: 字符串重复多次
"""
print('abc'3)
3. 所有的比较运算符
str1 = 'abc'
print('abc' == str1)
print(str1 != 'ab')
比较大小
"""
str1 > str2; str1 < str2
让str1中的每一位的字符,分别和str2中每一位的字符依次比较。
直到不同为止,再看不同字符中谁的编码值大或者小
"""
print('dbcd' > 'abcde')
print('二' > '余婷')
print(ord('二'), ord('余'))
4.in 和 not in
"""
str1 in str2: 判断str1是否在str2中(str2是否包含str1 / str1是否是str2的子串)
结果是布尔值
"""
print('abc' in 'a1b2cdefg')
print('f' not in 'python')
5.获取字符串长度
字符串的长度,指的是字符串中字符的个数
len()内置函数
str3 = 'project'
print(len(str3), len('abc 123\n'))
补充:空串
str4 = ''
str5 = ""
print(len(str5))
len1 = len(str3) # len1 = 7
index = len1 - 1 # 6
print(str3[-1], str3[index])
6.阻止转义
在字符串的最前面添加r/R可以阻止转义
print('a\nb','a\nb\')
print(len('a\nb\')) # 4
print(r'a\nb',R'a\nb\')
print(len(r'a\nb\')) # 6
print('a\nb\\') # a\nb\
print('\\n\') # \换行\
print(r'\\n\') # \\n\
练习
str1 = r'\nabc123' 求:str1[3] b
str2 = 'abc123\123' 求: str2[-5] 3
python为字符串提供了很多的内建函数
字符串.函数()
注意:这些所有的函数的功能都不会影响原来的字符串,而是产生一个新的字符串
str1 = 'hello python'
1.capitalize() 将字符串的第一个字符转换为大写
newstr = str1.capitalize()
print(newstr, str1)
print('abc'.capitalize())
2.center(width, fillchar)
让字符串变成width对应的长度,原内容居中,剩余的部分使用fillchar的值来填充
witdh - 整数; fillchar - 任意字符
print('abc'.center(10, '*')) # ***abc****
3. rjust(width, fillchar)
让字符串变成width对应的长度,原内容靠右,剩余的部分使用fillchar的值来填充
2015103001 2015103002 2015103015
1 2 3 4 5 11 20 ----> 001 002 003 010 011 012
1 --> 0001 11 -> 0011 123 -> 0123
number = '12'
new_id = number.rjust(4, '0')
print(new_id)
3.原字符串.count(str)
判断str值在原字符串中出现的次数
str -> 字符串
print('abcabaa'.count('ab'))
print('贰1壹二2一'.isnumeric())
4.str1.join(str2)
在str2中的每个字符串之间插入一个str1
print('-+'.join('abc'))
5.str1.replace(old, new)
将str1中old全部替换成new
new_str = 'abcdahulapuyeahj'.replace('a','+')
print(new_str)
Python3字符串
Python访问字符串中的值
Python中的字符串用单引号(')或双引号(")括起来,同时使用反斜杠()转义特殊字符。
获取字符串中的单个字符的语法格式如下:
字符串变量[下标]
注意:下标的返回是0~字符串长度-1
# 获取第一个字符
print(var[0])
# 获取第3个字符
print(var[2])
# 获取最后一个字符
print(var[-1])
# 获取倒数第二个字符
print(var[-2])
--
字符串的截取的语法格式如下:
字符串变量[头下标:尾下标]
# 获取从第2个开始到第3个的所有字符
print(var[1:3])
# 获取从第一个开始到第4个的所有字符
print(var[:4])
# 获取从第三个字符开始后面所有的字符
print(var[2:])
# 获取从第4个字符开始到倒数第二个的所有字符
print(var[4:-1])
--
Python字符串运算符
下表实例变量a值为字符串 "Hello",b变量值为 "Python":
操作符 | 描述 | 实例 |
---|---|---|
+ | 字符串连接 | a + b 输出结果: HelloPython |
* | 重复输出字符串 | a*2 输出结果:HelloHello |
[] | 通过索引获取字符串中字符 | a[1] 输出结果 e |
[ : ] | 截取字符串中的一部分 | a[1:4] 输出结果 ell |
in | 成员运算符 - 如果字符串中包含给定的字符返回 True | 'H' in a 输出结果 1 |
not in | 成员运算符 - 如果字符串中不包含给定的字符返回 True | 'M' not in a 输出结果 1 |
r/R | 原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。 原始字符串除在字符串的第一个引号前加上字母 r(可以大小写)以外,与普通字符串有着几乎完全相同的语法。 | print( r'\n' )print( R'\n' ) |
% | 格式字符串 |
a = 'Hello'
b = 'Python'
print(a + ' ' + b) # 打印:Hello Python
str1 = a * 3
print(str1) # 打印:HelloHelloHello
re = 'He' in a
print(re) # 打印:True
re = 'He' not in a
print(re) # 打印: False
Python字符串格式化
Python 支持格式化字符串的输出 。尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中。
在 Python 中,字符串格式化使用与 C 中 sprintf 函数一样的语法。
print ("我叫 %s 今年 %d 岁!" % ('小明', 10))
python字符串格式化符号:
符号 | 描述 |
---|---|
%c | 格式化字符及其ASCII码 |
%s | 格式化字符串 |
%d | 格式化整数 |
%u | 格式化无符号整型 |
%o | 格式化无符号八进制数 |
%x | 格式化无符号十六进制数 |
%X | 格式化无符号十六进制数(大写) |
%f | 格式化浮点数字,可指定小数点后的精度 |
%e | 用科学计数法格式化浮点数 |
%E | 作用同%e,用科学计数法格式化浮点数 |
%g | %f和%e的简写 |
%G | %f 和 %E 的简写 |
%p | 用十六进制数格式化变量的地址 |
--
Python 的字符串内建函数
Python 的字符串常用内建函数如下:
序号 | 方法 | 描述 |
---|---|---|
1 | capitalize() | 将字符串的第一个字符转换为大写 |
2 | center(width, fillchar) | 返回一个指定的宽度 width 居中的字符串,fillchar 为填充的字符,默认为空格。 |
3 | count(str, beg= 0,end=len(string)) | 返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数 |
4 | bytes.decode(encoding="utf-8", errors="strict") | Python3 中没有 decode 方法,但我们可以使用 bytes 对象的 decode() 方法来解码给定的 bytes 对象,这个 bytes 对象可以由 str.encode() 来编码返回。 |
5 | encode(encoding='UTF-8',errors='strict') | 以 encoding 指定的编码格式编码字符串,如果出错默认报一个ValueError 的异常,除非 errors 指定的是'ignore'或者'replace' |
6 | endswith(suffix, beg=0, end=len(string)) | 检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False. |
7 | expandtabs(tabsize=8) | 把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8 。 |
8 | find(str, beg=0 end=len(string)) | 检测 str 是否包含在字符串中,如果指定范围 beg 和 end ,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1 |
9 | index(str, beg=0, end=len(string)) | 跟find()方法一样,只不过如果str不在字符串中会报一个异常. |
10 | isalnum() | 如果字符串至少有一个字符并且所有字符都是字母或数字则返 回 True,否则返回 False |
11 | isalpha() | 如果字符串至少有一个字符并且所有字符都是字母则返回 True, 否则返回 False |
12 | isdigit() | 如果字符串只包含数字则返回 True 否则返回 False.. |
13 | islower() | 如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False |
14 | isnumeric() | 如果字符串中只包含数字字符,则返回 True,否则返回 False(中文数字也可以) |
15 | isspace() | 如果字符串中只包含空白,则返回 True,否则返回 False. |
16 | istitle() | 如果字符串是标题化的(见 title())则返回 True,否则返回 False |
17 | isupper() | 如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False |
18 | join(seq) | 以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串 |
19 | len(string) | 返回字符串长度 |
20 | ljust(width[, fillchar]) | 返回一个原字符串左对齐,并使用 fillchar 填充至长度 width 的新字符串,fillchar 默认为空格。 |
21 | lower() | 转换字符串中所有大写字符为小写. |
22 | lstrip() | 截掉字符串左边的空格或指定字符。 |
23 | maketrans() | 创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。 |
24 | max(str) | 返回字符串 str 中最大的字母。 |
25 | min(str) | 返回字符串 str 中最小的字母。 |
26 | replace(old, new [, max]) | 把 将字符串中的 str1 替换成 str2,如果 max 指定,则替换不超过 max 次。 |
27 | rfind(str, beg=0,end=len(string)) | 类似于 find()函数,不过是从右边开始查找. |
28 | rindex( str, beg=0, end=len(string)) | 类似于 index(),不过是从右边开始. |
29 | rjust(width,[, fillchar]) | 返回一个原字符串右对齐,并使用fillchar(默认空格)填充至长度 width 的新字符串 |
30 | rstrip() | 删除字符串字符串末尾的空格. |
31 | split(str="", num=string.count(str)) | num=string.count(str)) 以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num 个子字符串 |
32 | splitlines([keepends]) | 按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。 |
33 | startswith(str, beg=0,end=len(string)) | 检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查。 |
34 | strip([chars]) | 在字符串上执行 lstrip()和 rstrip() |
35 | swapcase() | 将字符串中大写转换为小写,小写转换为大写 |
36 | title() | 返回"标题化"的字符串,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle()) |
37 | translate(table, deletechars="") | 根据 str 给出的表(包含 256 个字符)转换 string 的字符, 要过滤掉的字符放到 deletechars 参数中 |
38 | upper() | 转换字符串中的小写字母为大写 |
39 | zfill (width) | 返回长度为 width 的字符串,原字符串右对齐,前面填充0 |
40 | isdecimal() | 检查字符串是否只包含十进制字符,如果是返回 true,否则返回 false。 |