目录
1. 整数 (int)
1.1 定义
number = 1
age = 18
1.2 独有功能
v1 = 5
result = v1.bit_length() # 调用int的独有功能获取v1的二进制有多少个位成
print(result)
1.3 公共功能
- 加减乘除
1.4 转换
- 只有布尔、字符串和浮点数可以转换整形,并且字符串转换有限制
# 布尔值转整形
v1 = int(True) # 1
v2 = int(False) # 0
# 字符串转整形
v1 = int("186") # 186 默认转换是十进制
v2 = int("0b1001",base=2) # 9 (把字符串看成二进制的值,再转换为十进制的整数 0b表示二进制)
v3 = int("0o144",base=8) # 100 (把字符串看成八进制的值,再转换为十进制的整数 0o表示八进制)
v4 = int("0x59",base=16) # 89 (把字符串看成十六进制的值,再转换为十进制的整数 0x表示十六进制)
# 浮点数转整形
v1 = int(8.7) # 8
1.5 其他
1.5.1 长整型
- python3:整形
- int范围无限制
- python2:整形、长整型
- python2 int范围:-9223372036854775808~-9223372036854775807
- long:python2整数值超过int自动转换为long类型(无限制)
1.5.2 地板除
- 地板除只能用于整数运算
- 地板除会向下取整
print(7 // 3) # 2
print(8 // 3) # 2
1.5.3 其它
- python3:
v1 = 9/2 # 4.5
- python2:
from __future__ import division
v1 = 9/2 # 只保留整数4 # 可引入from __futrue__ import divison解决
print(v1)
2. 布尔 (bool)
2.1 定义
v1 = False
v2 = True
2.2 独有功能
无
2.3 公共功能
无
2.4 转换
- 任何数据类型都能转换为布尔类型
- 整数0、空字符串、空列表、空元组、空看字典... 转为布尔值为False,其它都为True
2.5 其他
做条件自动转换
- 如果在
if
、while
条件后面写一个值当作条件时会默认转换为布尔类型,再做条件判断
if 1 > 2: # 自动转换为False
pass
if 9: # 自动转换为True
pass
3. 字符串 (str)
方法 | 描述 | 重要程度 |
---|---|---|
str.capitalize | 将字符串的一个字符转换为大写 | ** |
str.center | 返回指定宽度的居中的字符串 | *** |
str.count | 返回指定字符在字符串内出现的次数 | **** |
str.endswith | 检查字符串是否以指定字符结尾 | *** |
str.startswith | 检查字符串是否在指定字符开始位置 | *** |
str.find | 判断字符是否在字符串中 | *** |
str.index | 判断字符是否在字符串中 | ** |
str.join | 以指定分割符,将seq中所有元素合并为一个新的字符串 | ***** |
str.lower | 将字符串内的所有大写字符转为小写 | *** |
str.upper | 将字符串内的所有小写字符转为大写 | *** |
str.replace | 将字符串内指定的old字符转换为new并返回为新的字符串 | ***** |
str.split | 以指定字符为分隔符分隔字符串,并返回字符串列表 | ***** |
str.isdigit | 检测字符串是否由数字组成 | *** |
bytes.decode | 指定解码方式给bytes对象解码 | ***** |
str.encode | 指定编码方式给str编码 | ***** |
str.expandtabs | 转换字符串中的tab符号为空格,tab符号默认的空格数是8 | * |
str.isalnum | 检测字符串是否只有字符和数字组成 | ** |
str.isalpha | 检测字符串是否只有字母组成 | *** |
str.islower | 检测字符串是否只有小写字母组成 | *** |
str.isupper | 检测字符串是否只有小写字母组成 | *** |
str.isnumeric | 检测字符串是否只包含数字字符 | * |
str.isspace | 检测字符串是否只有空格组成 | * |
str.title | 返回字符串中首字母大写其余字母小写形式 | ** |
str.istitle | 如果字符串是首字母大写其余字母小写形式的则返回 True,否则返回 False | * |
str.isdecimal | 检查字符串是否只包含十进制字符 | * |
str.ljust | 返回原字符串的左对齐 | * |
str.rjust | 返回原字符串的右对齐 | * |
str.lstrip | 删除字符串开始的指定字符 | ** |
str.rstrip | 删除字符串末尾的指定字符 | ** |
str.rfind | 如find()方法,但从右侧开始查找 | * |
str.rindex | 如index()方法,但从右侧开始查找 | * |
str.splitlines | 以列表的形式按照换行符返回分割后的字符串 | * |
str.maketrans | 创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标 | ** |
str.translate | 根据字符串给出的表转换字符串的字符,要过滤掉的字符放到delete参数中 | *** |
str.zfill | 返回指定长度的字符串,原字符串右对齐,前面补0 | ***** |
str.swapcase | 将字符串中的大写字符转换位小写,小写字母转换为大写 | ** |
3.1 定义
v1 = "中国"
v2 = '北京'
v3 = str("xxx")
v4 = """三个引号可以支持多行/换行表示一个字符串,
其他的都只能在一行中表示一个字符串
"""
3.2 独有功能
- 判断字符串是否以xx开头,或以xx结尾
startswith()
、endswith()
text = '听妈妈的话,别让她受伤'
if text.startswith('听') and text.endswith('受伤'):
print('周杰伦-听妈妈的话')
else:
print('其他')
- 判断一个字符串是否为十进制数,得到一个布尔值
isdecimal
data = '123456'
result = data.isdecimal()
print(result)
- 去除字符串两边的空格、换行符、制表符,得到一个新的字符串
strip
去除字符串左边/右边指定的内容lstrip
、rstrip
# 去除字符串两边的空格、换行符、制表符
code = """
A1B2
"""
data = code.strip() # "A1B2"
# 去除字符串两边指定的内容
code = "A1B2"
data = code.strip("A")
print(data) # "1B2"
- 将字符串全部变成大/小写
upper()
、lower()
msg = "验证码: A1b2"
upper_msg = msg.upper() # 验证码: A1B2
lower_msg = msg.lower() # 验证码: a1b2
- 字符串内容替换,得到新的字符串
replace()
music = '听妈妈的话.mp3'
video = music.replace('mp3', 'mp4') # 听妈妈的话.mp4
- 字符串切割,得到一个列表
split()
、rsplit()
msg = "a|b|c|d"
msg_list = msg.split('|') # 以"|"为分割从[0]开始切 # ['a', 'b', 'c', 'd']
msg_list2 = msg.split("|",2) # 切[0-1] # ['a', 'b', 'c|d']
msg_list3 = msg.rsplit("|",2) # 倒序(从右侧开始切)[0-1] # ['a|b', 'c', 'd']
file_path = "/tmp/file/file1.txt"
base_dir, file_name = file_path.rsplit('/', 1) # 倒序(从右侧开始切)[0]
- 字符串拼接,得到新的字符串
join()
- join拼接,列表中每个元素必须都是字符串类型
data_list = ['音乐', '听妈妈的话', '周杰伦']
# 使用-拼接,也可以什么都不加,也可以用其它的
print("-".join(data_list)) # 音乐-听妈妈的话-周杰伦
- 格式化字符串
format()
%s
name='shaochong'
print("my name is %s"%name)
format
print('姓名:{0} 年龄:{1}'.format('邵冲', 20))
print("姓名:{name} 年龄:{age}".format(name="邵冲", age=20))
print("姓名:{} 年龄:{}".format(*('邵冲', 20)))
print("姓名:{name} 年龄:{age}".format(**{'name': "邵冲", 'age': 20}))
tpl = "姓名:{} 年龄:{}"
print(tpl.format("邵冲", 20))
print(tpl.format("邵冲冲", 18))
f-string
(python3.6版本以后支持)
age = 20
name = '邵冲'
print(f'姓名:{name} 年龄:{age}')
- 字符串转换为字节
encode()
、字节转字符串decode()
data = "中国" # 默认unicode,字符串类型
v1 = data.encode("utf-8") # utf-8,字节类型
v2 = data.encode("gbk") # gbk,字节类型
print(v1, v2)
s1 = v1.decode("utf-8") # utf-8,转换字节为字符串类型
s2 = v2.decode("gbk") # gbk,转换字节为字符串类型
print(s1, s2)
- 将字符串内容居中、居左、居右展示并填充
center()
、ljust()
、rjust()
v1 = "中国"
data1 = v1.center(20,"-") # "---------中国---------" 将字符串居中,并使用-填充
data2 = v1.ljust(20,"-") # "中国------------------" 将字符串居左,并使用-填充
data3 = v1.rjust(20,"-") # "------------------中国" 将字符串居右,并使用-填充
- 填充0
zfill()
# 应用场景: 处理二进制数据
data = "101"
v1 = data.zfill(8) # 00000101
-
str.count(obj, start=0, end=len(str))
返回字符串中,指定索引范围内的指定元素出现的次数,如果指定字符不在字符串中,则返回0。开始位置默认为0,结束位置为字符串结束的位置
text = 'https://www.cnblogs.com'
print(text.count('w')) # 3
print(text.count('w', 1, 10)) # 2
print(text.count('1')) # 0
3.2.1 练习题
- 写代码实现判断用户输入的值是否以"he"开头,以"ld"结尾,如果是则输出"是",否则输出"不是"
data = input("请输入内容:")
if data.startswith("he") and data.endswith("ld"):
print("是")
else:
print("不是")
# 三元运算
data = input("请输入内容:")
result = "是" if data.startswith("he") and data.endswith("ld") else "不是"
print(result)
- 将 name 变量对应的值中的所有的"i"替换为"p"并输出结果
name = "lython"
result = name.replace("l","p")
print(result)
- 写代码实现对用户输入值判断是否为整数,如果是则转换为整数并输出,否则直接输出"请输入数字"
data = input("请输入内容: ")
if data.isdecimal():
data = int(data)
print(data)
else:
print("请输入数字")
- 对用户输入的数据使用"+"切割,判断输入的值是否都是数字,并输出哪些是数字哪些不是
提示:用户输入的格式必须是+连接的格式,如a+1
data = input("请输入内容: ")
result_list = data.split("+")
for item in result_list:
if item.isdecimal():
print(f"{item}是整数")
else:
print(f"{item}不是整数")
- 写代码实现一个整数加法计算器(任意个整数相加)
需求:提示用户输入5+9或5 +9或5 + 9,计算两个值的和,输入不是整数提示并退出
提示:先分割去除空白,再转换为整数,再相加
count = 0
data = input("请输入内容: ")
result_list = data.split("+")
valid_input = True
for item in result_list:
if not item.strip().isdecimal():
print(f"{item.strip()} 不是数字")
valid_input = False
break
else:
num = int(item.strip())
count += num
if valid_input:
print(count)
- 补充代码实现用户认证,需求:提示用户输入手机号、验证码,全部通过后登陆成功(大小写不敏感)
import random
import string
random_str = string.ascii_letters + string.digits
code = ''.join(random.sample(random_str, 4))
msg = f"欢迎登陆,您的验证码为:{code},手机号为:18686900863"
print(msg)
phone = input("请输入手机号: ")
user_code = input("请输入验证码: ")
if user_code.upper() == code.upper() and phone == "18686900863":
print("登录成功")
else:
print("登录失败")
- 补充代码实现数据拼接
data_list = []
while True:
city = input("请输入城市(Q/q退出): ")
if city.upper() == "Q":
break
# 把输入的值添加到 data_list中,如: data_list = ["上海","北京"]
data_list.append(city)
# 将输入的所有通过符号"、"拼接起来并输出
# 补充代码
result = "、".join(data_list) # 将列表切割为字符串并用"、"拼接
print(result)
3.3 公共功能
- 相加:字符串 + 字符串
v1 = "姬霓" + "太美"
- 相乘: 字符串 * 整数
v1 = "姬霓太美" * 3
- 长度
v1 = "姬霓" + "太美"
print(len(v1))
- 获取字符串中的字符、索引
msg = "我爱你china"
# 0 1 2 3 4 5 6 7
# ... -3 -2 -1
print(msg[0]) # 我
print(msg[1]) # 爱
print(msg[-1]) # a
print(msg[-2]) # n
- 获取字符串中的子序列、切片
# 口诀: 前取后不取
msg = "我爱你china"
print(msg[0:2]) # 我爱
print(msg[3:7]) # chin
print(msg[3:]) # china
print(msg[:5]) # 我爱你ch
print(msg[4:-1]) # hin
print(msg[4:-2]) # hi
print(msg[4:len(msg)]) # hina
- 步长,跳着去获取字符串的内容
v1 = "黄河之水天上来,奔流到海不复回"
print(v1[0:5:2]) # 黄之天 [前两个值表示一个区间范围,最后一个值表示步长]
print(v1[:9:2]) # 黄之天来奔 [区间范围的前面不写表示起始范围从0开始]
print(v1[2::3]) # 之上奔海回 [区间范围的后面不写表示结束范围为最后]
print(v1[::2]) # 黄之天来奔到不回 [区间范围前后都不写表示从开头取步长至结尾]
print(v1[8:1:-1]) # 奔,来上天水之 [8-1,倒序]
- 循环
# while
msg = "我爱你china"
index = 0
while index < len(msg):
value = msg[index]
print(value)
index += 1
3.4 转换
# 整形转字符串
num = 987
data = str(num) # "987"
# 字符串计算公式得结果
data = '1+2'
print(eval(data)) # 3
# 使用 .join 列表转字符串
num_list = ['a','b','c','d']
num = ','.join(num_list) # "a,b,c,d"
3.5 其他
- 字符串只读,不可修改
name = "邵冲"
v1 = name[1] # 实际是读取name截取并赋值给新的变量,并不能修改原字符串
4. 练习题
- 进制转换
v1 = 197 # 将整数转换为二进制(字符串类型)
# print(bin(v1))
v2 = "0b11000101" # 将二进制转换成十进制(整形)
# print(int(v2,base=2))
v3 = "11000101" # 将二进制转换成十进制(整形)
# print(int(v3,base=2))
- 将
v1=123
和v2=456
转换为二进制,并将其二进制中的前缀0b去掉,再补足为2个字节(16位),然后将两个二进制拼接起来,最终再转换为转换为十进制整形
v1 = 123
v2 = 456
result = bin(v1).strip('0b').zfill(16) + bin(v2)[2:].zfill(16)
print(int(result,base=2))
- 用户输入一段文本,实现将文本中的词
error
、failed
替换为success
,最后输出替换后的文本
text = input("请输入内容:")
replace_list = ['error', 'failed']
for item in replace_list:
if item in text:
text = text.replace(item, 'success')
print(text)
- 通过变量
name = "h ell World "
完成如下操作
# 移除变量对应的值两边的空格,并输出结果
print(name.strip())
# 判断变量是否以 `h` 开头,并输出结果(用切片或startswith实现)
if (name.startswith("h")) or name[0:1] == "h":
print(name)
# 判断变量是否以 `ld` 结尾,并输出结果 (用切片或endswith实现)
if (name.endswith("h")) or name[-2:] == "ld":
print(name)
# 将变量对应值中所有的 `l` 替换 为 `p` ,并输出结果
print(name.replace("l","p"))
# 将变量对应的值根据所有的 `l` 分割,并输出结果
print(name.split("l"))
# 将变量对应的值根据第一个 `l` 分割,并输出结果
print(name.split("l",1))
# 将变量的值变大写,并输出结果
print(name.upper())
# 将变量的值小写,并输出结果
print(name.lower())
- 实现字符串的翻转
msg = "黄河之水天上来,奔流到海不复回"
print(msg[::-1])
- 使用for和range实现对字符串
msg = '黄河之水天上来,奔流到海不复回'
的倒序输出
msg = "黄河之水天上来,奔流到海不复回"
for index in range(len(msg) - 1, -1, -1):
print(msg[index])
- 用户输入一段文本,计算文本中
"a"
出现的次数,并输出结果
text = input("请输入一段文本:")
count = 0
for item in text:
if item == "a":
count += 1
print(count)
# 推导式
# count = [item for item in text if item == 'a'].count('a')
# count = len([item for item in text if item == 'a'])
- 获取用户两次输入的内容,并提取其中的数字,然后实现数字的相加
- 提示:转换为整形再相加
- 要求:定义两个用户输入变量,并分别将变量的数字找到分别拼接出来,然后转整形再相加
# 字符串方式
num1 = input("请输入:")
num2 = input("请输入:")
data1 = ""
data2 = ""
for item in num1:
if item.isdecimal():
data1 += item
for item in num2:
if item.isdecimal():
data2 += item
result = int(data1) + int(data2)
print(result)
# 列表方式
num1 = input("请输入:")
num2 = input("请输入:")
count = 0
num_list = [num1, num2]
for item in num_list:
if item.isdecimal():
count += int(item)
print(count)
标签:msg,v1,python,数据类型,字符串,str,print,data,布尔
From: https://www.cnblogs.com/ican97/p/17777458.html