循环结构
循环结构(while)
-
格式:
while 表达式: 语句块
执行流程:当程序执行到while语句时,首先判断表达式的真假。若表达式的值为真,则执行缩进的语句块,之后返回表达式继续判断;若表达式的值为假,则跳过缩进的语句块执行。
-
说明:
- 表达式:也叫循环条件
- 语句块:也叫循环体
- 死循环:循环条件一直成立
- break:跳出循环
- continue:结束本次循环,进入下次循环
- else:对应的语句块,循环正常退出时会执行,非正常退出(break)时不执行
循环结构(for-in)
-
说明:也是一种循环结构,经常用于便利可迭代对象,如:字符串、列表、元组、字典等
-
格式:
for x in y: 语句块
执行流程:x一次代表y种的一个元素,遍历结束循环也就结束了。
列表生成式
-
range:
# 一个对象,保存了产生连续整数的算法,可以节约空间 # 可以指定起始位置,默认为0 # print(range(10)) # 可以进行遍历 for i in range(10): print(i) # 可以转换为列表 print(list(range(2, 10)))
-
列表生成式
# 列表生成式:可以快速方便地生成列表 print([i for i in range(1, 11)]) print([i for i in 'abcdefg']) print([i*2 for i in range(1, 11)]) print([i*i for i in range(1, 11)]) print([str(i) for i in range(1, 11)]) print([i for i in range(1, 11) if i % 2 == 0]) # 生成的列表可以与遍历的内容没有一毛钱关系 print([250 for i in range(1, 11)])
循环嵌套
-
循环能否嵌套
- 答:能
-
循环嵌套示例
# 外层循环控制打印多少行 for i in range(1, 11): # print('*' * i) # 内存循环控制每一行多少个 for j in range(i): print('*', end=' ') print()
练习:使用while实现一遍
-
思考:列表排序实现,冒泡排序法思路(升序排序)
lt = [8, 3, 6, 9, 5, 2, 4, 1, 7] 第一轮:[3, 6, 8, 5, 4, 1, 7, 9] 第二轮:[3, 6, 5, 4, 1, 7, 8, 9] 第三轮:[3, 5, 4, 1, 6, 7, 8, 9]
- 参考示例:
# 冒泡排序:升序排序 lt = [8, 3, 6, 9, 5, 2, 4, 1, 7] n = len(lt) # 外出循环控制排序多少轮 for i in range(n-1): # 内存循环控制相邻两个元素的比较 for j in range(n-1-i): if lt[j] > lt[j+1]: # 通用交换元素方式 # temp = lt[j] # lt[j] = lt[j+1] # lt[j+1] = temp # python中特有方式 lt[j], lt[j+1] = lt[j+1], lt[j] print(lt)
-
选择排序
思路:先取出一个位置,用该位置的元素与后面的所有元素挨个比较,不合适就发生交换。 示例:lt = [8, 3, 6, 9, 5, 2, 4, 1, 7] 第一轮:1, 8, 6, 9, 5, 3, 4, 2, 7 第二轮:1, 2, 8, 9, 6, 5, 4, 3, 7 第三轮:1, 2, 3, 9, 8, 6, 5, 4, 7
字符串操作
-
切割与拼接
s = 'I love you more than i can say' # 切割字符串 # sep:指定按照什么进行切割,默认按照空格切割 # maxsplit:指定最大切割次数,默认不限制次数 # ret = s.split(sep='abc', maxsplit=1) # 从右边进行切割 ret = s.rsplit(' ', maxsplit=1) print(ret) s = 'Hello\nworld' # 按照换行进行切割 print(s.splitlines()) s = 'I love you more than i can say' ret = s.split() # print(ret) # 字符串拼接 s2 = '*'.join(ret) print(s2)
-
查找统计判断
s = 'Hi buddy, if you have something to say, than say; if you have nothing to say, than go.' # 子串查找:找到首次出现的位置,返回下标,找不到返回-1 # ret = s.find('hello') # 从后面查找 # ret = s.rfind('to') # 统计子串出现的次数 # ret = s.count('if') # 判断是否已指定内容开头 # ret = s.startswith('Hi') # 判断是否已指定内容结尾 ret = s.endswith('go.') print(ret)
-
转换及替换
s = 'hellO worlD!' # 转换为全大写 print(s.upper()) # 转换为全小写 print(s.lower()) # 大小写转换 print(s.swapcase()) # 首字母大写 print(s.capitalize()) # 每个单词首字母大写 print(s.title()) # 用指定的内容替换指定内容,还可以值替换次数 print(s.replace('l', 'L', 2))
-
类型判断
s = 'abcABC2' # 是否是全大写 print(s.isupper()) # 是否是全小写 print(s.islower()) # 是否每个单词首字母都大写 print(s.istitle()) # 是否是全数字字符 print(s.isdecimal()) # 是否是全字母 print(s.isalpha()) # 是否全是字母或数字 print(s.isalnum())