循环结构
循环结构(while)
-
格式
while 表达式: 语句块
执行流程:当程序执行到while语句时,首先判断表达式的真假。若表达式的值为真,则执行语句块,然后返回表达式继续判断,直到表达式的值为假;若表达式的值为假,则直接跳过语句块,执行后面的内容。
-
说明
-
表达式:也叫循环条件
-
语句块:也叫循环体
-
死循环:循环条件一直为真
-
break:跳出循环
-
continue:结束本次循环,进入下次循环
-
else:else语句块在循环正常退出时执行,非正常(break)退出时不执行
-
-
示例:人在江湖飘
from random import randint from time import sleep print('人在江湖飘,哪能不挨刀...') print('人在江湖飘,哪能不挨刀...') while True: # 用于占位的空语句 # pass jiege = randint(1, 5) feihu = randint(1, 5) # 做差 cha = jiege - feihu # abs:求绝对值 if abs(cha) == 1 or abs(cha) == 4: if cha == 1 or cha == -4: print('杰哥:{},飞虎:{},杰哥胜出,飞虎喝酒'.format(jiege, feihu)) else: print('杰哥:{},飞虎:{},飞虎胜出,杰哥喝酒'.format(jiege, feihu)) break else: print('不分伯仲,继续...') # 睡眠1秒 sleep(1)
循环结构(for-in)
-
说明:for-in也是一种循环结构,常用于对象的遍历,如:字符串、列表、元组、字典等
-
格式:
for x in y: 语句块
执行流程:x依次表示y中的一个元素,遍历结束循环也就结束了
-
示例:
# 遍历字符串 for i in 'hello': print(i) # 遍历列表 lt = [1, 2, 3] for i in lt: # 可以手动获取下标 print(i, lt.index(i)) # 遍历列表,可以直接使用下标 for index, value in enumerate(lt): print(index, value) # 遍历字典 d = {'a': 'apple', 'b': 'banana', 'c': 'car', 'd': 'dog'} for key in d: # 遍历的是键,值需要单独获取 print(key, d[key]) # for key, value in d.items(): # 与上面的方式是等价的 for key, value in dict.items(d): print(key, value)
列表生成式
-
可迭代对象:可以迭代遍历的对象,如:列表、元组、字典等
-
range函数
# range对象,保存的不是所有的数据,而是生成数据的算法 # 指定终止值 # r = range(10) # 指定起始、终止值 # r = range(2, 10) # 指定起始、终止、步进 r = range(2, 10, 2) # print(r, type(r)) # 可以遍历 for i in r: print(i) # 可以转换为列表 print(list(r)) 列表生成式 print([i for i in range(1, 11)]) 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(['hello' for i in range(1, 11)]) # 也可以生成集合 print({i for i in range(1, 11)}) # 还可以生成字典 print({i: i for i in range(1, 11)})
循环嵌套
-
循环能否嵌套?
-
可以
-
-
示例1:
n = int(input('请输入一个整数:')) # 控制打印多上行 for i in range(n): # 控制每一行打印多少个 for j in range(i+1): print('*', end='') print()
-
示例2:
n = int(input('请输入一个整数:')) # 先控制行数 for i in range(n): # 控制每一行的打印个数 for j in range(i+1): print(j+1, end=' ') print()
-
列表排序
-
冒泡排序
lt = [1, 5, 7, 2, 6, 3] # 冒泡排序:从小到大 # 第一轮:1, 5, 2, 6, 3, 7 # 第二轮:1, 2, 5, 3, 6 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 = [3, 5, 2, 8, 6, 4] # 选择排序:从小到大 # 思想:从头开始,选取一个位置,让后面所有的元素都与其进行比较,不合适,发生交换 # 第一轮:2, 5, 3, 8, 6, 4 # 第二轮:2, 3, 5, 8, 6, 4 # 第三轮:2, 3, 4, 8, 6, 5
练习:自己实现选择排序
-
字典操作
-
示例:
d = {'name': 'dahua', 'age': 18} # 获取成员:当键不存在时会报错 print(d['name']) # 获取成员:键存在返回对应的值,不存在返回None,可以指定默认值 print(d.get('height', '默认值')) # 键存在返回对应的值,不存在先设置然后返回 print(d.setdefault('height', 'xxx')) # 存在则修改 d['name'] = '王大花' # 不存在则添加 d['weight'] = 50 # 存在的就覆盖,不存在的就添加 # d.update(name='erhua', sex='女') d.update({'name': 'erhua', 'sex': '女'}) # 删除 del d['name'] # 删除并返回 print(d.pop('age')) # 随机弹出并返回一个键值对,一般是末尾的元素,字典为空会报错 print(d.popitem()) # 返回字典的所有键值对组成的元素集合,可以遍历、转换 print(list(d.items())) # 清空字典 d.clear() print(d)
练习
-
计算1~100之间所有偶数的和
i = 1 s = 0 while i <= 100: if i % 2 == 0: s += i i += 1 print('2+4+...+100={}'.format(s))
打印字符A~Z
-
i = ord('A') while ord('A') <= i <= ord('Z'): print(chr(i),end=' ') i += 1
从终端输入10个字符,大写转小写,小写转大写,其他字符不变,然后输出
-
lt = [0 for i in range(10)] for i in range(10): c = input('输入字符:') if ord('A') <= ord(c) <= ord('Z'): lt[i] = chr(ord(c) + 32) elif ord('a') <= ord(c) <= ord('z'): lt[i] = chr(ord(c) - 32) else: lt[i] = '其他字符' print(lt)
将12345转换为54321
-
s = str(12345) s = int(s[::-1]) print(s)
将12345转换为'12345',不要使用str
-
num = 12345 s = "" while num: fnum = num%10 s = chr(ord('0')+fnum) + s num //= 10 print(s)
将'12345'转换为12345,不要使用int
-
s3 = '12345' num = 0 for i in s3: num = num * 10 + ord(i) - ord('0') print(num,type(num))
遍历列表,打印:我叫name,今年age岁,家住dizhi,电话phone
-
lt = [ {'name':'小王', 'age':18, 'info':[('phone', '123'), ('dizhi', '广州')]}, {'name':'小芳', 'age':19, 'info':[('phone', '789'), ('dizhi', '深圳')]}, {'name':'小杜', 'age':22, 'info':[('phone', '567'), ('dizhi', '北京')]}, {'name':'小孟', 'age':28, 'info':[('phone', '000'), ('dizhi', '上海')]}, {'name':'小乔', 'age':26, 'info':[('phone', '111'), ('dizhi', '河南')]}, ]
-
lt = [ {'name':'小王', 'age':18, 'info':[('phone', '123'), ('dizhi', '广州')]}, {'name':'小芳', 'age':19, 'info':[('phone', '789'), ('dizhi', '深圳')]}, {'name':'小杜', 'age':22, 'info':[('phone', '567'), ('dizhi', '北京')]}, {'name':'小孟', 'age':28, 'info':[('phone', '000'), ('dizhi', '上海')]}, {'name':'小乔', 'age':26, 'info':[('phone', '111'), ('dizhi', '河南')]}, ] for i in lt: print('我叫{},今年{}岁,家住{},电话{}'.format( i.get('name'), i.get('age'), i.get('info')[1][1], i.get('info')[0][1]) )
打印九九乘法表
for i in range(9): for j in range(i+1): print(i+1, '*', j+1, '=', (i+1)*(j+1), end=' ') print()
从终端输入两个整数m和n,打印m*n的表格,如:2,5,打印如下图形:
-
1 2 3 4 5 6 7 8 9 10
m = int(input('输入整数m:')) n = int(input('输入整数n:')) num = 1 for i in range(m): for j in range(n): print(num,end=' ') num += 1 print()