目录
python数字
python数字有三种类型:整型,浮点型,复数
内置的 type() 函数可以用来查询变量所指的对象类型。
1.整型
python2 vs python3
python2整型分为:长整型(long)和整型
python3只有整型
>>> a, b, c, d = 20, 5.5, True, 4+3j
>>> print(type(a), type(b), type(c), type(d))
<class 'int'> <class 'float'> <class 'bool'> <class 'complex'>
此外还可以用 isinstance 来判断:
>>> a = 111
>>> isinstance(a, int)
True
>>>
isinstance 和 type 的区别在于:
- type()不会认为子类是一种父类类型。
- isinstance()会认为子类是一种父类类型。
注意:Python3 中,bool 是 int 的子类,True 和 False 可以和数字相加, True==1、False==0 会返回 True,但可以通过 is 来判断类型。
>>> issubclass(bool, int)
True
>>> True==1
True
>>> False==0
True
>>> True+1
2
>>> False+1
1
>>> 1 is True
False
>>> 0 is False
False
在 Python2 中是没有布尔型的,它用数字 0 表示 False,用 1 表示 True。
数字进制及进制转换
进制转换-bin:任意进制转2进制, 接收一个int, 返回一个str
>>> bin(10)
'0b1010'
>>> bin(0b11111)
'0b11111'
>>> type(bin(10))
<class 'str'>
>>> bin(0o34)
'0b11100'
进制转换-oct: 任意进制转8进制, 接收一个int, 返回一个str
>>> oct(54)
'0o66'
>>> oct(0b11111)
'0o37'
>>> type(0b11111)
<class 'int'>
进制转换-hex: 任意进制转16进制, 接收一个int, 返回一个str
>>> hex(54)
'0x36'
>>> hex(0o54)
'0x2c'
>>> type(hex(0o54))
<class 'str'>
进制转换-int: 任意进制转10进制, 接收一个int/str, 返回一个int
>>> int(0b11)
3
>>> type(int(0b11))
<class 'int'>
>>> int('1111')
1111
>>> int('0b11',base=2) #base=2说明输入的字符串为二进制
3
数值运算
>>> 5 + 4 # 加法
9
>>> 4.3 - 2 # 减法
2.3
>>> 3 * 7 # 乘法
21
>>> 2 / 4 # 除法,得到一个浮点数
0.5
>>> 2 // 4 # 除法,得到一个整数
0
>>> 17 % 3 # 取余
2
>>> 2 ** 5 # 乘方
32
注意:
- 1、Python可以同时为多个变量赋值,如a, b = 1, 2。
- 2、一个变量可以通过赋值指向不同类型的对象。
- 3、数值的除法包含两个运算符:/ 返回一个浮点数,// 返回一个整数。
- 4、在混合计算时,Python会把整型转换成为浮点数。
2.浮点型
浮点数数据类型,可以简称为浮点类型。
小数通常以浮点数的形式存储,在 Python 中用 float
表示。
可以理解为浮点数是用来描述小数的。
float与decimal
float是不精确的,float型只能保留小数点后16位
>>> i=1
>>> i=i-0.1
>>> i
0.9
>>> i=i-0.1
>>> i
0.8
>>> i=i-0.1
>>> i
0.7000000000000001
Decimal类型数据是精确的小数,可以传递给Decimal整型或者字符串参数
from decimal import Decimal
mydec = Decimal("3.22")
print(mydec, type(mydec))
mydec2 = Decimal(3.22)
print(mydec2)
3.22 <class 'decimal.Decimal'>
3.220000000000000195399252334027551114559173583984375
3.复数
Python还支持复数,复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, 复数的实部a和虚部b都是浮点型
>>> a = -5 + 4j
>>> type(a)
<class 'complex'>
字符串string
Python中的字符串用单引号 ' 或双引号 "或使用三引号('''或”””) 括起来,同时使用反斜杠 \ 转义特殊字符。
a = "abc" #定义字符串
print(a)
#r标志 是输出原始字符串,不转义
b = r"a\nb"
print(b)
print("a\\nb")
print("\ta\"b")
r标志 是输出原始字符串,不转义;raw功能的作用: 返回到原始(原生)的字符,即不使得转义字符,将字符原样输出, 让\t失去代表tab键的功能
常见转义字符
转义字符是一种特殊的字符常量。转义字符以反斜线"\"开头,后跟一个或几个字符。转义字符具 有特定的含义,不同于字符原有的意义,故称“转义”字符。
\(在行尾时) 续行符
\n 换行
\\ 反斜杠符号
\' 单引号
\t 横向制表符
\" 双引号
\r 回车
字符串基本操作
#字符串的不可变的序列 # 一旦创造了一个字符串,就不能再改变它。
1.字符串取值
- 下标取值法(注意:下标从0开始)
- 切片取值法
>>> a='abcdefghijklmn' 每个字符对应一个索引(下标),编号从0开始
0123456789
>>> print(a[-8]) 从右至左第八个
g
>>> a[5] 从左至右第五个
'f'
>>> a[3:6] 从左至右第3到6个,不包括第六个,左闭右开区间
'def'
#格式为a[start:end:step] step默认为+1,step为正,从左至右切步长
# step为负,从右至左切步长
>>> a[8:2:-2]
'ige'
#字符串切片索引
# str[start:end:step]
# str1='abcdefghijk'
# 1,确定步长为正还是负
# 为正 从左至右取值
# 为负 从右到左取值
# 2, 确定起始位置
#3, 确定步长
print(str1[-9:8:2]
print(str1[2:]) #end值为空,包含最后一个数
print(str1[:7]) #end值不为空,不包含最后一个数
print(str1[::-1]) #倒叙整个字符串
2.字符串级连
>>>str2 = "aa""bbb"
>>>print(str2)
'aabbb'
3.字符串的运算
>>>str3 = "hello,"
>>>str4 = "world!"
>>>print(str3 + str4)
>>>print(str3*3)
'hello,world!'
'hello,hello,hello,'
4.字符串的转换
>>>result = str(100)
>>>print(type(result), result)
<class 'str'> 100
5.Python字符串常用方法
1.判断系列
str.isdigit() 字符串中是否只包含数字
str.isnumeric() 字符串中是否只包含数字(包括中文一到九等)
str.isalnum() 字符串中是否只包含字母或数字
str.istitle() 字符串中是否每个单词首字母大写,其他字母小写
str.isalpha() 字符串中是否只包含字母(汉字会算作字母)
str.isupper() 字符串中是否全为大写
str.isidentifier() 字符串是否为合法标识符
str.isprintable() 字符串是否为可打印字符
str.islower() 字符串中是否全为小写
str.isspace() 字符串中是否只包含空格(tab也算空格)
str.startswith(prefix[, start[, end]]) 字符串是否以某字符串开始,可以通过start和stop参数设 置搜索范围
str.endswith(suffix[, start[, end]]) 字符串是否以某个字符串结束,可以通过start和stop参数 设置搜索范围
>>> str='abc123'
>>> str.isidentifier()
True
>>> str.isprintable()
True
>>> str.isspace()
False
>>> str.startswith('a',0,4)
True
>>> str.endswith('a',0,4)
False
>>> str.isdigit()
False
>>> str.isnumeric()
False
>>> str.isalnum()
True
>>> str.istitle()
False
>>> str.isalpha()
False
>>> str.islower()
True
>>> str.isupper()
False
2.查找统计类
len(string) 统计字符串长度
str.count(sub [,start [,end]]) 统计substring在字符串里出现次数
str.index(sub [,start [,end]]) 显示substring在字符串中第一次出现的下标位置,没有会报错
str.find(sub [,start [,end]]) 查找substring,找到返回其起始位置, 找不到返回-1
#查看某个字符出现了多少次
>>> 'helloworld'.count('l')
3
#统计字符串的长度
>>> len('klajfdla')
8
#查看某个字母第一次出现所在位置的下标
#如果没有就报错 ,报错会终止程序,不推荐使用
>>> 'ajfklas'.index('l')
4
>>> 'ajfklas'.index('g')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found
#find没有找到字母也不报错,推荐使用
>>> 'ajfklas'.find('g')
-1
3.字符串转换类(返回一个新对象)
str.upper() 将字符串转换为大写
str.lower() 将字符串转换为小写
str.title() 将字符串中的单词首字母大写,其他字母小写
str.split('sep') 指定'sep'作为分隔符将字符串切割成列表,分隔符可以是任意字符(默 认是空格)
'str'.join(list) 将列表用str拼接成一个大字符串
str.strip([string]) 去除字符串中首尾的字符串,不带参数默认去除空格
str.zfill(number) 返回指定长度的字符串,原字符串右对齐,前面填充0
str.replace('old', 'new'[, count]) 用新的字符替换老字符,还可以指定替换的个数,默认全部 替换 str.capitalize() 句子首字母大写
str.center(width[, fillchar]) ,str.ljust(width[, fillchar]) ,str.rjust(width[, fillchar]) 返回一个原字符串居中(靠左/靠右)对齐,width为总长度,两 边用一个字符fillchar填充,如果指定的长度小于原字符串的 长度则返回原字符串。
str.expandtabs(number) 将\t转换成number个空格
>>> str.upper()
'ABC123'
>>> str.lower()
'abc123'
>>> str.title()
'Abc123'
>>> str.split()
['abc123']
>>> str.split(' ')
['abc123']
>>> str.split('1')
['abc', '23']
>>> a=str.split('1')
>>> '1'.join(a)
'abc123'
>>> str.swapcase()
'ABC123'
6.Python字符串拼接
1.直接通过(+)操作符拼接:
使用这种方式进行字符串连接的操作效率低下,因为python中使用 + 拼接两个字符串时会生成一个新的字符串,生成新的字符串就需要重新申请内存,当拼接字符串较多时自然会影响效率。
2.通过str.join()方法拼接:
这种方式一般常使用在将集合转化为字符串,''''.join()其中''''可以是空字符,也可以是任意其他字符,当是任意其他字符时,集合中字符串会被该字符隔开
3.通过str.format()方法拼接
通过这种方式拼接字符串需要注意的是:字符串中{}的数量要和format方法参数数量一致否则会报错!
4.通过(%)操作符拼接
这种方式与str.format()使用方式基本一致
>>> a='字符串拼接1'
>>> b='字符串拼接2'
>>> print(a+b)
字符串拼接1字符串拼接2
>>> print("%s %s"%(a,b))
字符串拼接1 字符串拼接2
>>> print('{},{}'.format(a,b))
字符串拼接1,字符串拼接2
>>> print(f'{a},{b}')
字符串拼接1,字符串拼接2
>>> c=f'{a},{b}'
>>> c
'字符串拼接1,字符串拼接2'
7.字符串格式化
一、使用 % 符号来进行格式化
基本格式 %[(name)][flags][width].[precision]typecode - (name):命名 - flags: +,-,' '或0。+表示正数的加号;-表示左对齐;' '为一个空格,表示在正数的左侧填充一个空 格,从而与负数对齐,0表示使用0填充。 - width表示显示宽度 - precision表示小数点后精度 -typecode表示数据类型%s 字符串 (采用str()的显示) %r 字符串 (采用repr()的显示) %c 单个字符 %b 二进制整数 %d 十进制整数 %i 十进制整数 %o 八进制整数 %x 十六进制整数 %e 指数 (基底写为e) %E 指数 (基底写为E) %f 浮点数 %F 浮点数,与上相同 %g 指数(e)或浮点数 (根据显示长度) %G 指数(E)或浮点数 (根据显示长度) %% 字符"%",显示百分号%
>>> print("第一个格式化:%10x"%(10))
第一个格式化: a
>>> print("第二个格式化:%+x"%(10))
第二个格式化:+a
>>> print("第三个格式化:%06d"%(10))
第三个格式化:000010
>>> print("第四个格式化:%-6d"%(10))
第四个格式化:10
>>> print("第五个格式化:%09.3f"%(3.245345))
第五个格式化:00003.245
>>> num1 = 0.34539203
>>> print("%.2f%%"%(num1*100))
34.54%
>>>
二、使用.format的格式
基本使用格式 <模板字符串>.format(<逗号分隔的参数>)
<模板字符串>内容:{变量:[填充字符][对齐方式 <^>][宽度][,(千分位格式化)][精度][格式]}
s = "PYTHON"
#填充默认为空格
"{0:30}".format(s)
Out[17]: 'PYTHON '
"{0:>30}".format(s)
Out[18]: ' PYTHON'
"{0:*^30}".format(s)
Out[19]: '************PYTHON************'
"{0:-^30}".format(s)
Out[20]: '------------PYTHON------------'
#指当前槽的设定输出字符宽度,如果该槽对应的format()参数长度比<宽度>设定值大,则使用参数实际长度。
#如果该值的实际位数小于指定宽度,则位数将被默认以空格字符补充。
"{0:3}".format(s)
Out[21]: 'PYTHON'
#<格式控制标记>中逗号(,)用于显示数字的千位分隔符
"{0:-^20,}".format(1234567890)
Out[24]: '---1,234,567,890----'
"{0:-^20}".format(1234567890) #对比输出
Out[25]: '-----1234567890-----'
"{0:-^20,}".format(12345.67890)
Out[26]: '----12,345.6789-----'
#对于浮点数,精度表示小数部分输出的有效位数。对于字符串,精度表示输出的最大长度。
"{0:.2f}".format(12345.67890)
Out[29]: '12345.68'
"{0:H^20.3f}".format(12345.67890)
Out[30]: 'HHHHH12345.679HHHHHH'
"{0:.4}".format("PYTHON")
Out[31]: 'PYTH'
三、f-string来格式化字符串——python3.6以上
例如:
#只有python3支持 python2不支持这种写法
name = "sc"
age = 4
result = f"my name is {name}, my age is {age:*>10}"
print(result)
结果如下:
my name is sc, my age is *********4