今日主要内容
- 整型
- 范围
- 进制转换
- 字符串
- 索引
- 切片
- 部分方法详解
- for循环
一、整型(int)
(一)整型的范围
- 32位:-2 ** 31 ~ 2 ** 31 -1
- 64位:-2 ** 63 ~ 2 ** 63 -1
(二)进制转换
十进制转换二进制:
- 短除法:与2短除,除到商为0,从下向上取余
bin() 函数:将十进制数转换为二进制数
num = 13 print(bin(num)) # 1101
二进制转换十进制
- 算术法:从右向左依次乘2的n次方(n为0,1,2,...),最后相加
int() 函数:其中第二个参数传入几进制数,第一个参数传入对应进制数
num = "1101" print(int(num, 2)) # 13
(三)不可变数据类型
什么是不可变/可变类型数据
- 能在原地修改的数据是可变类型数据
- 不能再原地修改的数据(修改就会开辟新的内存空间)是不可变类型数据
整型是不可变类型数据
id() 函数:查看内存地址
a = 10 print(id(a)) # 1956675984 a = a + 1 print(id(a)) # 1956676016
二、字符串(str)
(一)索引
什么是索引?
- 索引就是下标,python中索引是从0开始的
索引只给有序数据类型使用
索引的表示
str[下标]
正索引和反索引
- 正索引:从左到右依次 0,1,2 ...
- 反索引:从右到左依次 -1,-2,-3 ...
a = "粪发涂墙的郭老湿" print(a[0]) # 粪 print(a[3]) # 墙 print(a[5]) # 郭 print(a[-3]) # 郭
注意:索引时,超出最大索引值会报错
a = "粪发涂墙的郭老湿" print(a[10]) # IndexError: string index out of range
(二)切片
上面的例子,如果想要得到"粪发涂墙",只能挨个索引再进行拼接
a = "粪发涂墙的郭老湿" a1 = print(a[0]) a2 = print(a[1]) a3 = print(a[2]) a4 = print(a[3]) print(a1 + a2 + a3 + a4) # 粪发涂墙
是不是很麻烦 ,可以利用切片
切片只给有序数据类型使用
切片格式
str[start: end: step]
- 默认step为1
特点:顾头不顾腚
从开头切片不用输入start;
切到结尾不用输入end;
从开头切到结尾都不用输入
a = "粪发涂墙的郭老湿" mes = a[:4] # 从开头切不用输入start print(mes) # 粪发涂墙
- step为步长,可以利用step间隔切片
a = "粪发涂墙老污郭" print(a[::2]) # 粪涂老郭
步长若为负数,则反向切片
注意:若反向切片,start和end的位置是从后往前取的
a = "粪发涂墙老污郭" print(a[::-2]) # 郭老涂粪 print(a[-2:-6:-1]) # 污老墙涂
- 将字符串反转可以利用切片
a = "粪发涂墙老污郭" a_inversion = a[::-1] print(a_inversion) # 郭污老墙涂发粪
- 索引时,超出最大索引值不会报错
(三)方法详解
-
str.upper() 全部变为大写 str.lower() 全部变为小写 str.startswith(n) 判断是否以n开头 str.endswith(n) 判断是否以n结尾 str.count(n) 计算n出现的次数 str.strip() 去掉两端空格、\n、\t str.split(n) 以n切割 str.replace(old, new) 替换 str.isalnum() 判断是否由数字、中文、字母构成 str.isalpha() 判断是否由中文、字母构成 str.isdigit() 判断是否由阿拉伯数字构成 str.isdecimal() 判断是否由十进制数字构成
str.upper()
- 将字符串全部变为大写,只对字母生效,对其他不报错
a = "zxdznb" new_a = a.upper() print(a) # 不可变类型,原字符串不变 print(new_a) # ZXDZNB
str.lower()
- 将字符串全部变为小写,只对字母生效,对其他不报错
a = "ZXDZNB" new_a = a.lower() print(a) # 不可变类型,原字符串不变 print(new_a) # zxdznb
应用:登录验证码,不区分大小写
verify_code = "eF7d" while True: user = input("账号:") pwd = input("密码:") while True: print(f"验证码:{verify_code}") vc = input("请输入验证码:") if vc.upper() == verify_code.upper(): # 全部变为大写 break else: print("输入错误,请重新输入!") if user == "ZXD" and pwd == "zxd123": print("欢迎回来") break else: print(”账号密码错误,请重新输入!“)
str.startswith(n)
- 判断字符串是否以参数n开头,输出为布尔值
- 还可以判断切片的开头
a = "zxdznb" print(a.startswith("z")) # True print(a.startswith("x")) # False print(a.startswith("x", 1, 5)) # True print(a.startswith("z", 1, 5)) # False
str.endswith(n)
- 判断字符串是否以参数n结尾,输出为布尔值
- 还可以判断切片的结尾
a = "zxdznb" print(a.endswith("b")) # True print(a.endswith("x")) # False print(a.endswith("n", 1, 5)) # True print(a.endswith("z", 1, 5)) # False
str.count(n)
- 计算参数n在字符串中出现的次数
- 还可以切片计算变量n出现的次数
a = "zxdznb" print(a.count("z")) # 2 print(a.count("z", 0, 3)) # 1
str.strip()
- 默认去掉字符串两端空格、换行符(\n)、制表