Python基础编程入门教程第四日指南

目录

Python基础编程 day04

1. 字符串的定义(重要)

1.1 引号的使用

1.2 多种引号的嵌套

2. 字符串下标(重要)

正数索引

负数索引

3. 字符串的切片以及省略格式(重要)

3.1 字符串的切片

正数步长

负数步长

3.2 字符串切片的省略

正数步长:

负数步长(不可省略步长):

4. 字符串的方法(重要)

4.1 find()

4.2 index()

4.3 replace

4.4 split()

5. 字符串方法的补充

5.1 count

5.2 len

5.3 strip

5.4 join  

5.5 title

5.6 capitalize

5.7 字符串的判断

6. 字符串的应用

7. 列表的定义(重要)

8. 列表的遍历(重要)

for 循环遍历

 while 循环遍历

9. 列表的操作方式(重要)

9.1 增

9.1.1  append

9.1.2  extend

9.1.3  insert

9.2 查

9.2.1  使用索引值查询元素

9.2.2  index

9.2.3  count

9.2.4  in   not in  


                                Python基础编程 day04

1. 字符串的定义(重要)

字符串就是多个字符的组合,将多个字符放入一个容器中就形成了一个字符串, 字符串类型是一个容器类型,可以迭代

1.1 引号的使用

单引号' ', 双引号" ", 三引号''' '''/""" """内部数据都是字符串类型,可直接使用

注意1:  在python中单双引号不敏感,在开发中使用字符串单引号或双引号都可以,但要保证一个项目中要统一,单双引号要成对出现,不可混用. 例如:'大学"                                                            

 注意2:  三对引号中存放的数据,无需使用\n进行换行可以直接使用回车,并且换行效果可以打印出来

1.2 多种引号的嵌套

案例一: 打印一个I'm Tom
法一: print('I\'m Tom')  在数据内部的' 前增加 \ 防止其转义                                                
法二: print("I'm Tom")

案例二: 打印一个 鲁迅说:'I'm a 周树人'
print(' 鲁迅说:\'I\'m a 周树人\' ')

需求: 打印一个 鲁迅说:"I'm a 周树人"
无论使用单引号还是双引号都出错,用三引号
print(''' 鲁迅说:"I'm a 周树人" ''')

案例三: '''鲁迅说:"I'm a 周树人"'''
print(""" '''鲁迅说:"I'm a 周树人"''' """)

2. 字符串下标(重要)

字符串的下标:
    所谓的下标就是指数字的元素的索引(编号),每一个索引(标号)对应一个唯一的元素
    所有的下标均为整数,且连续,不可跳跃

    格式:
        字符串变量[索引] 根据索引获取字符串中指定位置的元素

正数索引

注意: 正数索引从0开始,从左至右依次递增,连续不可跳跃,且每个元素对应唯一索引
 无论是点还是空格都是一个单独的元素,占用一个索引值
 如果使用的索引在字符串中不存在就会报错

负数索引

注意:  负数索引从-1开始从右至左依次递减
其他的同正数索引一样

注意:
1. 在字符串中左侧数据的索引一定小于右侧数据的索引
2. 我们一般使用时都是使用正数索引,当想要获取末尾数据时使用负数索引

3. 字符串的切片以及省略格式(重要)

3.1 字符串的切片

切片: 按照规则获取字符串中的一部分元素的方法叫做切片
切片格式:[起始位置: 结束位置: 步长]
起始位置: 切片开始位置的下标[包含]
结束位置: 切片结束位置的下标[不包含]
步长: 获取数据的间隔(后一个索引减去前一个索引)

正数步长

案例: str1 = 'abcdef'

要求: 获取abc
print(str1[0:3:1])  # abc 从下标为0的位置开始截取,到下标为3的位置终止,不包含3,一次获取每个元素
print(str1[-7:-4:1])  # abc  切片可以使用负数下标
注: 如果切片的范围超出索引范围不会报错,如果切片范围超出则只保留能够获取的数据,如果切片范围不存在,则返回空字符串

要求: 获取bdf
print(str1[1:6:2])  # bdf 因为我们要包含最后一个元素,所以我们使用最后一个元素的下标加1作为结束索引
注: 不会改变,切片会产生新的字符串,原字符串不改变

负数步长

注: 当步长为负数时,我们获取数据的顺序不再是从左至右而是从右至左
要求: 获取edc
print(str1[2:5:-1])  # 空字符串 因为起始位置是2,结束位置是5,步长是-1时从右至左依次取值该区间没有任何数据
print(str1[4:1:-1])  # edc

 注意:
我们开发中一般都使用正数索引,负数索引了解即可. 如果逆向取值,可以先正向取然后逆转容器元素
负数步长最常用的应用场景: 进行容器逆转:[::-1]
str3 = str1[::-1]
print(str3)  # fedcba 字符串反转

3.2 字符串切片的省略

正数步长:

可以省略起始位置: 省略后默认起始位置从字符串开始位置进行切片
可以省略终止位置: 省略后默认到字符串结束位置结束切片
可以省略步长: 省略后默认步长为1, 如果省略步长可以省略步长前的冒号(:)

案例:  str1 = '大江东去浪淘尽'
要求: 获取 大江东去
print(str1[0:4:1])  # 大江东去
可以省略起始位置
print(str1[:4:1])  # 大江东去
可以省略步长
print(str1[:4:])  # 大江东去
省略步长时,也可以省略:
print(str1[:4])  # 大江东去
获取整个字符串全部内容
print(str1[0:7:1])  # 大江东去浪淘尽
# 省略起始,终止,步长
print(str1[:])  # 大江东去浪淘尽                        

注: 最后一个冒号不可省略,这种写法相当于复制了一个字符串

负数步长(不可省略步长):

可以省略起始位置:省略后默认从字符串结束位置进行切片
可以省略终止位置:省略后默认到字符串开始位置
案例:  str1 = '大江东去浪淘尽'
要求1: 获取 尽淘浪
print(str1[-1:-4:-1])  # 尽淘浪
可以省略起始位置
print(str1[:-4:-1])  # 尽淘浪

要求2: 获取 去东江大
print(str1[-4:-8:-1])  # 去东江大
可以省略终止位置
print(str1[-4::-1])  # 去东江大

获取整个字符串全部内容并转逆
print(str1[::-1])  # 尽淘浪去东江大

 注意:
1. 省略方式中正数方式重点记忆,负数方式了解即可
2. 如果想要复制一个字符串可以使用str[:]
3. 如果想要反转一个字符串可以使用str[::-1]

4. 字符串的方法(重要)

4.1 find()

find(self, sub, __start, __end)
self: 先不用理会,这个不需要我们传值
sub: 我们要查找的字符或字符串
__start: 查找的起始位置索引
__end: 查找的结束位置索引

案例: str1 = 'hello zhangyingjie'
要求: 要查找当前字符串中z的下标值是什么
index = str1.find('z', 0, 100)
print(index)  # 6
print(str1[6])  # z

要求: 要查找当前字符串中zhang的下标是什么
index = str1.find('zhang', 0, 100)
print(index)  # 6
注意: 如果查找的是字符串,则返回该字符串首字母在目标字符串中的索引值

起始位置和终止位置可以省略,省略后默认获取从整个字符串中查找
index = str1.find('zhang')
print(index)  # 6

注: 如果我们指定字符串的查找范围,该范围是左闭右开区间
index = str1.find('zhang', 7, 100)  
 -1 代表该字符串中没有我们要查找的字符串,如果被查找字符串不存在不会报错
print(index)  # -1

注意: 如果我们想要使用查找到的索引值获取数据内容,一定要判断该值是否为-1,因为-1也有值

要求: 查找字符串中h出现的索引位置
find 是查找从左至右第一个出现的字符串的索引位置
index = str1.find('h')
print(index)  # 0

4.2 index()

 index(self, sub, __start, __end)
self: 先不用理会,这个不需要我们传值
sub: 我们要查找的字符或字符串
__start: 查找的起始位置索引
__end: 查找的结束位置索引

如果使用index 字符串在目标字符串中未出现则报错, 其他同find一样

find 和 index 总结:
1. index 和 find 都是进行字符串在目标字符串中从左至右第一次出现的位置索引查询
2. index 和 find 都可以查找范围的指定,查找范围依然是左闭右开区间
3. index 中如果被查找的字符串不存在则报错
4. find 中如果被查找的字符串不存在则返回-1
5. 当我们查找的是多个字符串的子字符串时,只返回第一个字母的位置

4.3 replace()

格式: replace(self, __old, __new,__count)
self: 暂时不用我们理会,不用我们传值
__old: 旧值
__new: 新值
__count: 替换次数
将字符串中的子字符串替换为新的字符内容的方法, 原始数据不发生变化, 生成新的字符串数据

 案例:
str1 = 'hello Python and xiaozhang and world'
要求1: 将str1中所有的and 替换为&&
str2 = str1.replace('and', '&&')
print(str2)

要求2: 将str1中第一个and替换为&&
str3 = str1.replace('and', '&&', 1)
print(str3)

如果count大于其最大拥有的子字符串数量, 则全部替换
如果没有给count传值,则全部替换
str4 = str1.replace('and', '&&', 5)
print(str4)

注: 当要替换旧字符串在目标字符串中不存在时,不会报错,但也不会替换

4.4 split()

split 字符串拆分
格式: split(self, sep, maxsplit)
self: 不予理会,不用我们传值
sep: 拆分字符串时依据的分隔符
maxsplit: 最大拆分次数(拆分后,最多将字符串拆分为maxsplit+1份)
根据指定的字符,将字符串拆分为多个子字符串,放置在一个列表中,进行返回

案例:
str1 = 'hello world and python'
要求1: 将str1 按照空格拆分为多个单词, 放置在list中
str_list = str1.split(' ')
print(str_list)  

设置最大拆分次数 ,此时拆分为3份, 并且是从左至右依次拆分的
str_list = str1.split(' ', 2)
print(str_list)  

要求2: 将str2 按照空白拆分为多个单词, 空白包括(空格, 制表位, 换行符)
str2 = 'hello world\tand\npython'
str_list2 = str2.split()
注意: 当split中什么也不写时, 就是按照空白进行拆分的, 空白包括(空格, 制表位, 换行符)
print(str_list2)

要求3: 将str3按照 a 进行拆分
str3 = 'apple and banana'
注意: 按照哪一个字符或者字符串拆分,则该字符串或字符就会消失
print(str3.split('a'))
注: 在使用split之后, 不会对原数据产生影响, 而是产生了新的字符串

5. 字符串方法的补充

5.1 count

count 就是用于查询目标字符串中有多少个指定子字符串的
注意: 查询子字符串数量时,可以约束起始和终止范围, 该范围为左闭右开区间
str1 = 'hello python'
print(str1.count('o'))  # 2
print(str1.count('h'))  # 1

5.2 len

len 是一个函数,用来查询字符串中有多少个字符元素的, 无论是空格还是换行符等都是一个元素
str2 = 'xiaoming && 小明\n小丽'
print(len(str2))  # 17
print(str2.__len__())  # 17

5.3 strip

去除字符串左右两侧的指定字符
str3 = '   传值   你好   '
仅去除左右两侧的字符, 中间的字符不会去除
print(str3.strip('  '))  # 传值   你好

5.4 join  

join是字符串类型的方法
字符串的合并, 根据指定字符将列表中的字符串合并为一个字符串
str_list1 = ['hello', 'world', 'and', 'python']
str6 = '*'.join(str_list1)
print(str6)  # hello*world*and*python

5.5 title

案例: str1 = 'HellO woRLd'

将每个单词的首字母大写,其余小写
注意: 判断是否为同一个单词的依据仅有一个,只要是非字母数据就是分割符
print(str1.title())  # Hello World
str2 = 'jhds小明jdsj'
print(str2.title())  # Jhds小明Jdsj

5.6 capitalize

整个字符串的首字母大写,其余小写
print(str1.capitalize())  # Hello world

5.7 字符串的判断

记住除了判断开始和结束字符串以外,判断方法都是is 开头的, 直接输入is进行查找就可以了
startwith 判断是否以某个字符串开始
endswith 判断是否以某个字符串结束
isupper 判断字符串中是否均为大写
islower 判断字符串中是否均为小写
istitle 判断字符串中是否均首字母为大写
isdecimal, isdigit, isnumeric 是判断字符串是否为纯数字
注意: 字符串中如果为浮点型数据无法判断,因为.不是字符
isalnum 是判断字符串是否为纯字母或纯数字
isalpha 判断是否为纯字母

6. 字符串的应用

要求: 输入一个文件名称, 根据扩展名判断该文件是否为txt格式文件
分析: 通过键盘录入文件名称, 要查找文件的末尾扩展名是否为txt
1. 使用键盘录入一个文件名称
file_name = input('请输入您要查询的文件:')
2. 根据文件名判断是否以.txt结尾

方式一:  使用split根据.进行拆分,确定最后一个元素是否为txt文件
str_list = file_name.split('.')
end_str = str_list[-1]
if end_str == 'txt':
    print('该文件为txt文件格式')
else:
    print('该文件格式错误')

方法二: 可以使用字符串切片, 仅切割最后四个字符,如果字符串为.txt 证明该文件为txt文件
end_str = file_name[-4:]
if end_str == '.txt':
    print('该文件为txt文件格式')
else:
    print('该文件格式错误')

方法三: 我们也可以根据 endwith 判断该字符串是否以.txt结尾
# endwith 是判断字符串是否以某个子字符串结尾的方法,返回值是布尔类型,可以作为判断条件使用
print(file_name.endswith('.txt'))
if file_name.endswith('.txt'):
    print('该文件为txt文件格式')
else:
    print('该文件格式错误')

7. 列表的定义(重要)

 列表(list) 可以一次存储多个数据,并且保存在同一个变量中,是一个容器
列表的定义
格式: 变量 = [元素1, 元素2,元素3,……]
理论上,列表类型可以存储无数个数据

注意: 在python中列表类型中可以存储任意类型的数据,且数据类型可以混合存储
list1 = [1, 11.2, '小张', True, [1, 2, 3]]
print(list1)

列表同样要根据索引值获取元素
正数索引从0开始,从左至右依次递增
负数索引从-1开始,从右至左依次递减

8. 列表的遍历(重要)

list1 = [1, 9, 6, 0, 8, 4]

for 循环遍历

for 就是配合容器类型使用的,使用for循环可以直接从列表中获取每一个值
for i in list1:
    print(i)

 while 循环遍历

while 循环一般我们不使用它遍历容器, 如果非要用,则可以使用循环变量模拟索引,进行依次提取
索引值从0开始,到列表长度-1结束
i = 0
while i <= len(list1) – 1:
    此时获取的i就是索引值
    print(i, end=':')
    此时可以依次根据元素下标取值
    print(list1[i])
    i += 1

9. 列表的操作方式(重要)

9.1 增

9.1.1  append

list1 = [1, 2, 3]

在列表末尾增加指定的元素
格式: 列表对象.append(数据)
需求: 在列表末尾增加4
注意: append方法是在列表原数据增加了一个元素, 没有产生新的列表
list1.append(4)
print(list1)  # [1, 2, 3, 4]
无论append括号内填写了基础类型,还是容器类型, 最终都当作一个元素添加到列表末尾
list1.append([7, 8, 9])
print(list1)  # [1, 2, 3, 4, 5, [7, 8, 9]]

9.1.2  extend

在列表的末尾扩展一个容器类型数据, 也就是将容器类型的数据内部元素依次提取出来,追加到列表末尾
list2 = [1, 2, 3]
extend 修改的也是原列表,不会产生新的数据列表
list2.extend([4, 5, 6])
print(list2)  # [1, 2, 3, 4, 5, 6]

注: 在extend内部必须传入迭代数据类型(容器类型),否则报错, 哪怕容器类型中只有一个元素,或者没有元素,都可以,但是非容器类型就不行
list2.extend('2')
print(list2)  # [1, 2, 3, 4, 5, 6, '2']

9.1.3  insert

在列表的指定索引位置增加一个指定元素
格式: insert(索引, 元素)
list3 = [1, 2, 3]
要求: 在下标为1的位置插入一个4
list3.insert(1, 4)
print(list3)  # [1, 4, 2, 3]
insert 中执行下标为1的位置的数据的插入,则插入后改元素下标为1,原数据将统一向后移动一位,下标自动增长
注意: 在开发中insert由于会修改已有数据的元素下标,所以操作时要谨慎,尽量使用append

list3 = [1, 5, 6]
list3.insert(25, 9)
如果insert插入索引位置远大于最大索引位置,则自动将数据插入到末尾
print(list3)  # [1, 5, 6, 9]

 注意事项:
1. append 和 extend 插入数据时不会影响原数据的索引值
2. insert 插入数据时, 可能会影响原数据的索引值,insert安全性较低
3. 如果insert插入索引位置远大于最大索引位置,则自动将数据插入到末尾

9.2 查

9.2.1  使用索引值查询元素

list1 = ['python', 'Java', 'c++', 'go', 'php', 'go']
print(list1[0])  # python

9.2.2  index

查询指定元素出现的索引值
print(list1.index('Java'))  # 1
如果出现的元素不存在,则报错
如果列表中存在多个相同的元素, 那我们只获取从左至右第一个该元素的索引值
print(list1.index('go'))  # 3

9.2.3  count

查询指定元素在列表中出现的次数
print(list1.count('python'))  # 1
当查询的数据不存在时,返回0, 不会报错
print(list1.count('value'))  # 0
注意: 在list中count 不能设定范围

9.2.4  in   not in  

判断元素是否在容器中
格式: 元素 in 容器
list2 = [2, 3, 4, 5]
in 判断是否在容器内, 在则返回True, 不在则返回False
print(2 in list2)  # True
print(9 in list2)  # False
not in 判断是否不在容器内, 不在则返回True, 在则返回False
print(9 not in list2)  # True
print(2 not in list2)  # False

注意: 在list 中不存在find方法

作者:#杰

物联沃分享整理
物联沃-IOTWORD物联网 » Python基础编程入门教程第四日指南

发表回复