通常,语句是按顺序执行的 - 函数中的第一个语句先执行,然后执行第二个语句,依此类推。 当您需要多次执行一段代码时,可能会出现这种情况。

编程语言提供了各种控制结构,允许更复杂的执行路径。

循环语句允许我们多次执行一个语句或一组语句。 下图说明了一个循环语句 -

python3_7_001.jpg

Python编程语言提供以下类型的循环来处理循环要求。

序号

循环类型 & 描述

1

while循环在给定条件为TRUE时重复一个语句或一组语句。 它在执行循环体之前测试条件。

2

for循环多次执行一系列语句并缩短管理循环变量的代码。

3

嵌套循环您可以在一个或多个循环内使用一个或多个循环。

while循环

只要给定条件为真,Python编程语言中的while循环语句会重复执行目标语句。

语句

while expression:
   statement(s)

在这里,陈述可以是单一陈述或统一缩进陈述。 该条件可以是任何表达式,true表示任何非零值。 循环在条件为真时迭代。

当条件变为假时,程序控制传递到循环后面的行。

在Python中,所有在编程构造之后由相同数量的字符空间缩进的语句被认为是单个代码块的一部分。 Python使用缩进作为分组语句的方法。

python3_7_001.jpg

这里,while循环的一个关键点是循环可能永远不会运行。 当测试条件并且结果为false时,循环体将被跳过,while循环之后的第一条语句将被执行。

例子

#!/usr/bin/python3

count = 0
while (count < 9):
   print ('The count is:', count)
   count = count + 1

print ("Good bye!")

当上面的代码被执行时,它会产生以下结果 -

The count is: 0
The count is: 1
The count is: 2
The count is: 3
The count is: 4
The count is: 5
The count is: 6
The count is: 7
The count is: 8
Good bye!

此处由打印和增量语句组成的块会重复执行,直到计数不再小于9.每次迭代时,显示索引计数的当前值,然后增加1。

无限循环

如果条件从不变为FALSE,则循环变成无限循环。 使用while循环时必须谨慎,因为这种情况可能永远不会解析为FALSE值。 这导致了一个永不止息的循环。 这样的循环称为无限循环。

在服务器需要连续运行的客户端/服务器编程中,无限循环可能很有用,以便客户端程序可以在需要时与其通信。

#!/usr/bin/python3

var = 1
while var == 1 :  # This constructs an infinite loop
   num = int(input("Enter a number  :"))
   print ("You entered: ", num)

print ("Good bye!")

当上面的代码被执行时,它会产生以下结果 -

Enter a number  :20
You entered:  20
Enter a number  :29
You entered:  29
Enter a number  :3
You entered:  3
Enter a number  :11
You entered:  11
Enter a number  :22
You entered:  22
Enter a number  :Traceback (most recent call last):
   File "examples\test.py", line 5, in 
      num = int(input("Enter a number  :"))
KeyboardInterrupt

上面的例子进入无限循环,你需要使用CTRL + C来退出程序。

使用else语句和循环

Python支持具有与循环语句相关的else语句。

  • 如果else语句与for循环一起使用,则在循环用完迭代列表时执行else语句。

  • 如果else语句与while循环一起使用,则在条件变为false时执行else语句。

以下示例说明了else语句与while语句的组合,只要它小于5,就会打印一个数字,否则将执行else语句。

#!/usr/bin/python3

count = 0
while count < 5:
   print (count, " is  less than 5")
   count = count + 1
else:
   print (count, " is not less than 5")

当上面的代码被执行时,它会产生以下结果&minus;

0 is less than 5
1 is less than 5
2 is less than 5
3 is less than 5
4 is less than 5
5 is not less than 5

单行语句

与if语句语法类似,如果while子句仅包含单个语句,则它可能与while标题放在同一行。

例子

以下是单行while子句的语法和示例 -

#!/usr/bin/python3

flag = 1

while (flag): print ('Given flag is really true!')

print ("Good bye!")

上面的例子进入无限循环,你需要按下CTRL + C键退出。

for循环

Python中的for语句有能力迭代任何序列的项目,例如列表或字符串。

语法

for iterating_var in sequence:
   statements(s)

如果一个序列包含一个表达式列表,它将首先被判断。 然后,将序列中的第一项分配给迭代变量iterating_var。 接下来,执行语句块。 列表中的每个项目都分配给iterating_var,并且执行语句块直到整个序列耗尽。

range()函数

内置的函数range()是迭代一系列数字的正确函数。 它生成算术级数的迭代器。

range()生成一个迭代器,以从0开始到n-1为止的整数。 要获取序列的列表对象,可以将它指定为list()。 现在可以使用for语句迭代此列表。

>>> for var in list(range(5)):
   print (var)

这将产生以下输出。

0 1 2 3 4

#!/usr/bin/python3

for letter in 'Python':     # traversal of a string sequence
   print ('Current Letter :', letter)
print()
fruits = ['banana', 'apple',  'mango']
for fruit in fruits:        # traversal of List sequence
   print ('Current fruit :', fruit)

print ("Good bye!")

当上面的代码被执行时,它会产生以下结果 -

Current Letter : P
Current Letter : y
Current Letter : t
Current Letter : h
Current Letter : o
Current Letter : n

Current fruit : banana
Current fruit : apple
Current fruit : mango
Good bye!

按序列索引迭代

迭代遍历每个项目的另一种方法是将索引偏移到序列本身中。 以下是一个简单的例子 -

#!/usr/bin/python3

fruits = ['banana', 'apple',  'mango']
for index in range(len(fruits)):
   print ('Current fruit :', fruits[index])

print ("Good bye!")

当上面的代码被执行时,它会产生以下结果 -

Current fruit : banana
Current fruit : apple
Current fruit : mango
Good bye!

在这里,我们接受了len()内置函数的协助,该函数提供元组中元素的总数以及range()内置函数,为我们提供了迭代的实际序列。

使用else语句和循环

Python支持具有与循环语句相关的else语句。

  • 如果else语句与for循环一起使用,则只有for循环正常终止(而不是遇到break语句),才会执行else块。

  • 如果else语句与while循环一起使用,则在条件变为false时执行else语句。

以下示例说明了else语句与for语句的组合,该语句在给定列表中搜索偶数。

#!/usr/bin/python3

numbers = [11,33,55,39,55,75,37,21,23,41,13]

for num in numbers:
   if num%2 == 0:
      print ('the list contains an even number')
      break
else:
   print ('the list doesnot contain even number')

当上面的代码被执行时,它会产生以下结果 -

the list does not contain even number

嵌套循环

Python编程语言允许在另一个循环内使用一个循环。 以下部分将举例说明这个概念。

语法

for iterating_var in sequence:
   for iterating_var in sequence:
      statements(s)
   statements(s)

Python编程语言中嵌套while循环语句的语法如下所示 -

while expression:
   while expression:
      statement(s)
   statement(s)

关于循环嵌套的最后一个注意事项是,您可以将任何类型的循环放入任何其他类型的循环中。 例如for循环可以在while循环内,反之亦然。

例子

以下程序使用嵌套for循环来显示1-10的乘法表。

#!/usr/bin/python3
import sys
for i in range(1,11):
   for j in range(1,11):
      k=i*j
      print (k, end=' ')
   print()

print()函数的内部循环有end ='',它附加了一个空格而不是默认的换行符。 因此,这些数字将出现在一行中。

最后的print()将在inner for循环的最后执行。

当上面的代码被执行时,它会产生以下结果 -

1 2 3 4 5 6 7 8 9 10 
2 4 6 8 10 12 14 16 18 20 
3 6 9 12 15 18 21 24 27 30 
4 8 12 16 20 24 28 32 36 40 
5 10 15 20 25 30 35 40 45 50 
6 12 18 24 30 36 42 48 54 60 
7 14 21 28 35 42 49 56 63 70 
8 16 24 32 40 48 56 64 72 80 
9 18 27 36 45 54 63 72 81 90 
10 20 30 40 50 60 70 80 90 100 

循环控制语句

循环控制语句从其正常序列改变执行。 当执行离开作用域时,在该作用域中创建的所有自动对象都将被销毁。

Python支持以下控制语句。

序号

控制语句 & 描述

1

break语句终止循环语句并将执行转移到循环之后的语句。

2

continue语句使循环跳过其正文的其余部分,并在重复之前立即重新测试其条件。

3

pass语句在需要语句时使用Python中的pass语句,但不希望执行任何命令或代码。

break语句

break语句用于提前终止当前循环。 放弃循环后,恢复下一个语句的执行,就像C中的传统break语句一样。

中断的最常见用法是当某些外部条件触发时,需要从循环中快速退出。 break语句可以用于while和for循环。

如果使用嵌套循环,则break语句将停止最内层循环的执行,并开始执行块之后的代码的下一行。

语法

break

#!/usr/bin/python3

for letter in 'Python':     # First Example
   if letter == 'h':
      break
   print ('Current Letter :', letter)
  
var = 10                    # Second Example
while var > 0:              
   print ('Current variable value :', var)
   var = var -1
   if var == 5:
      break

当上面的代码被执行时,它会产生以下结果 -

Current Letter : P
Current Letter : y
Current Letter : t
Current variable value : 10
Current variable value : 9
Current variable value : 8
Current variable value : 7
Current variable value : 6
Good bye!

以下程序演示了在循环列表中使用for循环的中断。 用户输入一个在列表中搜索到的号码。 如果找到了,那么循环终止于'找到'消息。

例子

#!/usr/bin/python3
no = int(input('any number: '))
numbers = [11,33,55,39,55,75,37,21,23,41,13]

for num in numbers:
   if num == no:
      print ('number found in list')
      break
else:
   print ('number not found in list')

上述程序将产生以下输出 -

any number: 33
number found in list

any number: 5
number not found in list

continue语句

Python中的continue语句将控件返回到当前循环的开始处。 遇到时,循环开始下一次迭代,而不执行当前迭代中的其余语句。

continue语句可以用于while和for循环。

语法

continue

#!/usr/bin/python3

for letter in 'Python':     # First Example
   if letter == 'h':
      continue
   print ('Current Letter :', letter)

var = 10                    # Second Example
while var > 0:              
   var = var -1
   if var == 5:
      continue
   print ('Current variable value :', var)
print ("Good bye!")

当上面的代码被执行时,它会产生以下结果&minus;

Current Letter : P
Current Letter : y
Current Letter : t
Current Letter : o
Current Letter : n
Current variable value : 9
Current variable value : 8
Current variable value : 7
Current variable value : 6
Current variable value : 4
Current variable value : 3
Current variable value : 2
Current variable value : 1
Current variable value : 0
Good bye!

pass语句

当语句需要语法时使用它,但不希望执行任何命令或代码。

pass语句是空操作; 执行时没有任何反应。 pass语句在你的代码最终会去的地方也很有用,但是还没有被写入,即在stub中。

语法

pass

例子

#!/usr/bin/python3

for letter in 'Python': 
   if letter == 'h':
      pass
      print ('This is pass block')
   print ('Current Letter :', letter)

print ("Good bye!")

当上面的代码被执行时,它会产生以下结果 -

Current Letter : P
Current Letter : y
Current Letter : t
This is pass block
Current Letter : h
Current Letter : o
Current Letter : n
Good bye!

迭代器和生成器

迭代器是一个允许程序员遍历集合中所有元素的对象,无论其具体实现如何。 在Python中,迭代器对象实现了两个方法,iter()和next()。

字符串,列表或元组对象可用于创建迭代器。

list = [1,2,3,4]
it = iter(list) # this builds an iterator object
print (next(it)) #prints next available element in iterator
Iterator object can be traversed using regular for statement
!usr/bin/python3
for x in it:
   print (x, end=" ")
or using next() function
while True:
   try:
      print (next(it))
   except StopIteration:
      sys.exit() #you have to import sys module for this

生成器是使用yield方法生成或生成一系列值的函数。

当一个生成器函数被调用时,它会返回一个生成器对象,甚至不会开始执行该函数。 当第一次调用next()方法时,该函数开始执行,直到它到达yield语句,该语句返回所产生的值。 产量保持跟踪,即记住最后一次执行,并且第二次next()调用从先前的值继续。

例子

下面的例子定义了一个生成器,它为所有的斐波那契数字生成一个迭代器。

!usr/bin/python3
import sys
def fibonacci(n): #generator function
   a, b, counter = 0, 1, 0
   while True:
      if (counter > n): 
         return
      yield a
      a, b = b, a + b
      counter += 1
f = fibonacci(5) #f is iterator object

while True:
   try:
      print (next(f), end=" ")
   except StopIteration:
      sys.exit()