循环结构
应用场景:当我们在编写代码时,如果有一个需求是输出10次"hello world
",这时候我们可以直接写十次print("hello world")
。但是当我们需要些十万次"hello world"呢?肯定不会直接写十万行print("hello world")
。这时候我们就需要用到循环语句了。
python中的循环语句分为两种语法:
- for…in
- while…
循环的条件:
- 初始值
- 控制条件(循环结束的条件)
- 步长
一、for…in循环
如果知道要迭代的次数或者要对某一个迭代器对象进行循环,这时候就可以使用for循环。
"""
用for循环实现1~10求和
Version: 0.1
Author: 柚子
"""
sum = 0
for x in range(10):
sum += x
print(sum)
说明:range(1, 101)
可以用来构造一个从1到100的范围数据,通过x对所有的数据进行循环取出,依次进行叠加。
附录:range()函数的使用
-
range(101)
:可以用来产生0到100范围的整数,需要注意的是取不到101。 -
range(1, 101)
:可以用来产生1到100范围的整数,相当于前面是闭区间后面是开区间。 -
range(1, 101, 2)
:可以用来产生1到100的奇数,其中2是步长,即每次数值递增的值。 -
range(100, 0, -2)
:可以用来产生100到1的偶数,其中-2是步长,即每次数字递减的值。
练习1:1~100之间的偶数求和
"""
用for循环实现1~100之间的偶数求和
Version: 0.1
Author: 柚子
"""
sum = 0
for x in range(2, 101, 2):
sum += x
print(sum)
练习2:使用for循环判断1000以内的水仙花数
"""
水仙花数:个位数的3次方加十位数的3次方加百位数的3次方等于该数本身。
Version: 0.1
Author: 柚子
"""
for i in range(100,1000):
gewei = str(i)[2]
shiwei = str(i)[1]
baiwei = str(i)[0]
if int(gewei)**3+int(shiwei)**3+int(baiwei)**3==i:
print(i)
二、while循环
如果要构造的循环不知道具体要循环的次数,这时候可以使用while
循环进行控制。无限循环一般使用while True
或while 1
。
语法格式:
"""
由初始值,结束条件,步长三部分组成
"""
num = 0
while num<10:
num+=1
练习1:根据用户输入的金额输出可以买的西瓜的个数
"""
每个西瓜10元钱,每买一个西瓜,减去10元钱
Version: 0.1
Author: 柚子
"""
money = int(input('请输入金额:'))
while money >= 10:
print('买一个西瓜')
money -= 10
print('剩余', money, '元')
三、break和continue
break用于终止循环,continue用于终止本次循环,继续进行下次循环,终止的都是最近的循环。
看代码分析区别
for i in range(5):
if i==2:
break
print(i)
for i in range(5):
if i==2:
continue
print(i)
练习1:猜数字游戏
random模块用于生成随机数,使用请参考random模块详解。
"""
猜数字游戏:
先随机生成一个数字,然后用户开始猜,每次给用户一个提示大或者小了。
Version: 0.1
Author: 柚子
"""
import random
answer = random.randint(1, 100)
counter = 0
while True:
counter += 1
number = int(input('请输入: '))
if number < answer:
print('大一点')
elif number > answer:
print('小一点')
else:
print('恭喜你猜对了!')
break
print('你总共猜了%d次' % counter)
if counter > 7:
print('你的智商余额明显不足')
练习2:猜拳游戏
在案例中使用了列表的语法,可以试用下标对列表取值。format是python的字符串格式化输出语法,字符串中用{}站位,后边跟上.format()
。
"""
猜拳游戏:
系统随机生成0,1,2分别代表拳,剪刀,布。
Version: 0.1
Author: 柚子
"""
import random
num = 1
ying_num = 0
shu_num = 0
while num <= 3:
if shu_num == 2 or ying_num == 2:
break
user = int(input('请出拳 0(石头) 1(剪刀) 2(布)'))
if user > 2:
print('不能出大于2的值')
else:
data = ['石头', '剪刀', '布']
com = random.randint(0, 1)
print("您出的是{},电脑出的是{}".format(data[user], data[com]))
if user == com:
print('平局')
elif (user == 0 and com == 1) or (user == 1 and com == 2) or (user == 2 and com == 0):
print('你赢了')
ying_num += 1
else:
print('你输了')
shu_num += 1
num += 1
和分支结构一样,循环结构也可以进行嵌套使用:
练习3:输出乘法口诀表
"""
使用双重循环生成99乘法表
Version: 0.1
Author: 柚子
"""
for i in range(1,10):
for j in range(1,i+1):
print(j,"*",i,"=",i*j,end=" ")
print()
四、for…else和while…else…的用法
当for和else连用或者while和else连用时。如果循环遇到break结束时,就会执行else中的语句。
示 例1:
"""
此时没有break,else就会执行
Version: 0.1
Author: 柚子
"""
for i in range(5):
print(i)
else:
print("else")
示 例2:
"""
此时执行了break,else就会执行
Version: 0.1
Author: 柚子
"""
for i in range(5):
print(i)
break
else:
print("else")
练习1:判断2-100的质数
"""
只能被1和它本身整除的数为质数
Version: 0.1
Author: 柚子
"""
for i in range(2,100):
for j in range(2,i):
if i%j==0:
break
else:
print(i)
练习2:打印三角形图案
*
**
***
****
*****
*
**
***
****
*****
*
***
*****
*******
*********
答案:
"""
打印三角形图案
Version: 0.1
Author: 柚子
"""
row = int(input('请输入行数: '))
for i in range(row):
for _ in range(i + 1):
print('*', end='')
print()
for i in range(row):
for j in range(row):
if j < row - i - 1:
print(' ', end='')
else:
print('*', end='')
print()
for i in range(row):
for _ in range(row - i - 1):
print(' ', end='')
for _ in range(2 * i + 1):
print('*', end='')
print()