Python_04_条件与循环

Python 条件语句

Python条件语句是根据 一条或多条语句的执行结果(True或者False)来决定执行的代码块。

可以通过下图来简单了解条件语句的执行过程:

Python 条件语句

Python程序语言指定:

任何非0非空(null)值为true,

0 或者 null为false。


Python 编程中 if 语句用于控制程序的执行,基本形式为:

if 判断条件:
    执行语句……
else:
    执行语句……

其中”判断条件”成立时(非零非null),则执行后面的语句,

执行的内容可以多行,以缩进来区分表示同一范围。


else 为可选语句,在条件不成立时执行,

具体例子如下:

# coding=utf8
# 例1:if 基本用法

age = 12
name = 'Mathilda'
isLoli = False
if age > 8 and age < 14:         # 判断变量否为'Lolita'
    isLoli = True          # 条件成立时设置标志为真
    print 'a cute loli'    # 并输出欢迎信息
else:
    print age              # 条件不成立时输出变量名称

输出结果为:

>>> a cute loli         # 输出结果

if 语句的判断条件可以用>(大于)、=(大于等于)、<=(小于等于)等来表示其关系。

当判断条件为多个值时,可以使用以下elif形式:

if 判断条件1:
    执行语句1……
elif 判断条件2:
    执行语句2……
elif 判断条件3:
    执行语句3……
else:
    执行语句4……

实例如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 例2:elif用法
 
age = 13     
if age < 8:            # 判断num的值
    print 'baby'        
elif age < 14:
    print 'loli'
elif age < 18:
    print 'lass'
elif num < 0:           # 值小于零时输出
    print 'error'
else:
    print 'adult'     # 条件均不成立时输出

输出结果为:

>>> loli     # 输出结果

由于 python 并不支持 switch 语句,所以多个条件判断,只能用 elif 来实现,

如果判断需要多个条件需同时判断时,

可以使用 or (或),表示两个条件有一个成立时判断条件成功;

使用 and (与)时,表示只有两个条件同时成立的情况下,判断条件才成功。

#!/usr/bin/python
# -*- coding: UTF-8 -*-

# 例3:if语句多个条件

age = 13
if age > 8 and age < 14:    # 判断值是否在8~14之间
    print 'hello lolita'
>>> hello lolita		# 输出结果

age = 13
if age < 8 or age > 14:    # 判断值是否在小于8或大于14
    print 'loli じゃない'
else:
    print 'lolita'
>>> lolita		# 输出结果

age = 13
# 判断值是否在8~12或者12~14之间
if (age > 8 and age < 12) or (age >= 12 and age <= 14):    
    print 'loli'
else:
    print 'loli じゃない'
>>> loli		# 输出结果

当if有多个条件时可使用括号来区分判断的先后顺序,括号中的判断优先执行,

此外 and 和 or 的优先级低于  >(大于)、<(小于)等判断符号,

即  大于>和小于<   在没有括号的情况下, 会比与或要优先判断。


简单的语句组

你也可以在同一行的位置上使用if条件判断语句,如下实例:

#!/usr/bin/python 
# -*- coding: UTF-8 -*-
 
age = 13 
 
if ( age  == 13 ) : print "娉娉袅袅十三余" 
 
print "Hello Lolita"

以上代码执行输出结果如下:

娉娉袅袅十三余
Hello Lolita

Python 循环语句

本章节将向大家介绍Python的循环语句,

程序在一般情况下是按顺序执行的。

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

循环语句允许我们执行一个语句或语句组多次,

下面是在大多数编程语言中的循环语句的一般形式:

loop_architecture

Python提供了for循环while循环

(在Python中没有do..while循环):

循环类型 描述
while 循环 在给定的判断条件为 true 时执行循环体,否则退出循环体。
for 循环 重复执行语句
嵌套循环 你可以在while循环体中嵌套for循环

 


循环控制语句

循环控制语句可以强行更改语句执行的顺序

Python支持以下循环控制语句:

控制语句 描述
break 语句 在语句块执行过程中终止循环,并且跳出整个循环
continue 语句 在语句块执行过程中终止当前循环,跳出该次循环,执行下一次循环。
pass 语句 pass是空语句,是为了保持程序结构的完整性。

Python While循环语句

Python 编程中 while 语句用于循环执行程序,

即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务。

其基本形式为:

while 判断条件:
    执行语句……

执行语句可以是单个语句或语句块。

判断条件可以是任何表达式,任何非零、或非空(null)的值均为true。

当判断条件假false(即 0 或 null)时,循环结束。

执行流程图如下:

python_while_loop

Gif 演示 Python while 语句执行过程

loop-over-python-list-animation


实例:

#!/usr/bin/python

count = 5
while (count < 8):    
    print 'The count is:', count    
    count = count + 1  
print "Good bye!"

以上代码执行输出结果:

The count is: 5
The count is: 6
The count is: 7
Good bye!

while 语句时还有另外两个重要的命令 continue,break 来跳过循环,

continue 用于跳过该次循环

break 则是用于退出循环

此外”判断条件”还可以是个常值,表示循环必定成立,

具体用法如下:

# continuebreak 用法

i = 1
while i < 10:        
    i += 1     
    if i%2 > 0:     # 非双数时跳过本次循环,进入下次循环,因此奇数不会输出
        continue
    print i         # 输出双数246810

i = 5
while 1:            # 循环条件为1必定成立
    print i         # 输出5,6,7
    i += 1
    if i > 7:     # 当i大于7时跳出循环
        break

无限循环

如果条件判断语句永远为 true,循环将会无限的执行下去,

如下实例:

#coding=utf-8
#!/usr/bin/python

isForever = 1
while isForever == 1 :  # 该条件永远为true,循环将无限执行下去
   num = raw_input("Enter a number  :")
   print "You entered: ", num

print "Good bye!"

以上实例输出结果:

Enter a number  :67
You entered:  67
Enter a number  :520
You entered:  520
Enter a number  :5
You entered:  5
Enter a number between :Traceback (most recent call last):
  File "test.py", line 5, in <module>
    num = raw_input("Enter a number :")
KeyboardInterrupt

注意:以上的无限循环你可以使用 CTRL+C 中断循环


循环使用 else 语句

在 python 中,for … else 表示下面这样的意思:

for 中的语句和普通的没有区别,

但是, else 中的语句会在循环正常执行完的情况下开始执行,

(即 for 循环 不是 通过 break 跳出循环而中断的

 

while … else 也是一样。

#!/usr/bin/python

age = 12
while age < 15:
   print age, " is  less than 15"
   age = age + 1
else:
   print age, " is not less than 15" 

以上实例输出结果为:

12 is less than 15
13 is less than 15
14 is less than 15
15 is not less than 15  // 在while循环正常结束后,执行else中的语句

简单语句组

类似if语句的语法,

如果你的while循环体中只有一条语句,

那么,你可以将该语句与while写在同一行中,

如下所示:

#!/usr/bin/python

isLoli = 1

while (isLoli): print 'She really is a loli!'

print "Good bye!"

注意:以上的无限循环你可以使用 CTRL+C 中断循环


While循环语句实例

猜拳小游戏

#!/usr/bin/python
# -*- coding: UTF-8 -*-
#coding=utf-8
// 未闻花名 vwhm.net
import random
while 1:
    tmp = int(random.randint(1, 3))
    if tmp == 1:
        computer = "石头"
    elif tmp == 2:
        computer = "剪子"
    elif tmp == 3:
        computer = "布"
    player = raw_input('输入 石头、剪子、布,输入"end"结束游戏:')
    blist = ['石头', "剪子", "布"]
    if (player not in blist) and (player != 'end'):
        print "输入错误,请重新输入!"
    elif (player not in blist) and (player == 'end'):
        print "\n游戏退出中..."
        break
    elif player == computer :
        print "电脑出了: " + computer + ",平局!"
    elif (player == '石头' and computer =='剪子') or (player == '剪子' and computer =='布') or (player == '布' and computer =='石头'):
        print "电脑出了: " + computer +",你赢了!"
    elif (player == '石头' and computer =='布') or (player == '剪子' and computer =='石头') or (player == '布' and computer =='剪子'):
        print "电脑出了: " + computer +",你输了!"

以上实例输出结果为:

输入 石头、剪子、布,输入"end"结束游戏:石头
电脑出了: 石头,平局!
输入 石头、剪子、布,输入"end"结束游戏:石头    
电脑出了: 剪子,你赢了!
输入 石头、剪子、布,输入"end"结束游戏:

Python for 循环语句

Python for循环可以遍历任何序列的项目,如一个List列表或者一个字符串。

语法:

for循环的语法格式如下:

for iterating_var in sequence: 
   statements(s)

流程图:

python_for_loop

实例:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

for letter in 'Beyond':     # 第一个实例
   print '当前字母 :', letter

tmpList = ['未闻花名', 'vwhm.net',  'beyond']
for str in tmpList:        # 第二个实例
   print '当前字母 :', str

print "Good bye!"

以上实例输出结果:

Current Letter : B
Current Letter : e
Current Letter : y
Current Letter : o
Current Letter : n
Current Letter : d
Current fruit : 未闻花名
Current fruit : vwhm.net
Current fruit : beyond
Good bye!

 


通过序列索引迭代

另外一种执行循环的遍历方式是通过索引,如下实例:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

tmpList = ['未闻花名', 'vwhm.net',  'beyond']
for i in range(len(tmpList)):
   print '当前内容 :', tmpList[i]

print "Good bye!"

以上实例输出结果:

当前内容 : 未闻花名
当前内容 : vwhm.net
当前内容 : beyond
Good bye!

以上实例我们使用了内置函数 len() 和 range(),

函数 len() 返回列表的长度,即元素的个数

range返回一个序列的数。


循环使用 else 语句 

在 python 中,for … else 表示这样的意思:

for 中的语句和普通的没有区别,

但是, else 中的语句会在for循环正常执行完的情况下开始执行

(即 for 不是通过 break 跳出循环而中断的)

 

while … else 也是一样。

如下实例:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

for num in range(8,14):  # 迭代 8 到 14 之间的数字
   for factor1 in range(2,num): # 根据因子迭代
      if num%factor1 == 0:      # 确定第一个因子
         factor2 = num/factor1          # 计算第二个因子
         print '%d 等于 %d * %d' % (num,factor1,factor2)
         break            # 跳出当前for...else循环
   else:                  # 循环的 else 部分,只会在for正常结束后才执行
      print num, '是一个质数'

以上实例输出结果:

8 等于 2 * 4
9 等于 3 * 3
10 等于 2 * 5
11 是一个质数
12 等于 2 * 6
13 是一个质数

Python break 语句

Python break语句,就像在C语言中,打破了最小封闭for或while循环

break语句用来终止循环语句,

即使 循环条件 不是False 或者 序列 还没被完全递归完,也会停止执行循环语句。

break语句用在while和for循环中。

如果您使用嵌套循环,break语句只会停止执行最深层的循环,并开始执行下一行代码。


Python语言 break 语句语法:

break

流程图:

cpp_break_statement

实例:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
for letter in 'Beyond':     # 第一个实例
   if letter == 'o':
      break
   print '当期字母 :', letter
  
var = 14                    # 第二个实例
while var > 0:              
   print '当期变量值 :', var
   var = var -1
   if var == 10:   # 当变量 var 等于 10 时退出循环
      break
 
print "Good bye!"

以上实例执行结果:

当期字母 : B
当期字母 : e
当期字母 : y
当期变量值 : 14
当期变量值 : 13
当期变量值 : 12
当期变量值 : 11
Good bye!

Python continue 语句

Python continue 语句跳出本次循环

break跳出整个循环

continue 语句用来告诉Python跳过当前循环的剩余语句,然后继续进行下一轮循环

continue语句用在while和for循环中。

Python 语言 continue 语句语法格式如下:

continue

流程图:

cpp_continue_statement

实例:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

for letter in 'Beyond':     # 第一个实例
   if letter == 'y':        # 跑过输出y字符
      continue
   print '当前字母 :', letter

age = 15                    # 第二个实例
while age > 11:              
   age = age -1
   if age == 12:
      continue
   print '当前变量值 :', age
print "Good bye!"

以上实例执行结果:

当前字母 : B
当前字母 : e
当前字母 : o
当前字母 : n
当前字母 : d
当前变量值 : 14
当前变量值 : 13
当前变量值 : 11
Good bye!

实例:

可以使用Python的continue语句跳过某些循环,

只打印0-10之间的奇数:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

n = 0
while n < 10:
    n = n + 1
    if n % 2 == 0:      # 如果n是偶数,continue,即跳过打印语句
        continue        # continue语句会直接开始继续新一轮循环,其后的print()语句不会被执行
    print(n)

Python pass 语句

Python pass是空语句,是为了保持程序结构的完整性。

pass 不做任何事情,一般用做占位语句

Python 语言 pass 语句语法格式如下:

pass

实例:

# -*- coding: UTF-8 -*- 
#!/usr/bin/python

# 输出 Python 的每个字母
for letter in 'Beyond':
   if letter == 'o':
      pass
      print '这是 pass 块'
   print '当前字母 :', letter

print "Good bye!"

以上实例执行结果:

当前字母 : B
当前字母 : e
当前字母 : y
这是 pass 块
当前字母 : o
当前字母 : n
当前字母 : d
Good bye!

更多实例

打印1-9三角形阵列:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

for i in range(1,9):    # range 是前闭后开,所以[1-8]
    for k in range(1,i):    # range 是前闭后开,所以[1-7]
        print k,
    print "\n"

以上实例输出结果:

1 

1 2 

1 2 3 

1 2 3 4 

1 2 3 4 5 

1 2 3 4 5 6 

1 2 3 4 5 6 7 

打印空心等边三角形:

一种4种情况需要判断:

1. 非最后一行,从列中间往两边, 对角线上的列,输出

2. 非最后一行,从列中间往两边,非对角线上的列

3. 最后一行奇数列

4. 最后一行偶数列​

#coding=utf-8
# 空心三角形
# 未闻花名 vwhm.net
# 4行
rowCount = int(raw_input('输入行数:'))  
# [0-3]行
for row in range(0, rowCount):            
    # 7列, [0 - 6]列
    for column in range(0, 2 * rowCount - 1):  
        # 不是最后一行 并且 从中间列往两边分布 
        leftToCenter = column == rowCount - 1 - row
        rightToCenter = column == rowCount  - 1 + row
        # 非最后一行,从中间往两边对角线上的列『 * 』
        if (row != rowCount - 1) and (leftToCenter or rightToCenter):
            print " * ",  
        # 最后一行    
        elif row == rowCount - 1:
            # 最后一行,偶数列 『 * 』
            if column % 2 == 0:
                print " * ",  
            # 最后一行,奇数列  3个空格 『   』  
            else:
                print "   ",    
        # 非最后一行, 从中间往两边, 非对角线上的列,3个空格 『   』        
        else:
            print "   ",    
    print "\n"

# 运行结果: rowCount 为 4 时:
"""""""""""""""""""""""""""
             *              

         *       *          

     *               *      

 *       *       *       * 
"""""""""""""""""""""""""""


Python 循环嵌套

Python 语言允许在一个循环体里面嵌入另一个循环。

Python for 循环嵌套语法:

for i in sequence_1:
   for j in sequence_2:
      statements_1()
   statements_2()

Python while 循环嵌套语法:

while expression_1:
   while expression_2:
      statement_1(s)
   statement_2(s)

你可以在循环体内嵌入其他的循环体,

如在while循环中可以嵌入for循环,

反之,你可以在for循环中嵌入while循环。


实例:

以下实例使用了嵌套循环输出2~14之间的素数:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

i = 2
while(i < 14):
   j = 2
   # 素数核心算法: i/j
   while(j <= (i/j)):
      # 或者 if i%j == 0: break
      if not(i%j): break
      j = j + 1
   # 循环结束后,检查j的递增情况
   if (j > i/j) : print i, " 是素数"
   i = i + 1

print "未闻花名 vwhm.net"

以上实例输出结果:

2 是素数
3 是素数
5 是素数
7 是素数
11 是素数
13 是素数
未闻花名 vwhm.net

更多实例

实例一:使用循环嵌套来获取14以内的质数

通过for…else来实现

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 未闻花名 vwhm.net
primeList = []
i=2
for i in range(2,14):
   j=2
   for j in range(2,i):
      if(i%j==0):
         break
   # 如果未发生break,则当for循环正常结束后会来到else内的代码
   else:
      primeList.append(i)
print(primeList)

输出结果:

[2, 3, 5, 7, 11, 13]


实例二:使用嵌套循环实现 |> 形状

#coding=utf-8
# 未闻花名 vwhm.net

i = 1
while i <= 9:
   if i <= 5:
      print ("*"*i)
   elif i <= 9:
      j = 10 - i
      print("*"*j)
   i = i + 1
else :
   print("")

"""
*
**
***
****
*****
****
***
**
*
"""