程序语言在执行时,一共有三种结构:
顺序结构:语句顺序执行
分支结构:到某个节点后,根据条件选择相应语句或语句块执行
循环结构:根据判断条件,循环执行相应语句或语句块
接下来,将开始这三种控制结构的学习。
顺序结构顾名思义,即是代码由上至下执行,没有分支也没有循环。
在分支结构里,将会给大家介绍:
1.单分支结构
根据判断条件结果而选择不同向前路径的运行方式。
语法结构
if <条件>:
语句1
.......
其他语句
如:
#此段代码读取用户键盘输入的数字,如果数字等于99,打印出“猜对了”
guess = eval(input())#eval函数 去除字符串两侧的“”号
if guess == 99:
print("猜对了")
2.二分支结构
根据判断条件结果而选择不同向前路径的运行方式
语法结构:
if <条件>:
语句1
.......
else:
语句1
.......
其他语句
如
#此段代码读取用户键盘输入的数字,如果数字等于99,打印出“猜对了”,否则打印出“猜错了”
guess = eval(input())
if guess == 99:
print("猜对了")
else :
print("猜错了")
二分支结构的紧凑形式
适用于简单表达式的二分支结构
语法结构:
<表达式1> if <条件> else <表达式2>
判断条件是否为真,如果为真执行表达式1,否则执行表达式2
如上述代码的紧凑形式:
guess = eval(input())
#如果guess为99,向{}中填写“对”,否则填写“错”
print("猜{}了".format("对" if guess==99 else "错"))
3.多分支结构
根据多个判断条件的结果,选择语句执行
语法结构
if <条件1> :
<语句1>
.......
elif <条件2> :
<语句2>
……
else :
<语句N>
……
依次判断多个条件,如条件1满足,执行语句块1,执行完后跳出此次多分支结构。如条件1不满足,判断条件2,条件2满足执行语句块2,执行完后跳出此次多分支结构。如条件1、2均不满足,继续往下判断条件3、4....。若所有条件均不满足,最后执行else下的语句块(else及else下的语句块可一起省略,表示所有条件均不满足时,无相关执行语句)。
如:
#接受用户输入成绩,对用户输入的成绩进行成绩划分
# 60~70 D 70~80 C 80~90 B 90~100 A
score = eval(input())
if score >= 90 :
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
elif score >= 60:
grade = "D"
print("输入成绩属于级别{}".format(grade))
使用多分支结构时,需注意:
注意多条件之间的包含关系
注意变量取值范围的覆盖
测试多个条件
如:
刚“接受用户输入成绩,对用户输入的成绩进行成绩划分”这个功能,错误代码段如下:
score = eval(input())
if score >= 60:
grade = "D"
elif score >= 70:
grade = "C"
elif score >= 80:
grade = "B"
elif score >= 90:
grade = "A"
print("输入成绩属于级别{}".format(grade))
该代码段忽略了条件之间的包含关系,只要输入大于60的任何数,100、80、90等,都会输出D。
4.条件判断及组合
①操作符
字符串比较:
==,!=,is
如:
CurrencyStr[-1] is 'Y' #判断CurrencyStr字符串最后一个字符是否是Y
**********is与==的区别**************************************************
==比较操作符和is同一性运算符区别
==是python标准操作符中的比较操作符,用来比较判断两个对象的value(值)是否相等,例如下面两个字符串间的比较:
例1.
>>> a = 'cheesezh'
>>> b = 'cheesezh'
>>> a == b
True
is也被叫做同一性运算符,这个运算符比较判断的是对象间的唯一身份标识,也就是id是否相同。通过对下面几个list间的比较,你就会明白is同一性运算符的工作原理:
例2.
>>> x = y = [4,5,6]
>>> z = [4,5,6]
>>> x == y
True
>>> x == z
True
>>> x is y
True
>>> x is z
False
>>> print(id(x))
3075326572
>>> print( id(y) )
3075326572
>>> print (id(z) )
3075328140
前三个例子都是True,这什么最后一个是False呢?x、y和z的值是相同的,所以前两个是True没有问题。至于最后一个为什么是False,看看三个对象的id分别是什么就会明白了。
参考:https://www.cnblogs.com/wangkun122/p/9082088.html
**********is与==的区别********************结束*****************************
数字比较:
!= , == , > , < , >= , <=
列表常用操作符:
in
检查特定的值是否包含在列表、字符串中
如:CurrencyStr[-1] in ['Y', '$'] #检查CurrencyStr这个字符串的字符是否是Y或者$
not in
检查特定值是否不包含在列表中
②条件组合
通过连接词连接多个条件
5.程序的异常处理
num = eval(input("请输入一个整数: "))
print(num**2)
当用户没有输入整数时,会产生异常,程序终止执行。
在发生异常时,若希望不会影响程序继续执行,怎么处理?这时就需要使用try...except...语句捕捉相关异常。
语法结构:(异常类型可省略,表示捕捉所有异常)
try:
语句1
......
except <异常类型>:
语句1
......
在try语句块中执行语句,若发生异常,由except捕捉,捕捉后执行except块中的语句,执行结束后继续向下执行,不影响程序运行。
如:
#捕捉用户输入类型异常,当用户输入不是整数时,输出“输入不是整数”
try :
num = eval(input("请输入一个整数: "))
print(num**2)
except NameError:#标注异常类型,仅响应此类异常
print("输入不是整数")
亦可,省略异常类型,响应所有异常:
#捕捉用户输入异常
try :
num = eval(input("请输入一个整数: "))
print(num**2)
except :#不标注异常类型,响应所有异常
print("输入不是整数")
try....except...else
else对应语句块3在不发生异常时执行:类似不发生异常时的奖励语句
语法结构:
try :
<语句块1>
except :
<语句块2>
else :
<语句块3>
try..catch...finally
finally对应语句块无论是否发生异常,都一定执行。
语法结构:
try :
<语句块1>
except :
<语句块2>
finally :
<语句块3>
else与finally可以一同使用
语法结构:
try :
<语句块1>
except :
<语句块2>
else :
<语句块3>
finally :
<语句块4>