今日内容概要
- 数据类型内置方法理论、
- 整型相关的操作
- 浮点型相关的操作
- 字符串相关操作
- 列表相关操作
- 可变与不可变类型
整型的内置方法与操作
1.什么是类型的转换?
类型转换就是将其他的数据类型转换成整型
语法结构
int(其他数据类型)
PS:浮点型可以直接转,字符串则必须满足内部是纯数字才可以
2.进制数的转换
十进制转换成其他的进制
print(bin(100)#0b1100100
print(oct(100)) # 0o144
print(hex(100)) # 0x64
注:
Python 中,除 10 进制,还有其他三种进制:
0b 或 0B,二进制 0 1
0o 或 0O,八进制 0 1 2 3 4 5 6 7
0x 或 0X,十六进制 0 1 2 3 4 5 6 7 8 9 a b c d e f
这三种进制可以非常方便的进行“位运算”操作
其他进制转十进制:
rint(int(0b1100100))
print(int(0o144))
print(int(0x64))
print(int("0b1100100", 2))
print(int("0o144", 8))
print(int("0x64", 16))
3.python这门语言其实自身对数字的敏感度较低(精确度低)
python这门语言其实真的一点都不厉害 主要是因为它背后有太多大佬
如果需要进准的计算需要借助于模块numpy…
>>> 1.2 - 1.0
0.19999999999999996
解释:
这与后台C代码控制浮点数的方式有关。内部使用固定数位的二进制(小)数来表示十进制的浮点数。有一些浮点数不能被二进制数精确的表示,就像是无限循环或者超出浮点数的表示位数(32或64位),最终在某个点上会被截断来表示该浮点数,因此造成了较小的舍入错误。
对于此,判断浮点数相关的相等要小心了,有时候明显为真的表达式却不为真:
比如:
1.2 - 1.0 == 0.2
结果为False。
另外,repr(f)将打印出尽可能多的精确小数位,str(f)将会打印出人可以舒适看到的形式
>>> repr(1.2 - 1.0) # 1.2 - 1.0,默认是repr的行为
'0.19999999999999996'
>>> str(1.2 - 1.0) # print 1.2 - 1.0,默认是str的行为
'0.2'
eval(repr(f)) == f是恒为真的。
浮点型内置方法与操作
1.类型转换
语法:
float(其他数据类型)
字符串里面可以允许出现一个小数点,其他都必须是纯数字
字符串的内置方法与操作
1.类型转换
str(其他数据类型)
ps:可以转任意数据类型(只需要在前后加引号即可)
`
str (11)
print(res,type(res)) #11 <class 'str'>
res1 = str(11.11)
print(res1,type(res1)) #11.11 <class 'str'>
res2 = str('hello')
print(res2,type(res2)) # hello <class 'str'>
res3 = str ([1,2,3,4,5])
print(res3,type(res3))# [1, 2, 3, 4, 5] <class 'str'>
res4 = str ({1,1,2,3})
print(res4,type(res4)) #{1, 2, 3} <class 'str'>
res5 = str({'name':'jason',})
print(res5,type(res5)) #{'name': 'jason'} <class 'str'>
res6 = str (True)
print(res6,type(res6)) #True <class 'str'>
2.必须要掌握的方法
# s1 = 'hello world'
# 索引取值(起始位置从0开始,超出范围的话直接报错)
# print(s1[0]) #h
# print(s1[-1]) # d(支持负数取值,从末尾开始
# 2.切片操作
# print(s1[1:5]) #ello
# #顾头不顾尾,从索引1一直切取到索引4
#print(s1[-1:-5]) #默认的顺序是从左往右(所以这种方式不可行)
#print(s1[-5:-1]) #wor 默认的顺序是从左往右
# 3.修改切片方向[间隔取值]
# print (s1[1:5:2]) #ello 1就是不间隔,默认间隔为1
# print (s1[1:5:2]) # el 这里间隔为2
# print(s1[-1:-5:-1]) # drow 从右往左
# print(s1[:]) #hello world 不写数字全都要
# print(s1[2:]) #llo wordv 从索引2开始往后都要
# print (s1[:5]) # hello 从索引0开始往后要到4
# print(s1[::2]) #hlowr 每隔一个要一位
#4.统计字符串中有多少个字符(len)
# print (len(s1)) #11(空格也是字符串)
#5.移除字符串首位指定的字符 .strip
#eg: username = input ('username>>>>:').strip
# username = username.strip(这样太过繁琐了)
# if username == 'jason':
# print ('登录成功')
# res = 'jason '
# print (len(res))#6
# print (len(res.strip())) # 5 括号内不写默认移除首尾空格
# res1 = '$$jason$$' #如果中间有是移除不了的
# print(res1.strip('$')) # jason 默认是左右
# print(res1.lstrip('$')) #jason$$ 移除左边的字符
# print(res1.rstrip('$')) #$$jason 移除右边的字符
# 6.切割字符串中的指定字符 split(切割完的处理结果是列表)
# res = 'jason|123|read' #如果一个字符串是按照一个特定的符号组织的那么我们就能按照这个字符来切它
# print(res.split('|')) #['jason', '123', 'read']该方法的处理结果是一个列表
# name,ped,hobby = res.split('|') #解压赋值
# print(res.split('|')) #['jason', '123', 'read']
# print(res.split('|', maxsplit= 1)) #['jason', '123|read']从左往右指定一个字符不要
# print(res.rsplit('|',maxsplit=1)) #['jason|123', 'read']从右往左定一个数
# 7.字符串格式化输出 forjmat
# format玩法一:类似于占位符
# res = 'name is {} my age is {}'.format('jason',123)
# print(res) #name is jason my age is 123
#format玩法二:索引取值反复使用
# res = 'name is {0}{1} my age is {1}{0}{1}'.format('jason',123)
# print(res) #name is jason123 my age is 123jason123
# 3.format玩法三:关键字传参 (占位符见名知意)也可以多个使用
# res = 'name is {name1} my age is {age}'.format(name1='jason',age =123)
# print(res) #name is jason my age is 123
# 4.format方法4:推荐使用
# name = input('username>>>:')
# age = input('age>>>:')
# res = f'my name is {name} my age is {age}'
# print(res)# my name is jason my age is 17
3.字符串需要了解的方法
#大小写相关 upper(转大写) lower(转小写)
# res = 'hElLO WorlD 666'
# print(res.upper()) #HELLO WORLD 666 (大写)
# print(res.lower()) #hello world 666 (小写)
'''图片验证码:生成没有大小写统一的验证码 展示给用户看
获取用户输入的验证码 将用户输入的验证码和当初产生的验证码统一转大写或者小写再比对
'''
# code ='8Jj6Cc'
# print('展示给用户看的验证码',code)
# confirm_code = input('请输入验证码').strip()
# if confirm_code.upper() == code.upper(): 把输入的验证码转成全大写给
# print('验证码正确')
# res = 'hello world'
# print(res.isupper()) # False 判断字符串是否是纯大写
# print(res.islower()) # True 判断字符串是否是小写
2.判断字符串中是否是纯数字 digit
# res ='11.1'
# print(res.isdigit()) # False
# 猜年龄
# guess_age = input('guess_age>>>:').strip()
# if guess_age.isdigit(): #判断年龄是不是数字
# guess_age = int(guess_age)
# else:
# print('年龄都不知道怎么输吗?')
3.替换字符串中指定的字符 replace
#res = 'python java C python C java php'
# 替换的位置在前面,替换的内容在后面
# print(res.replace('C','php')) # python java php python php java php
# 可以定义一个从左往右的替换指定个数的字符
# print(res.replace('C','php',1)) #python java php python C java php
4.字符串的拼接 join(拼接) slip的反向操作
# s1 = 'hello'
# s2 = 'world'
# print(s1 + '$' + s2) # hello$world
# print(s1 * 4) # hellohellohellohello
# 拼接的数据值必须都是字符串
# print('|'.join(['jason','123','read'])) #jason|123|read
5.统计指定字符出现的次数 count
# res = 'hello world'
# print(res.count('l')) # 3
6.判断字符串的开头和结尾 startswith
# res = 'jason say hello'
# print(res.startswith('jas')) #True
# print(res.startswith('ja')) #True 只能判断开头
# print(res.startswith('j'))# True
# print(res.startswith('lo')) # False
#
# print(res.endswith('llo')) #True 只能判断结尾
# print(res.endswith('o')) # True
7.其他方法补充
# res= 'Hello wOrld'
# print(res.title()) # Hello World 每个单词第一个单词首字母大写
# print(res.capitalize()) #Hello world第一个单词首字母大写
# print(res.swapcase()) # hELLO WoRLD 取反
# print(res.index('0')) # 不做特殊的说明下是索引
# print(res.index('c')) #索引的值不在子序列直接报错
# print(res.find('c')) # 找不到默认返回-1
# print(res.find('lo')) # 3 索引多个也是可以的
列表的内置方法
1.类型转换
list(其他数据类型)
ps:能够被for循环的数据类型都可以转成列表
能被转成列表的:
# print(list('hello')) #['h', 'e', 'l', 'l', 'o']
# print(list({'name':'jason','pwd':123})) #['name', 'pwd']
# print(list((1,2,3,4))) #[1, 2, 3, 4]
# print(list({1,2,3,4})) #[1, 2, 3, 4]
需要 掌握的方法
l1=[11,22,33,44,55,66]
1.索引取值(正负数)
# print(l1[0]) # 11
# print(l1[-1]) # 66
2.切片操作
# print(l1[0:5]) # [11, 22, 33, 44, 55]
# print(l1[:1]) # [11]
# #3.间隔数 方向 以上与字符串一致
# print(l1[::-1]) #[66, 55, 44, 33, 22, 11]
4统计列表中数据的个数 len
# print(len(l1)) #6
5.数据值的修改
# l1[0] =123
# print(l1) # [123, 22, 33, 44, 55, 66]
6列表添加数据值
# 方式一: append 尾部追加数据值 (不管添加多少的数据值,都会被列表当做一个数据添加进去)
# l1.append('加油')
# print(l1) # [11, 22, 33, 44, 55, 66, '加油']
# l1.append([77,88,99])
# print(l1) # [11, 22, 33, 44, 55, 66, [77, 88, 99]]
# 方式二:任意位置插入 insert
# l1.insert(0,'jason') # 把索引0的位置让出来给jason
# print(l1) #['jason', 11, 22, 33, 44, 55, 66]
# 它也是不论插入什么东西,该列表都当它是一个整体(就是一个数据值)
# 方式三:扩展列表(合并列表)extend
# ll1 = [11,22,33]
# ll2 = [44,55,66]
# print(ll1 +ll2) #[11, 22, 33, 44, 55, 66]最简单的
# ll1.extend(ll2) # for循环+append
# print(ll1) #[11, 22, 33, 44, 55, 66]
# for i in ll2:
# ll1.append(i)
# print(ll1) #[11, 22, 33, 44, 55, 66]
7.删除列表数据
# 方式1:通用的删除关键字del
# del l1[0]
# print(l1) # [22, 33, 44, 55, 66]
#方式2:remove 直接干掉
# l1.remove(44) # 不喜欢的直接删除
# print(l1) # [11, 22, 33, 55, 66]
# 方式3;(pop) 弹出元素 用的最多(暂时弹出,但是还能付一个变量名能使用,用完了再杀)
# l1.pop(3) # 这里的括号放的是索引
# print(l1) # [11, 22, 33, 55, 66]
# l1.pop() # 什么都不写默认弹出最后一个
# print(l1) # [11, 22, 33, 44, 55]
# res = l1.pop(3)
# print(res) # 44
# res1 = l1.remove(44)
# print(res1) # None 不存在,找不到这个数据值
8.排序
# ss = [45,67,48,88,97,35,86,12,]
# # ss.sort() # 默认是升序
# # print(ss) # [12, 35, 45, 48, 67, 86, 88, 97]
#
# ss.sort(reverse=True) # 降序(从大到小)
# print(ss) # [97, 88, 86, 67, 48, 45, 35, 12]
9.统计列表中某个数据值 出现的次数 count
# print(l1.count(11)) # 1
10.clear 清空列表
11.颠倒列表的顺序 rever
print(l1) # [11, 22, 33, 44, 55, 66]
可变类型与不可变类型
# s1 = '$$jason$$'
# l1 = [11, 22, 33]
# s1.strip('$')
# print(s1) # $$jason$$
'''字符串在调用内置方法之后并不会修改自己 而是产生了一个新的结果
如何查看调用方法之后有没有新的结果 可以在调用该方法的代码左侧添加变量名和赋值符号
res = s1.strip('$')
ret = l1.append(44)
# print(l1) # [11, 22, 33, 44]
# print(ret) # None
'''列表在调用内置方法之后修改的就是自身 并没有产生一个新的结果'''数据本身
可变类型:值改变 内存地址不变 列表就是
# l1 = [11, 22, 33]
# print(l1) #[11, 22, 33]
# print(id(l1)) #2075828426944地址
# l1.append(44) # [11, 22, 33, 44]
# print(l1)
# print(id(l1)) # 2075828426944 地址没变
不可变类型:值改变,内存地址肯定变 字符串
res = '$$hello world$$' #$$hello world$$
print(res) ##$$hello world$$
print(id(res)) #1543931757168地址
res.strip('$')
# 想要改变改变字符串只能重新弄一个字符串,地址也会变
print(res) #$$hello world$$
# print(id(res)) 地址1543931757168