什么第三种好了,上节课我们帮助一个家庭实现了和睦,这节课我们作为美好生活创建者,来帮助另一个家庭实现和睦
问题:小A同学马上就要期中考试了,可是他的心思不放在复习上,而是想去参加游戏公司举办的一个音乐会,他想和同学一起去上海看演出
请帮助小A同学编写一个Python程序,打印购票流程
回答:(提示见下面的自然语言描述的逻辑图)
如图:
print('打开购票网站')
# 你实现的代码
并且and
上面的复习我们只使用了一个条件,但如果没有父母的支持,恐怕小A同学的上海之行只能是美好的希望
在Python里我们如何实现并且这种条件呢?
tickets_avialable = True
parent_approved = True
if tickets_avialabe and parent_approved:
print('有票并且父母支持')
and在英文里是并且的意思,它是一个逻辑操作符,只有在左右条件都成立的情况下才返回True
问题:用Python打印 True and True,True and False,False and True,False and False看看都是什么结果
回答:<截图发送在微信群>
课堂练习
问题:小A同学没有考虑同学是否一起有时间去,那么请帮助他增加这个条件,只有在有票并且同学有时间去并且父母们都同意的情况下,才能开始快乐之旅
回答:<编写程序截图发送在微信群>
作业批注
最简单的写法其实是这样
# 程序 005.00
def tour(tickets_avialable, classmates_avialable, parents_approved):
if tickets_avialable and classmates_avialable and parents_approved:
print('集齐3颗龙珠,愿望达成!')
# 有票,同学有时间,父母们同意
print('理想情况:')
tour(True, True, True)
# 没票, 同学有时间,父母们同意
print('看运气:')
tour(False, True, True)
木木同学写的逻辑是这样的
# 程序 005.01
def tour(tickets_avialable, classmates_avialable, parents_approved):
if classmates_avialable and parents_approved:
print('集齐2颗龙珠')
if tickets_avialable:
print('3颗龙珠,愿望达成!')
else:
print('没票哭唧唧')
# 有票,同学有时间,父母们同意
print('理想情况:')
tour(True, True, True)
# 没票, 同学有时间,父母们同意
print('看运气:')
tour(False, True, True)
# 有票,同学有时间,但父母们不同意
print('羡慕别人家孩子')
tour(True, True, False)
把不同的条件打印一下:
第三种情况其实是去不了的,那么,到底为什么会出bug呢?
这就回到了第三课我们讲的缩进,条件语句里的代码块缩进对应着不同的条件执行,比如
if first_condition:
print('第一个条件满足')
if second_condition:
print('第一个条件满足并且第二个条件满足')
if third_condition:
print('因为缩进发生了变化,这里的第一个条件无论满足与否,都会执行')
回到程序员笑话
# 自然语言的模糊性会导致不同的程序员有不同的理解
def met_seller(flag, obj):
if flag:
print(f'遇到{obj}的')
else:
print(f'没遇到{obj}的')
return flag
def buy_something(count, obj):
print(f'买了{count}个{obj}')
# 遇到卖包子和西瓜的
if met_seller(True, '包子'):
buy_something(3, '包子')
if met_seller(True, '西瓜'):
buy_something(1, '西瓜')
# 没遇到卖包子的,但遇到卖西瓜的
if met_seller(False, '包子'):
buy_something(3, '包子')
if met_seller(True, '西瓜'):
buy_something(1, '西瓜')
# 没遇到卖包子的,但遇到卖西瓜的
if met_seller(False, '包子'):
buy_something(3, '包子')
if met_seller(True, '西瓜'):
buy_something(1, '西瓜')
后2个组合条件一模一样,但缩进不同,输出也不同,这是Python编程里常会出bug的地方,同学们一定要多注意:
Python里的缩进会影响代码块处于不同的逻辑分支,所以木木同学的程序一旦条件组合发生变化,就会出问题(程序员其实多数情况下是在处理条件来保证确定性,而AI其实用概率的方式来输出结果,这就是人工智能不能完全取代程序员的原因)
问题:请同学们修改程序005.01,确保所有条件组合下都是没有bug的
回答:<使用自己的编辑器或 python.twinsant.com完成作业并截图>
或者or
上面我们讲了Python的and,它表示并且的关系,在Python中或者的关系用or来表示
如果多个条件中有一个满足,整个条件表达式为真
那么如果我们把同学是否能去写成一个函数
# 程序005.02
def classmates_avialable(classmate_b, classmate_c, classmate_d):
return classmate_b or classmate_c or classmate_d
# 同学B, C, D都可以去
if classmates_avialable(True, True, True):
print('有一个同学可以去就可以去')
# 同学B无法去, C, D可以去
if classmates_avialable(False, True, True):
print('即使有人不能去')
我们就很方便地实现了有1个同学去就可以去的条件
问题:修改程序005.02,使得有2个同学可以去时才能够满足条件
回答:<在微信群截图发送作业>
绝不能 not
小A同学有点因为演唱会魂不守舍了,他的父母担心会影响他的期中考试,就使出家长们常用的杀手锏:如果其中考试没考好,演唱会想都别想
这就需要介绍逻辑条件的新成员 not
not 条件
not True # 变成了False
not False # 变成了True
课堂练习来了
问题:修改程序 005.00增加考试没考好的条件 exam_passed,使用not来实现父母的杀手锏
回答:微信群截图交作业