Python入门之(3.2)选择结构

目录

选择结构

1.1 if-else条件语句

1.2 if-elif-else判断语句

1.3 if语句的嵌套

1.4 switch语句的替代方案


 

选择结构

在实际应用中,有时需要通过某个判断来决定任务是否执行或者执行的方式。对于这样的情况,仅有顺序结构控制是不够的,需要选择结构。

Python中的if语句实现了选择结构控制,还可以使用if-elif结构来实现多分支控制。与其他程序设计语言相比,Python中没有switch语句,但是可以通过其他方式获得类似switch语句功能的效果。

1.1 if-else条件语句

Python中的选择结构使用if和else关键字来构造,语法如下:

if 条件:

     条件为真时要执行的语句块

else:

     条件为假时要执行的语句块

选择结构根据条件的判断结果来决定执行哪个语句块。在任何一次运行中,两个分支的语句块只执行其中的一个。不可能两个语句块同时执行。选择结构执行完毕,继续执行其后的语句。

注意:

  1. if和else语句末尾的冒号不能省略;
  2. Python通过严格的缩进来决定一个块的开始和结束,因此为真或为假的语句块都必须向右缩进相同的距离;
  3. 条件可以是关系表达式或逻辑表达式,也可以是各种类型的数据。对于数值型数据(int,float,complex),非零为真,零为假。对于字符串或者集合类数据,空字符串和空集合为假,其余为真;
  4. else分支可以省略。在单分支结构中,当条件为假时,继续执行if语句块之后的代码。else不能单独使用;
  5. if可以嵌套使用。

1.2 if-elif-else判断语句

在实际中经常存在两张以上的选择,比如学生成绩的等级转换,一个学生的成绩可以转换为5个不同的等级。Python中提供了if-else语句的扩展。

if-elif-else语法格式如下:

if 条件1:

      语句块1

elif 条件2:

      语句块2

......

elif 条件n:

      语句块n

else:

     语句块n+1

执行过程说明如下:

  1. 首先判断条件1,如果其值为True,执行语句块1,然后结束整个选择结构;
  2. 如果条件1的值为False,则判断条件2;如果其值为True,执行语句块2,然后结束整个选择结构;
  3. 如果条件2的值为False,继续往下判断其他条件的值;
  4. 如果所有条件的值都为False,则执行else之后的语句块n+1。

1.3 if语句的嵌套

在if-else语句的缩进块中可以包含其他if-else语句,称为嵌套if-else语句。在嵌套的选择结构中,根据对齐的位置来进行else与if的配对。简单的形式如下:

if 条件1:

      if 条件2:

         语句块1

    else:

         语句块2

else:

语句块3

执行过程说明如下:

  1. 条件1为真时,判断条件2。条件1为假时,执行语句块3;
  2. 如果条件2为真,执行语句块1,然后结束整个选择结构。如果条件2为假,执行语句块2,然后结束整个选择结构。

1.4 switch语句的替代方案

C语言或Java语言都支持switch多分支结构,但是Python没有提供switch关键字。然而在有些情况下,类似于switch结构的代码的清晰性和可读性要强于if多分支结构。

在Python中可以通过字典方式模拟类似的结果,其实现方法分为两步:首先,定义一个字典。字典是由键值对组成的集合。字典的使用方式见下一章,其次,调用字典的get()函数获取相应的表达式。

一个Python支持的算术运算符(+、-、*、/、%、//、^)的简单计算器的代码如下:

import re
print('简单计算器')
str=input('请输入只有一个运算符的式子(如5+3):')
p=re.compile(r'\d+')
op1=int(p.findall(str)[0])
op2=int(p.findall(str)[1])
q=re.compile(r'\W+')
opt=q.findall(str)[0]
if((opt=='/' or opt=='//' or opt=='%') and op2==0):
    print('除数为0,非法!')
    exit(0)
#定义运算字典,po是字典的名字,字典中用逗号隔开的是键值对
po={
    '+':op1+op2,
    '-':op1-op2,
    '*':op1*op2,
    '/':op1/op2,
    '^':op1^op2,
    '%':op1%op2,
    '//':op1//op2
}
result=po.get(opt)
print('{0}{1}{2}={3}'.format(op1,opt,op2,result))
  1. 原来正则表达式可以这样用,其实之前在C中也算是用过,好像是sscanf函数的时候

你可能感兴趣的:(Python)