python基础-数据类型(字符串-布尔-整数)

发布时间 2023-10-20 16:44:24作者: 龙泉寺老方丈

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 其他

做条件自动转换

  • 如果在ifwhile条件后面写一个值当作条件时会默认转换为布尔类型,再做条件判断
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 独有功能

  1. 判断字符串是否以xx开头,或以xx结尾  startswith()endswith()
text = '听妈妈的话,别让她受伤'
if text.startswith('听') and text.endswith('受伤'):
    print('周杰伦-听妈妈的话')
else:
    print('其他')
  1. 判断一个字符串是否为十进制数,得到一个布尔值 isdecimal
data = '123456'
result = data.isdecimal()
print(result)
  1. 去除字符串两边的空格、换行符、制表符,得到一个新的字符串 strip
    去除字符串左边/右边指定的内容 lstriprstrip
# 去除字符串两边的空格、换行符、制表符
code = """
  A1B2 

"""
data = code.strip()  # "A1B2"
    

# 去除字符串两边指定的内容
code = "A1B2"
data = code.strip("A")
print(data)   # "1B2"
  1. 将字符串全部变成大/小写 upper()lower()
msg = "验证码: A1b2"

upper_msg = msg.upper()    # 验证码: A1B2
lower_msg = msg.lower()	   # 验证码: a1b2
  1. 字符串内容替换,得到新的字符串 replace()
music = '听妈妈的话.mp3'
video = music.replace('mp3', 'mp4') # 听妈妈的话.mp4
  1. 字符串切割,得到一个列表 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] 
  1. 字符串拼接,得到新的字符串 join()
  • join拼接,列表中每个元素必须都是字符串类型
data_list = ['音乐', '听妈妈的话', '周杰伦']

# 使用-拼接,也可以什么都不加,也可以用其它的
print("-".join(data_list))	# 音乐-听妈妈的话-周杰伦
  1. 格式化字符串 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}')
  1. 字符串转换为字节 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)
  1. 将字符串内容居中、居左、居右展示并填充 center()ljust()rjust()
v1 = "中国"
data1 = v1.center(20,"-")  #  "---------中国---------"   将字符串居中,并使用-填充
data2 = v1.ljust(20,"-")   #  "中国------------------"   将字符串居左,并使用-填充
data3 = v1.rjust(20,"-")   #  "------------------中国"   将字符串居右,并使用-填充
  1. 填充0 zfill()
# 应用场景: 处理二进制数据
data = "101"
v1 = data.zfill(8)   # 00000101
  1. 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 练习题

  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)

  1. 将 name 变量对应的值中的所有的"i"替换为"p"并输出结果
name = "lython"
result = name.replace("l","p")
print(result)
  1. 写代码实现对用户输入值判断是否为整数,如果是则转换为整数并输出,否则直接输出"请输入数字"
data = input("请输入内容: ")
if data.isdecimal():
    data = int(data)
    print(data)
else:
    print("请输入数字")
  1. 对用户输入的数据使用"+"切割,判断输入的值是否都是数字,并输出哪些是数字哪些不是
    提示:用户输入的格式必须是+连接的格式,如a+1
data = input("请输入内容: ")
result_list = data.split("+")
for item in result_list:
    if item.isdecimal():
        print(f"{item}是整数")
    else:
        print(f"{item}不是整数")
  1. 写代码实现一个整数加法计算器(任意个整数相加)
    需求:提示用户输入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)
  1. 补充代码实现用户认证,需求:提示用户输入手机号、验证码,全部通过后登陆成功(大小写不敏感)
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("登录失败")
  1. 补充代码实现数据拼接
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 公共功能

  1. 相加:字符串 + 字符串
v1 = "姬霓" + "太美"
  1. 相乘: 字符串 * 整数
v1 = "姬霓太美" * 3
  1. 长度
v1 = "姬霓" + "太美"
print(len(v1))
  1. 获取字符串中的字符、索引
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
  1. 获取字符串中的子序列、切片
# 口诀: 前取后不取
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
  1. 步长,跳着去获取字符串的内容
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,倒序]
  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. 练习题

  1. 进制转换
v1 = 197              # 将整数转换为二进制(字符串类型)
# print(bin(v1))

v2 = "0b11000101"     # 将二进制转换成十进制(整形)
# print(int(v2,base=2))

v3 = "11000101"       # 将二进制转换成十进制(整形)
# print(int(v3,base=2))
  1. v1=123v2=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))
  1. 用户输入一段文本,实现将文本中的词 errorfailed 替换为 success,最后输出替换后的文本
text = input("请输入内容:")
replace_list = ['error', 'failed']
for item in replace_list:
    if item in text:
        text = text.replace(item, 'success')
print(text)
  1. 通过变量 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())
  1. 实现字符串的翻转
msg = "黄河之水天上来,奔流到海不复回"
print(msg[::-1])
  1. 使用for和range实现对字符串 msg = '黄河之水天上来,奔流到海不复回' 的倒序输出
msg = "黄河之水天上来,奔流到海不复回"
for index in range(len(msg) - 1, -1, -1):
    print(msg[index])
  1. 用户输入一段文本,计算文本中 "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'])
  1. 获取用户两次输入的内容,并提取其中的数字,然后实现数字的相加
  • 提示:转换为整形再相加
  • 要求:定义两个用户输入变量,并分别将变量的数字找到分别拼接出来,然后转整形再相加
# 字符串方式
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)