Python基础数据类型详解(二)

主要内容:

1. 格式化输出

2. 简单运算符

3. 编码初识(ascii,unicode,utf-8,gbk等历史)以及bytes

4. 基础数据类型bool

5. 基础数据类型str

6. 基础数据类型list

7. 基础数据类型tuple

8. 基础数据类型dict

9. 基本数据类型Set

     10.深浅copy

11. 知识点补充

12. 文件操作

四. 基础数据类型bool

bool我们已经使用了很长时间了. 它主要的作用就是用来做条件判断, 所以bool类型的变量没有什么操作 这里要给大家聊的是bool类型和其他数据类型之间的转换问题

    转换问题: 

        str => int       int(str)

        int => str       str(int)

        int => bool    bool(int).  0是False 非0是True

        bool=>int      int(bool)   True是1, False是0

        str => bool    bool(str)  空字符串是False,  不空是True

        bool => str    str(bool)  把bool值转换成相应的"值"

 

# 各种数据类型转化成bool
print(bool(0))  # False
print(bool(1))  # True
print(bool(-1))  # True

print(bool(""))  # False
print(bool(" "))  # True
print(bool("哈哈"))  # True

print(bool([]))   # False 
print(bool([1,2,3]))    # True
print(bool({}))  # False

while 1:
    pass

结论: 所有表示空的东西都是False

基本数据类型之间的转化, 想变成谁, 就用谁把数据括起来

五. 基础数据类型str

把字符连成串. 在python中用', ", ''', """引起来的内容被称为字符串.

字符串: 把多个字符连成串

5.1 切片和索引

5.1.1 索引.

索引就是下标, 切记, 下标从0开始

#     0123456 7 8
s1 = "python最牛B"
print(s1[0])    # 获取第0个
print(s1[1])
print(s1[2])
print(s1[3])
print(s1[4])
print(s1[5])
print(s1[6])
print(s1[7])
print(s1[8])
# print(s1[9])    # 没有9, 越界了. 会报错
print(s1[-1])   # -1 表示倒数.
print(s1[-2])   # 倒数第二个

5.1.2 切片

我们可以使用下标来截取部分字符串的内容

    基本语法: str[start: end]

    规则: 顾头不顾尾, 从start开始截取. 截取到end位置. 但不包括end

s2 = "python最牛B"
print(s2[0:3])  # 从0获取到3. 不包含3. 结果: pyt
print(s2[6:8])  # 结果 最牛
print(s2[6:9])  # 最大是8. 但根据顾头不顾腚, 想要取到8必须给9
print(s2[6:10])  # 如果右边已经过了最大值. 相当于获取到最后
print(s2[4:])   # 如果想获取到最后. 那么最后一个值可以不给.

print(s2[-1:-5])    # 从-1 获取到 -5 这样是获取不到任何结果的. 从-1向右数. 你怎么数也数不到-5
print(s2[-5:-1])    # 牛b, 取到数据了. 但是. 顾头不顾腚. 怎么取最后一个呢?
print(s2[-5:])  # 什么都不写就是最后了
print(s2[:-1])  # 这个是取到倒数第一个
print(s2[:])    # 原样输出

    

 跳着截取

# 跳着取, 步长
print(s2[1:5:2])    # 从第一个开始取, 取到第5个,每2个取1个, 结果: yh, 分析: 1:5=> ytho => yh
print(s2[:5:2])     # 从头开始到第五个. 每两个取一个
print(s2[4::2])     # 从4开始取到最后. 每两个取一个
print(s2[-5::2])    # 从-5取到最后.每两个取一个
print(s2[-1:-5])    # -1:-5什么都没有. 因为是从左往右获取的.
print(s2[-1:-5:-1])  # 步长是-1. 这时就从右往左取值了
print(s2[-5::-3])   # 从倒数第5个开始. 到最开始. 每3个取一个, 结果oy

步长: 如果是整数, 则从左往右取. 如果是负数. 则从右往左取. 默认是1

切片完整语法:

       str[start:end:step]

    start: 起始位置

    end: 结束位置

    step: 步长

5.2 字符串的相关操作方法(记结论)

切记, 字符串是不可变的对象, 所以任何操作对原字符串是不会有任何影响的

1. 大小写转来转去

s1.capitalize()
print(s1)   # 输出发现并没有任何的变化. 因为这里的字符串本身是不会发生改变的. 需要我们重新获取

ret1 = s1.capitalize()
print(ret1)

# 大小写的转换
ret = s1.lower()    # 全部转换成小写
print(ret)

ret = s1.upper()     # 全部转换成大写
print(ret)

# 应用, 校验用户输入的验证码是否合法
verify_code = "abDe"
user_verify_code = input("请输入验证码:")
if verify_code.upper() == user_verify_code.upper():
    print("验证成功")
else:
    print("验证失败")

ret = s1.swapcase()     # 大小写互相转换
print(ret)

# 不常用
ret = s1.casefold()     # 转换成小写, 和lower的区别: lower()对某些字符支持不够好. casefold()对所有字母都有效. 比如东欧的一些字母
print(ret)

s2 = "БBß"  # 俄美德
print(s2)
print(s2.lower())
print(s2.casefold())

# 每个被特殊字符隔开的字母首字母大写
s3 = "sylar chuchu,baoheizi*展昭_麻花藤"
ret = s3.title()       # Sylar chuchu,baoheizi*展昭_麻花藤
print(ret)

# 中文也算是特殊字符
s4 = "sylar最喜欢heihei_bao"     # Sylar最喜欢Heihei_Bao
print(s4.title())

2. 切来切去 

# 居中
s5 = "周杰伦"
ret = s5.center(10, "*")   # 拉长成10, 把原字符串放中间.其余位置补*
print(ret)


# 去空格
s7 = "   heihei bao   haha "
ret = s7.strip()    # 去掉左右两端的空格
print(ret)

ret = s7.lstrip()   # 去掉左边空格
print(ret)

ret = s7.rstrip()   # 去掉右边空格
print(ret)

# 应用, 模拟用户登录. 忽略用户输入的空格
username = input("请输入用户名:").strip()
password = input("请输入密码: ").strip()
if username == 'ren' and password == '123':
    print("登录成功")
else:
    print("登录失败")

s7 = "abcdefgabc"
print(s7.strip("abc"))  # defg 也可以指定去掉的元素,


# 字符串替换
s8 = "bao_heihei_nezha_huhu"
ret = s8.replace('bao', '包')    # 把bao替换成包
print(s8)   # bao_heihei_nezha_huhu 切记, 字符串是不可变对象. 所有操作都是产生新字符串返回
print(ret)  # 包_heihei_nezha_huhu

ret = s8.replace('i', 'SB', 1)     # 把i替换成SB, 替换1个
print(ret)  # bao_heSBhei_nezha_huhu

# 字符串切割
s9 = "bao_heihei_nezha_huhu"
lst = s9.split("_")     # 字符串切割, 根据_进行切割
print(lst)

lst = ['周杰伦', '王力宏', '麻花藤']
s = "_".join(lst)
print(s)  # 周杰伦_王力宏_麻花藤

s10 = """诗人
学者
感叹号
渣渣"""
print(s10.split("\n"))  # 用\n切割

# 坑
s11 = "哈哈包黑黑呵呵包黑黑吼吼包黑黑"
lst = s11.split("银王")   # ['', '哈哈', '呵呵', '吼吼', ''] 如果切割符在左右两端. 那么一定会出现空字符串.深坑请留意
print(lst)

3. 格式化输出(了解)

# 格式化输出
s12 = "我叫%s, 今年%d岁了, 我喜欢%s" % ('sylar', 18, '周杰伦')  # 之前的写法
print(s12)
s12 = "我叫{}, 今年{}岁了, 我喜欢{}".format("周杰伦", 28, "周润发")    # 按位置格式化
print(s12)
s12 = "我叫{0}, 今年{2}岁了, 我喜欢{1}".format("周杰伦", "周润发", 28)     # 指定位置
print(s12)
s12 = "我叫{name}, 今年{age}岁了, 我喜欢{singer}".format(name="周杰伦", singer="周润发", age=28)     # 指定关键字
print(s12)

4. 查找

s13 = "我叫sylar, 我喜欢python, java, c等编程语言."
ret1 = s13.startswith("sylar")   # 判断是否以sylar开头
print(ret1)
ret2 = s13.startswith("我叫sylar")    # 判断是否以我叫sylar开头
print(ret2)

ret3 = s13.endswith("语言")   # 是否以'语言'结尾
print(ret3)
ret4 = s13.endswith("语言.")  # 是否以'语言.'结尾
print(ret4)

ret7 = s13.count("a")   # 查找"a"出现的次数
print(ret7)

ret5 = s13.find("sylar")    # 查找'sylar'出现的位置
print(ret5)

ret6 = s13.find("tory")     # 查找'tory'的位置, 如果没有返回-1
print(ret6)

ret7 = s13.find("a", 8, 22)  # 切片找
print(ret7)

ret8 = s13.index("sylar")   # 求索引位置. 注意. 如果找不到索引. 程序会报错
print(ret8)

5. 条件判断

# 条件判断
s14 = "123.16"
s15 = "abc"
s16 = "_abc!@"
# 是否由数字组成
print(s14.isdigit())
print(s15.isdigit())
print(s16.isdigit())

# 是否由数字组成, 不包括小数点
print(s14.isdigit())
print(s15.isdecimal())
print(s16.isnumeric())  # 这个比较牛B. 中文都识别.

# 练习. 用算法判断某一个字符串是否是小数
s17 = "-123.12"
s17 = s17.replace("-", "")  # 替换掉负号
if s17.isdigit():
    print("是整数")
else:
    if s17.count(".") == 1 and not s17.startswith(".") and not s17.endswith("."):
        print("是小数")
    else:
        print("不是小数")

6. 计算字符串的长度

s18 = "我是你的眼, 我也是a"
ret = len(s18)  # 计算字符串的长度
print(ret)

注意: len()是python的内置函数. 所以访问方式也不一样. 你就记着len()和print()一样就行了

7. 迭代

我们可以使用for循环来便利(获取)字符串中的每一个字符

    语法:

        for 变量 in 可迭代对象:

            pass

        可迭代对象: 可以一个一个往外取值的对象

s19 = "大家好, 我是VUE, 前端的小朋友们. 你们好么?"
# 用while循环
index = 0
while index < len(s19):
    print(s19[index])   # 利用索引切片来完成字符的查找
    index = index + 1

# for循环, 把s19中的每一个字符拿出来赋值给前面的c
for c in s19:
    print(c)

关于in

'''
    in有两种用法:
        1. 在for中. 是把每一个元素获取到赋值给前面的变量.
        2. 不在for中. 判断xxx是否出现在str中.
'''
print('VUE' in s19)
# 练习, 计算在字符串"I am sylar, I'm 5 years old, I have 2 dogs!"中出现了多少个数字
s20 = "I am sylar, I'm 14 years old, I have 2 dogs!"
count = 0
for c in s20:
    if c.isdigit():
        count = count + 1
print(count)

结论:

字符串索引和切片

索引从0开始

切片:

s[start: end: step]

start: 起始位置

end: 结束位置, 取不到

step: 步长.

1. upper(), 把字符串中所有的字母都变成大写. 主要使用在忽略大小写的时候用

2. strip(), 默认去掉左右两端的空白, 包括\n, \t, 空格.

3. replace(), 字符串替换

4. split(), 字符串切割. 得到字符串列表

5. join(), 把列表重新组合成字符串

6. startswith(), 判断是否以xxxx开头

7. find(), 查找xxxx

8. count(), 数数, 查看xxx出现的次数

9. isdigit(), 判断该字符串是否是由数字组成

10. len(), 字符串长度, 它是一个内置函数, 直接len(数据)即可

for 变量 in 可迭代对象:

循环体

  • 20
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值