内容正文:
分支结构优化设计
——以机器人自主点餐器为例
豆浆油条
面线糊
面包牛奶
……
今天你吃了吗?
课时1
一
项目设想
能不能输入用餐类别让计算机做输出结果?
【语言描述算法】
如果输入食物类型是“早餐”,输出“面线糊”;
如果输入食物类型是“午餐”,输出“鸡排饭”;
如果输入食物类型是“晚餐”,输出“酸辣面”;
二
知识解惑
利用分支结构控制流程
程序根据条件有选择的向程序运行方向执行的结构
分支结构:
下雨?
T
打伞
单分支
密码?
F
密码错误
T
密码正确
双分支
【例如】
判断是否下雨,如果下雨就打伞。
【例如】
对输入的密码进行判断,正确就提示“密码正确”,如果错误就提示“密码错误”
……
90
80
60
0
>90
F
B
A
F
>80
F
>60
T
T
C
D
多分支
【例如】
对一个输入的成绩进行等级判断。
A
B
C
D
二
知识解惑
利用分支结构控制流程
早餐?
F
鸡排饭
面线糊
F
午餐
F
晚餐
T
T
酸辣面
错误提示
二
知识解惑
利用分支结构控制流程
【例如】
根据输入不同饮食类型,输出不同结果。
多分支结构
分支结构语法
if <条件>:
<语句组>
if <条件>:
<语句组1>
esle:
<语句组1>
if <条件1>:
<语句组1>
elif <条件2>:
<语句组2>
elif <条件3>:
<语句组3>
……
else:
<语句组N>
知识解惑
单分支
双分支
多分支
条件怎么描述?
if meal = "早餐":
if meal == "早餐":
?
三
编程实施
关系运算符:
大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)、不等于(!=)
if meal = "早餐":
if meal == "早餐":
?
= 表示赋值
== 判断两边关系:是否相等、一致
【例】判断一个数是否大于10。
if int(num)>10:
print(num)
if pwd == "AAaa1234":
print("密码正确")
else:
print("密码错误")
【例】判断密码是否正确。
三
编程实施
if meal == "早餐":
print("面线糊")
if meal == "午餐":
print("鸡排饭")
if meal == "午餐":
print("酸辣面")
print("请输入用餐类型:早餐、午餐或者晚餐:")
meal=input()
if meal=="早餐":
print("面线糊")
elif meal =="午餐":
print("鸡排饭")
elif meal=="晚餐":
print("麦当劳")
else:
print("输入有误!机器人无法提供建议。")
参考
三
编程实施
如何增强程序灵活性
输入“早餐”或“早饭”或者“上午”
三
编程实施-提升完善
逻辑运算符:
and 与
or 或
not 非
“早餐” 或 “早饭” 或 “上午”
if meal=="早餐":
print("面线糊")
if meal=="早餐" or meal=="早饭" :
代码调试
展示交流
meal=="早餐" or meal=="早饭"
if meal=="午餐":
print("鸡排饭")
if meal=="午餐" or meal=="午饭" :
if meal=="晚餐":
print("酸辣面")
if meal=="晚餐" or meal=="晚饭" :
四
课堂小结
知识点回顾
分支结构:程序根据条件有选择的向程序运行方向执行的结构
语法格式:IF<条件>:<语句块1>else:<语句块2>
关系运算符:> < == >= <= !=
程序可以如何改进会更合理?
……
增加食物选择
生成交互式窗口
课时2
一
项目回顾
由用户输入用餐类型让机器选择餐点
早餐:面线糊
午餐:鸡排饭
晚餐:肯德基
print("请输入用餐类型:早餐、午餐或者晚餐:")
meal=input()
if meal=="早餐":
print("面线糊")
elif meal =="午餐":
print("鸡排饭")
elif meal=="晚餐":
print("麦当劳")
else:
print("输入有误!机器人无法提供建议。")
一
项目回顾
二
程序优化设想
如何让计算机帮忙
实现多样化选择?
meal="早餐"
选择早餐食物
选择午餐食物
选择晚餐食物
T
F
meal="午餐"
T
F
meal="晚餐"
T
F
输出错误提示
输出被选择的食物
二
程序优化设想
输入存储好多个不同类型的食物
用流程图整理算法思路
问题1:怎么存储多个食材?
二
程序优化设想
问题2:怎么实现让计算机随机选择输出?
让计算机随机选择一个食物输出
优化2
解决:回顾“最强大脑游戏”,将食物存放在列表里
food= ["面线糊","牛奶面包","豆浆油条"]
food= ["鸡排饭","卤肉饭","扬州炒饭"]
food= ["酸辣面","土豆粉","兰州拉面"]
让计算机存储多个食材
优化1
解决:加载random库,调用random.choice()函数输出
random.choice(food)
二
程序优化设想
代码参考
二
程序优化设想
print("请输入用餐类型:早餐、午餐或者晚餐:")
meal=input()
if meal=="早餐":
print("面线糊")
elif meal =="午餐":
print("鸡排饭")
elif meal=="晚餐":
print("麦当劳")
else:
print("输入有误!机器人无法提供建议。")
点餐V1.0版
import random
meal = input("请输入用餐类型(早餐、午餐或晚餐):")
if meal == "早餐":
food = ["面线糊", "牛奶面包", "豆浆油条"]
elif meal == "午餐":
food = ["鸡排饭", "卤肉饭", "扬州炒饭"]
elif meal == "晚餐":
food = ["酸辣面", "土豆粉", "兰州拉面"]
else:
print("输入有误!机器人无法提供建议。")
print(random.choice(food))
点餐V2.0版
继续优化
?
优化3
增加一个可交互的窗口,进行可视化处理。如图所示
解决:利用tkinter库进行窗口创建
窗口标题
文字标签
文本输入框
按钮
二
程序优化设想
点餐V3.0版
增加图片修饰程序;
修改提示文字:字号、颜色等
调整窗口大小等;
……
复制代码并进行调试、测试
点餐V4.0版
三
拓展完善程序
增加图片修饰程序;
修改提示文字:字号、颜色等
调整窗口大小等;
image = tk.PhotoImage(file="robot.png")
image_label = tk.Label(root, image=image)
image_label.pack(pady=5)
# 加载图片
instruction1 = tk.Label(root, text="机器自助点餐器",font=(16),fg="red")
instruction1.pack(pady=10)
root.geometry("400x400") # 设置窗口大小
三
拓展完善程序
点餐V4.0版
点餐V4.0版
头脑风暴
修改升级
5.0
6.0
……
?
点餐V4.0版
点餐V4.0版
点餐V2.0版
点餐V3.0版
四
课堂总结
$$