如果在程序中我们需要

重复的执行某条或某些指令

,比如控制机器人踢足球,如果机器人持球而且还没有进入射门范围,那么我们就要一直发出让机器人向球门方向奔跑的指令,这种代码结构我们叫做

“循环结构”

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()