Python实战编程教学第5章 选择语句

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

例3-3:编写程序,判断今天是今年的第几天。
import time
date = time.localtime()
#获取当前日期时间
year, month, day = date[:3]
day_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
>>> chTest = ['1', '2', '3', '4', '5'] >>> Join(chTest) '1,2,3,4,5' >>> Join(chTest, ':') '1:2:3:4:5' >>> Join(chTest, ' ') '1 2 3 4 5'
条件表达式
另外,在Python中,条件表达式中不允许使用赋值运算符“=”,避免了其他语 言中误将关系运算符“==”写作赋值运算符“=”带来的麻烦,例如下面的代码, 在条件表达式中使用赋值运算符“=”将抛出异常,提示语法错误。
>>> calendar.isleap(2016) True >>> calendar.isleap(2015) False
选择结构应用
或者使用下面的方法直接计算今天是今年的第几天
>>> datetime.date.today().timetuple().tm_yday 208 >>> datetime.date(2015,7,25).timetuple().tm_yday 206
if year%400==0 or (year%4==0 and year%100!=0): #判断是否为闰年 day_month[1] = 29
if month==1: print(day)
else: print(sum(day_month[:month-1])+day)
选择结构应用
其中闰年判断可以直接使用calendar模块的方法。
if 表达式1: 语句块1
elif 表达式2: 语句块2
elif 表达式3: 语句块3
else: 语句块4
其中,关键字elif是else if的缩写。
多分支结构
利用多分支选择结构将成绩从百分制变换到等级制
def func(score): if score > 100: return 'wrong score.must <= 100.' elif score >= 90: return 'A' elif score >= 80: return 'B' elif score >= 70: return 'C' elif score >= 60: return 'D' elif score >= 0: return 'E' else: return 'wrong score.must >0'
选择结构应用
▪ datetime还提供了其他功能
>>> now = datetime.datetime.now()
>>> now
datetime.datetime(2015, 12, 6, 16, 1, 6, 313898)
>>> now.replace(second=30)
#替换日期时间中的秒
datetime.datetime(2015, 12, 6, 16, 1, 30, 313898)
第5章选择语句
判断语句
红灯停,绿灯行
现实生活中,过马路要看红绿 灯,如果是绿灯才能过马路, 否则需要停止等待。
if 语句
if语句是最简单的条件判断语句, 它可以控制程序的执行流程。
if 判断条件: 满足条件时要做的事情1… 满足条件时要做的事情2… ...(省略)... 满足条件时要做的事情n…
选择结构应用
也可以使用datetime模块提供的功能来计算
>>> today = datetime.date.today() >>> today datetime.date(2015, 7, 27) >>> firstDay = datetime.date(today.year,1,1) >>> firstDay datetime.date(2015, 1, 1) >>> daysDelta = today-firstDay+datetime.timedelta(days=1) >>> daysDelta.days 208
条件表达式
在设计条件表达式时,如果能够大概预测不同条件失败的概率,并将多个条件 根据“and”和“or”运算的短路求值特性进行组织,可以大幅度提高程序运行 效率。下面的函数用来使用用户指定的分隔符将多个字符串连接成一个字符串, 如果用户没有指定分隔符则使用逗号。
>>> def Join(chList, sep=None): return (sep or ',').join(chList)
选择结构应用
选择结构应用
▪ 例3-1:面试资格确认。
age=24 subject="计算机" college="非重点" if (age > 25 and subject=="电子信息工程") or (college=="重点" and subject=="电子信息工程" ) or
(age<=28 and subject=="计算机"): print("恭喜,你已获得我公司的面试机会!") else: print("抱歉,你未达到面试要求")
▪ 从这个意义上来讲,几乎所有的Python合法表达式都可以作为条件表达式,包 括含有函数调用的表达式。
>>> if 3:
#使用整数作为条件表达式
print(5)
5
>>> a = [1, 2, 3]
>>> if a:
#使用列表作为条件表达式
print(a)
[1, 2, 3]
>>> a = []
>>> if a:
if-else语句
if 条件: 满足条件时要做的事情1 满足条件时要做的事情2 ...(省略)... 满足条件时要做的事情3
else: 不满足条件时要做的事情1 不满足条件时要做的事情2 ...(省略)... 不满足条件时要做的事情n
▪ 算术运算符:+、-、*、/、//、%、** ▪ 关系运算符:>、<、==、<=、>=、!=,可以连续使用,如
>>> a = 5 >>> print(6) if a>3 else print(5) 6 >>> print(6 if a>3 else 5) 6 >>> b = 6 if a>13 else 9 >>> b 9
双分支结构
#此时还没有导入math模块 >>> x = math.sqrt(9) if 5>3 else random.randint(1, 100) NameError: name 'math' is not defined >>> import math #此时还没有导入random模块,但由于条件表达式5>3的值为True,所以可以正常运行 >>> x = math.sqrt(9) if 5>3 else random.randint(1,100) #此时还没有导入random模块,由于条件表达式2>3的值为False,需要计算第二个表达式的值,因此出错 >>> x = math.sqrt(9) if 2>3 else random.randint(1, 100) NameError: name 'random' is not defined >>> import random >>> x = math.sqrt(9) if 2>3 else random.randint(1, 100)
print(a)
else:
print('empty')
empty
条件表达式
>>> i = s = 0
>>> while i <= 10:
#使用关系表达式作为条件表达式
s += i
i += 1
>>> print(s)
55
>>> i = s = 0
>>> while True:
#使用常量True作为条件表达式
>>> 1<2<3 True >>> 1<2>3 False >>> 1<3>2 True
▪ 测试运算符:in、not in、is、is not ▪ 逻辑运算符:and、or、not,注意短路求值 ▪ 位运算符:~、&、|、 ^、 <<、>> ▪ 矩阵乘法运算符:@
条件表达式
条件表达式
▪ 在选择和循环结构中,条件表达式的值只要不是False、0(或0.0、0j等)、空 值None、空列表、空元组、空集合、空字典、空字符串、空range对象或其他空 迭代对象,Python解释器均认为与True等价。
s += i
i += 1
if i > 10:
break
>>> print(s)
55
>>> s = 0
>>> for i in range(0, 11, 1): #遍历迭代对象中的所有元素
s += i
>>> print(s)
55
条件表达式
逻辑运算符and和or以及关系运算符具有惰性求值特点
条件表达式
>>> now+datetime.timedelta(days=5) #计算5天后的日期时间
datetime.datetime(2015, 12, 11, 16, 1, 6, 313898)
>>> now + datetime.timedelta(weeks=-5) #计算5周前的日期时间
datetime.datetime(2015, 11, 1, 16, 1, 6, 313898)
print('Empty')
['1', '2', '3', '4', '5']
双分支结构
条件表达式是否成立?
否 是
语句块2
语句块1
双分支结构
Python还支持如下形式的表达式:
value1 if condition else value2
当条件表达式condition的值与True等价时,表达式的值为value1,否则表达式的值为value2。另 外,在value1和value2中还可以使用复杂表达式,包括函数调用和基本输出语句。这个结构的表 达式也具有惰性求值的特点。
多分支结构
if 表达式1: 语句块1 if 表达式2: 语句块2 else: 语句块3
else: if 表达式4: 语句块4
注意:缩进必须要正确并且一致。
选择结构的嵌套
选择结构的嵌套
▪ 使用嵌套的选择结构实现百分制成绩到等级制的转换
>>> def func(score): degree = 'DCBAAE' if score > 100 or score < 0: return 'wrong score.must between 0 and 100.' else: index = (score - 60)//10 if index >= 0: return degree[index] else: return degree[-1]
>>> if a=3: SyntaxError: invalid syntax >>> if (a=3) and (b=4): SyntaxError: invalid syntax
if 表达式: 语句块
x = input('Input two number:')
a, b = map(int, x.split())
L
L
L
K1 K2
(1)or,并联 电路
K1 K2
(2)and,串联 电路
K
(3)not,短 路
条件表达式
▪ 比较特殊的运算符还有逻辑运算符“and”和“or”以及关系运算符,具有短路 求值或惰性求值的特点,只计算必须计算的表达式的值。
▪ 以“and”为例,对于表达式“表达式1 and 表达式2”而言,如果“表达式1” 的值为“False”或其他等价值时,不论“表达式2”的值是什么,整个表达式 的值都是“False”,此时“表达式2”的值无论是什么都不影响整个表达式的 值,因此将不会被计算,从而减少不必要的计算和判断。
if a > b:
a, b =Leabharlann Baidub, a
#序列解包,交换两个变量的值
print(a, b)
单分支选择结构
条件表达式是否成立?
是 语句块 否
if 表达式: 语句块1
else: 语句块2
>>> chTest = ['1', '2', '3', '4', '5'] >>> if chTest:
print(chTest) else:
相关文档
最新文档