Python数据类型、进制转换、字符串格式化

1. 整数、浮点数和复数

在这里插入图片描述

整数

Python2中区分整型int、长整型long
Python3中只有统称为 整型int

浮点数

即带有小数点的数字,因为浮点数用二进制表示的,小数部分有时是无法表示的。是不精确的

示例:

9 = 2**3 + 2**0
11 = 2**3 + 2**1 
0.5 = 2**-1
0.75 = 2**-1 + 2**-2
0.7 # 二进制无法表示
>>> i = 1
>>> i = i - 0.1
>>> i
0.9
>>> i = i - 0.1
>>> i
0.8
>>> i = i - 0.1
>>> i
0.7000000000000001
>>> i = i - 0.1
>>> i
0.6000000000000001

float组成: 由整数位,小数点,小数位组成,也可以用科学计数法表示

3.14159
4.2E -10
-98.12
6.23e33

Decimal 模块

class decimal.Decimal(value=‘0’, context=None)¶
根据 value 构造一个新的 Decimal 对象。value 可以是整数,字符串,元组,float ,或另一个 Decimal 对象。
返回值是精确的

from decimal import Decimal  #从decimal 包导入Decimal  类
mydec = Decimal("3.22")   #将字符串转换成decimal类型
print(mydec, type(mydec))
# 结果:3.22 <class 'decimal.Decimal'>
mydec2 = Decimal(3.22)   #浮点型3.22 是不精确的,转换成decimal就是精确的
print(mydec2, type(mydec))
# 结果:3.220000000000000195399252334027551114559173583984375 <class 'decimal.Decimal'>

复数

dir(a) 查看属性
a.imag 获取虚部,无论定义的时候是整型还是浮点型最终都会转换成浮点型
a.real 获取实部

>>> a = 4 + 5j
>>> a.imag
5.0
>>> a.real
4.0

2.进制转换

在这里插入图片描述

进制数据类型

二进制、八进制、十六进制都是整型

>>> a=0b11  # 二进制   binary
>>> type(a)  
<class 'int'>  
>>> b=0o11  # 八进制 octonary
>>> type(b)
<class 'int'> 
>>> c=0x11  # 十六制   hexadecimal
>>> type(c)
<class 'int'> 

整型进制操作

转2/8/16进制

>>> num = 100
>>> bin(num)  
              # 任意进制转2进制, 接收一个int, 返回一个str
'0b1100100'   
>>> oct(num)  # 任意进制转8进制, 接收一个int, 返回一个str
'0o144'
>>> hex(num)  # 任意进制转16进制, 接收一个int, 返回一个str
'0x64'
# 总结:整型转换成2/8/16进制,传递的参数要是整型,得到的是字符串

转十进制

# 八进制整型,直接转换
>>> int (0o11)                      # 接收int,返回int
9
# 八进制字符串,要执行转换的进制
>>> int("0o11",base=8)              # 接收str,返回int
9
# 八进制数字字符串,可以不指定,因为它是一个数字
>>> int("11")                       # 接收int,返回int
11

3. 字符串

3.1 转义字符

r标志:是输出原始字符串,不转义
在这里插入图片描述

3.2 字符串取值

下标取值法

从左0123456
从右-1 -2 -3 -4 -5

>>> a = 'abcdefghijklmnopq'
>>> a[0]
'a'
>>> a[-8]
'j'

切片取值法

str[start:end:step]       左闭右开
step 为正数 从左至右
step 为负数 从右至左
str[2:]  从左至右 第三个数开始
str[:7] 从左至右到第七位
str[::-1]  从右至左 步长为1
str[4::-2]  从第五个数开始从右至左 步长为2
>>> a = 'abcdefghijklmnopq'  一旦定义不可改变
>>> a[2:5]
'cde'

4. 字符串运算与转换

>>> str1="qqq"
>>> str2 = "lll"
>>> str1+str2 # 字符串拼接
'qqqlll'
>>> str3="abc"  
>>> str3*3  
'abcabcabc'   # 字符串复制

>>> result = str(100)  # int转换成字符串
>>> type(result)
<class 'str'>
>>> result
'100'

5. 字符串的常用方法

判断系列

在这里插入图片描述
在这里插入图片描述
演示:

>>> str7= "helloabc xx zz"
>>> str7.startswith("abc")
False
>>> str7.startswith("abc",5)     # 从第6个开始以abc开头
True
>>> str7.startswith("abc",5,7)  
False
>>> str7.startswith("abc",5,8)  # 左闭右开
True

查找统计系列

在这里插入图片描述

len不是字符串的属性方法,不能通过.len的方式去计算长度

字符串转换类

在这里插入图片描述

>>> str7
'helloabc xx zz'
>>> str7.upper()  # 转大写
'HELLOABC XX ZZ'
>>> str7.title()  # 转标题格式
'Helloabc Xx Zz'
>>> str9 = str7.title().swapcase()  # 大小写互换
>>> str9
'hELLOABC xX zZ'
>>> str9 = "a b c d e f"
>>> str9.split()  # 默认按空格切割
['a', 'b', 'c', 'd', 'e', 'f']
>>> str10 = "a#b#c#d#e#f#g#h"
>>> str10.split("#")  # 指定分隔符
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
>>> str11 = str10.split("#")
>>> str11
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
>>> "*".join(str11)   # 指定拼接符
'a*b*c*d*e*f*g*h'

在这里插入图片描述

+和join的效率问题

一般来说,+ 拼接效率比join低。
原因:+拼接每次都会在内存中开辟一个新的空间,效率低,耗时。
join 一次性拼接成一个大的字符串(join传参目前只支持传列表)

[root@MYSQL lianxi]# cat addstr.py
result_str = ''
for i in range(100000):
    result_str = result_str + "a"
print(result_str[:10])
[root@MYSQL lianxi]# cat joinstr.py
str_lst = ["a"]*100000
result_str = "".join(str_lst)
print(result_str[:10])
# 结果:
[root@MYSQL lianxi]# time python3 addstr.py
aaaaaaaaaa

real    0m0.025s
user    0m0.024s
sys     0m0.000s
[root@MYSQL lianxi]# time python3 joinstr.py
aaaaaaaaaa

real    0m0.014s
user    0m0.011s
sys     0m0.003s

6 . 字符串格式化

%格式化

在这里插入图片描述

语法格式:%[(name)][flags][width].[precision]typecode
- (name):命名
- flags: +,-,' '或0。
    +表示右对齐;-表示左对齐;
    ' '为一个空格,表示在正数的左侧填充一个空格,从而与负数对齐,0表示使用0填充。
- width表示显示宽度
- precision表示小数点后精度
%s  一个萝卜一个坑,一一对应,不能多也不能少

在这里插入图片描述
示例:
在这里插入图片描述

结果在这里插入图片描述

format格式化

num1 = 0.1416926   #转换成百分位
print("%.2f%% " % (num1 * 100)) # 将14.16926保留俩位小数,%%表示字符%

在这里插入图片描述

f格式化

python2不支持这种写法

print(f"my name is {name},my age is {age}")
结果:my name is sc,my age is 4  
print(f"my name is {name},my age is {age:*>10}")
结果:my name is sc,my age is *********4

练习

请计算出新拼接出来的字符串长度,并取出其中的第七个字符。

str1 = "8*y*cali*china**it*soft*linux*python"
count = str1.count("*")
list = str1.split("*")
str2 = "".join(list)
print("*" * count + str2)

将字符串"8ycalichina**itsoftlinuxpython"里的所有的*号抽
取出来放到最前面,里面的字符串保持顺序不变

str1 = "8*y*cali*china**it*soft*linux*python"
count = str1.count("*")
list = str1.split("*")
str2 = "".join(list)
print("*" * count + str2)

7. 字符串拼接方式

>>> str1 = "你好" 
>>> str2 = "hejin"
>>> str1+str2    #方式1:加号拼接
'你好hejin'
>>> "".join([str1,str2])  #方式2:join拼接
'你好hejin'
>>> print("%s,%s"%(str1,str2))  #方式3:% 占位符
你好,hejin
>>> "{},{}".format(str1,str2)   #方式4:format()
'你好,hejin'
>>> "{0},{1}".format(str1,str2) # 方式5 
'你好,hejin'
>>> "{1},{0}".format(str1,str2)
'hejin,你好'
>>> "{a},{b}".format(a=str1,b=str2)  # 方式6 
'你好,hejin'
>>> "{b},{a}".format(a=str1,b=str2)
'hejin,你好'
>>> f"{str1},{str2}"  # 方式7:f格式化
'你好,hejin'

练习1:写出4种拼接方式

a = "字符串拼接1"
b = "字符串拼接2"
print("方式1:" + a + b)
print("方式2:%s%s" % (a, b))
print(f"方式3:{a}{b}")
print("方式4:{0}{1}".format(a, b))

c = a + b
print("新拼接的字符串长度为:", len(c))
print("第七个字符为:", c[6])

练习2:猜谁是小偷

嫌疑人A、B、C、D的笔录如下,其中三人为真,一人为假:
a:我不是小偷
b:C是小偷
c:小偷肯定是D
d:小偷肯定是D
lst = ["a", "b", "c", "d"]
for x in lst:
    if ("a" != x) + ("c" == x) + ("d" == x) + ("d" != x) == 3:
        print(f"{x}是小偷")
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这个手刹不太灵儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值