如果在程序中我们需要
重复的执行某条或某些指令
,比如控制机器人踢足球,如果机器人持球而且还没有进入射门范围,那么我们就要一直发出让机器人向球门方向奔跑的指令,这种代码结构我们叫做
“循环结构”
。
Python中构造循环结构有两种方式,一种是
for-in
循环,一种是
while
循环。
一、for-in 循环
如果
明确的知道循环执行的次数
或者
要对一个容器进行迭代
,那么推荐使用
for-in
循环。
Python 的
for-in
循环 和 C/C++ 中的
for
循环 不太一样,是
对
序列中的元素
逐个迭代
,这个序列可以是
一个列表
或者
一个字符串
等等。
Python 中 for 循环的一般格式:
for variable in sequence:
statements
就是把序列
sequence
中的每个元素代入变量
variable
中,然后执行
statements
语句。
举个例子
names = ['Bart', 'Lisa', 'Adam']
for name in names:
print("Hello," + name + "!")
# 输出
# Hello,Bart!
# Hello,Lisa!
# Hello,Adam!
range()函数 等差数列
for-in
循环 常常配合
range()
函数 来使用。
range([start,] stop[, step])
Python的内置函数,根据 start与stop指定的范围 以及 step设定的步长,
生成一个等差数列的
生成器 (itrator)
,可以设置递增或者递减。
生成器是什么?
参数说明:
start:
计数
从 start 开始
,
默认从 0 开始
。例如 range(5) 等价于range(0, 5);
stop:
计数到 stop 结束,但
不包括 stop
。例如:range(0,5) 是 [0, 1, 2, 3, 4] 没有5
step:
步长,
默认为1
。例如:range(0,5) 等价于 range(0,5,1)
range()
的用法非常灵活
>>> range(10) # 从 0 开始到 10
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(1, 11) # 从 1 开始到 11
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> range(0, 30, 5) # 步长为 5
[0, 5, 10, 15, 20, 25]
>>> range(0, 10, 3) # 步长为 3
[0, 3, 6, 9]
>>> range(0, -10, -1) # 倒序
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
>>> range(0)
[]
>>> range(1, 0)
[]
for-in
循环中
range()
的常见用法
# 循环10次
for i in range(10):
...
enumerate()函数
如果你在遍历序列时,需要同时获取下标和值,可以使用
enumerate()
函数
for i in range(len(nums)):
print(i, nums[i])
print("------")
for (i, num) in enumerate(nums):
print(i, num)
二、while 循环
如果
不知道具体的循环次数
,推荐使用while循环。
while循环
通过一个
条件表达式
来控制循环
,表达式的值为True(即条件满足)则循环继续,表达式的值为False(即条件不满足)则循环结束。
Python 中 while 语句的一般格式:
while condition:
statements
举个例子
sum = 0
n = 99
while n > 0:
sum = sum + n
n = n - 2
print(sum)
特殊用法:无限循环
我们可以通过设置条件表达式永远不为 false 来实现无限循环,比如:
while True : # 表达式永远为 true
num = int(input("输入一个数字 :"))
print ("你输入的数字是: ", num)
print ("Good bye!")
你可以使用 CTRL+C 来退出当前的无限循环。
无限循环在服务器上客户端的实时请求非常有用。
break 和 continue 语句
break 结束循环
如果需要提前结束循环,可以使用
break
语句
break
语句可以
跳出当前 for 和 while 的循环体
n = 1
while n <= 100:
if n > 10: # 当n = 11时,条件满足,执行break语句
break # break语句会结束当前循环
print(n)
n = n + 1
print('END')
执行上面的代码可以看到,打印出1~10后,紧接着打印END,程序结束。
continue 跳过当前这次循环
continue
语句可以
跳过当前这次循环,直接开始进行下一次循环
。
举个例子:
for i in range(0, 11):
if n % 2 == 0: # 如果n是偶数,执行continue语句
continue # continue语句会直接继续下一轮循环,后续的print()语句不会执行
print(n)
上面的程序可以打印出1~10中的奇数,1,3,5,7,9。
pass 空语句
Python 中的
pass
是空语句,它不做任何事情,一般用于占位,以保持程序结构的完整性,比如
>>>while True:
... pass # 等待键盘中断 (Ctrl+C)
应用案例
一、猜数字游戏
计算机出一个1~100之间的随机数由人来猜
计算机根据人猜的数字分别给出提示大一点/小一点/猜对了
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('你的智商余额明显不足')
二、输入一个正整数判断是不是素数
素数指的是只能被1和自身整除的大于1的整数。
from math import sqrt
num = int(input('请输入一个正整数: '))
end = int(sqrt(num))
is_prime = True
for x in range(2, end + 1):
if num % x == 0:
is_prime = False
break
if is_prime and num != 1:
print('%d是素数' % num)
else:
print('%d不是素数' % num)
三、打印如下所示的三角形图案
*
**
***
****
*****
*
**
***
****
*****
*
***
*****
*******
*********
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()