在程序中需要重复的执行一个功能的时候,用循环来实现。
while 条件:
条件满足时,做的事情1
条件满足时,做的事情2
条件满足时,做的事情3
...(省略)...
代码:
#打印5遍 媳妇儿,我错了
i = 1
while i <= 5:
print('媳妇儿,我错了')
i += 1 # i = i + 1
计数器的书写习惯
上述while循环代码可以修改一下:
i = 0
while i<1000:
print('人生苦短,我用python')
i+=1
#分析:1-100的累加和,即1 + 2 + 3 + 4 +….,即前两个数字的相加结果 + 下一个数字( 前一个数字 + 1)。
i = 1
sum = 0
while i <= 100:
sum = sum + i
i += 1
print("1~100的累积和为:%d" % sum)
方法一:条件判断和2取余数则累加
#encoding=utf-8
i = 1
sum = 0
while i <= 100:
if i % 2 == 0:
sum = sum + i
i+=1
print("1~100的累积和为:%d" % sum)
方法二:计数器控制
i = 0
result = 0
while i <= 100:
result += i
i += 2
# 输出2550
print(result)
#打印所有3位回文数
i = 100
while i<1000:
# 百位
hundreds = i//100
# 个位
single = i%10
if hundreds==single:
print(i)
i+=1
如果在使用while循环的时候,计数器没有发生改变,那么计数器的值便一直是初始值,此时while后面的条件永远成立,那么循环会一直无限执行下去,无法终止,这种循环也称为死循环。
i = 0
while i<100:
print(i)
在实际应用中,如果循环满足了一定的条件,没必要接着往下运行了,那么这个时候就需要用到break退出循环。
#需求:循环吃5个苹果,吃完第3个吃饱了,第4 和 5 不吃了(不执行)
i = 1
while i <= 5:
# 条件:如果吃到4 或 > 3 打印吃饱了不吃了
if i == 4:
print('吃饱了,不吃了')
break
print(f'吃了第{i}个苹果')
i += 1
#需求:#用while循环输出1-100的数字,如果这个数字等于88,那就退出循环,停止输出。
i = 1
while i<101:
if i==88:
break
print(i)
i+=1
#需求:找到第一个5位数回文数
i = 10000
while i<100000:
# 万位
wan = i//10000
# 千位
thousand = i%10000//1000
# 十位
ten = i%100//10
# 个位
single = i%10
# 万位和个位相同并且千位和十位相同
if wan==single and thousand==ten:
print(i)
break
i+=1
#需求升级:找到第10个5位数回文数
i = 10000
# 第num个回文数
num = 0
while i<100000:
# 万位
wan = i//10000
# 千位
thousand = i%10000//1000
# 十位
ten = i%100//10
# 个位
single = i%10
# 万位和个位相同并且千位和十位相同
if wan==single and thousand==ten:
num+=1
if num==10:
print(i)
break
i+=1
在实际应用中,如果循环满足了一定的条件,当前的代码没必要接着往下运行了,需要跳出本次循环进入到下一个循环,那么就需要用到continue
#吃5个苹果 -- 循环; 吃到第3个吃出一个虫子,第三个不吃了,没吃饱,继续吃4和5个苹果
i = 1
while i <= 5:
# 条件
if i == 3:
print('吃出一个大虫子,这个苹果不吃了')
# 如果使用continue,在continue之前一定要修改计数器,否则进入死循环
i += 1
continue
print(f'吃了第{i}个苹果')
i += 1
#用while循环输出1-100的数字,如果某个数字为偶数,那就停止本次循环不再输出,进入下一层循环。
i = 1
while i<101:
if i%2==0:
continue
print(i)
i+=1
#把所有3位非回文数找出来
i = 100
while i<1000:
# 百位
hun = i//100
# 个位
single = 1%10
if hun==single:
continue
print(i)
i+=1
所谓while循环嵌套,就是⼀个while⾥⾯嵌套⼀个while的写法
while 条件1:
条件1满足时,做的事情1
条件1满足时,做的事情2
条件1满足时,做的事情3
...(省略)...
while 条件2:
条件2满足时,做的事情1
条件2满足时,做的事情2
条件2满足时,做的事情3
...(省略)...
代码如下:
j = 0
while j < 3:
i = 0
while i < 3:
print('媳妇儿,我错了')
i += 1
print('刷晚饭的碗')
print('一套惩罚结束-----------------------')
j += 1
嵌套循环的执行流程:当内部循环执⾏完成之后,再执⾏下⼀次外部循环的条件判断
#打印5遍1到10
j = 0
while j<5:
i=1
while i<11:
print(i)
i+=1
j+=1
代码实现:
j = 0
while j < 5:
# 一行星星开始
i = 0
while i < 5:
print('*', end='')
i += 1
# 一行星星结束:换行显示下一行
print()
j += 1
代码实现:
j = 0
while j < 5:
# 一行星星开始
i = 0
while i <= j:
print('*', end='')
i += 1
# 一行星星结束:换行显示下一行
print()
j += 1
实现代码:
# 重复打印9行表达式
j = 1
while j <= 9:
# 打印一行里面的表达式 a * b = a*b
i = 1
while i <= j:
print(f'{i}*{j}={j*i}', end='\t')
i += 1
print()
j += 1
倒着的乘法表实现:
j = 9
while j > 0:
# 一行的表达式开始
i = 1
while i <= j:
print(f'{i} * {j} = {i*j}', end='\t')
i += 1
# 一行的表达式结束
print()
j -= 1
像while循环一样,for可以完成循环的功能。
在Python中 for循环可以遍历任何序列的项目,如一个列表或者一个字符串等。
for 临时变量 in 列表或者字符串等可迭代对象:
循环满足条件时执行的代码
#遍历字符串中每一个元素
str1 = 'python'
for i in str1:
print(i)
for循环中也可以使用break,和while循环中一样如果循环满足了一定的条件,使用break可以退出循环。
str1 = 'python'
for i in str1:
# 当某些条件成立退出循环 -- break:条件 i取到字符e
if i == 't':
break
print(i)
#打印字符串'hello world'中第一个'o'出现之前(不包含第一个'o')的所有元素
str = 'hello world'
for ele in str:
if ele=='o':
break
print(ele)
#打印字符串'hello world'中第三个'l'出现之前(不包含第三个'l')的所有元素
str = 'hello world'
# 统计出现的l次数
num = 0
for ele in str:
if ele=='l':
num+=1
if num==3:
break
print(ele)
for循环中也可以使用continue,和while循环中一样如果循环满足了一定的条件,使用continue跳出本次循环执行下一次循环。
str1 = 'python'
for i in str1:
# 当某些条件成立退出循环 -- continue:条件 i取到字符e
if i == 'o':
continue
print(i)
#打印字符串'hello world'中除了'w'之外的每一个元素
str = 'hello world'
for ele in str:
if ele=='w':
continue
print(ele)
while 条件:
条件成⽴重复执⾏的代码
else:
循环正常结束之后要执⾏的代码
代码实现:
i = 1
while i <= 5:
print('媳妇⼉,我错了')
i += 1
else:
print('媳妇原谅我了,真开⼼,哈哈哈哈')
#用while循环输出三次”人生苦短,我用python”,正常结束循环输出”好好学习,天天向上“。
i = 0
while i<3:
print('人生苦短,我用python')
i+=1
else:
print('好好学习,天天向上')
#抽签(随机数1-9)3次,如果抽到6说明很幸运,媳妇原谅,如果三次都没有抽中6就跪搓衣板
import random
i = 0
while i<3:
num = random.randint(1,9)
if num==6:
print('媳妇原谅')
break
i+=1
else:
print('跪搓衣板')
i = 1
while i <= 5:
if i == 3:
break
print('媳妇儿,我错了')
i += 1
else:
print('媳妇原谅我了,真开心呐,哈哈哈哈')
所谓else指的是循环正常结束之后要执⾏的代码,即如果是break终⽌循环的情况,else下⽅缩进
的代码将不执⾏。
i==3的时候,执行了break,一旦执行了break,else语句将不会执行了 所以不会执行原谅的代码
i = 1
while i <= 5:
if i == 3:
i += 1
continue
print('媳妇儿,我错了')
i += 1
else:
print('媳妇原谅我了,真开心呐,哈哈哈哈')
因为continue是退出当前⼀次循环,继续下⼀次循环,所以该循环在continue控制下是可以正常
结束的,当循环结束后,则执⾏了else缩进的代码。
所谓else指的是循环正常结束之后要执⾏的代码,即如果是break终⽌循环的情况,else下⽅缩进
的代码将不执⾏。
for 临时变量 in 序列:
重复执⾏的代码
...
else:
循环正常结束之后要执⾏的代码
代码实现:
str1 = 'python'
for i in str1:
print(i)
else:
print('循环正常结束执行的else的代码')
str1 = 'python'
for i in str1:
if i == 't':
print('遇到t不打印')
break
print(i)
else:
print('没有遇到t')
没有执⾏else缩进的代码。
#输入一个字符串判断是否里面包含i这个字母(不能使用in或not in)。包含就输出包含i,不包含输出不包含
str = input('请输入字符串')
for ele in str:
if ele=='i':
print('包含i')
break
else:
print('不包含i')
str1 = 'itheima'
for i in str1:
if i == 'e':
print('遇到e不打印')
continue
print(i)
else:
print('循环正常结束之后执⾏的代码')
因为continue是退出当前⼀次循环,继续下⼀次循环,所以该循环在continue控制下是可以正常
结束的,当循环结束后,则执⾏了else缩进的代码。