一、单词识别
周一到周日的英文依次为:Monday、Tuesday、Wednesday、Thusday、Friday、Saturday和Sunday,这些单词的首字母基本都不相同,在这7个单词的范围之内,通过第一或前两个字母即可判断对应的是哪个单词。
本任务要求编写程序,实现根据第一或前两个字母输出Monday、Tuesday、Wednesday、Thusday、Friday、Saturday和Sunday之中完整单词的功能。
分析:
本任务的完整单词包含7个,它们分别是Monday、Tuesday、Wednesday、Thusday、Friday、Saturday和Sunday。其中,Monday、Wednesday、Friday可根据用户输入的首字母判断, Tuesday和Thusday、Saturday和Sunday需根据用户连续输入两次字母才能进一步判断,具体规则如下:
(1)若用户第一次输入的字母为 “m”、“w”和“f”,则直接返回“Monday”、“ Wednesday”和“Friday”;
(2)若用户第一次输入“t”,需要再输入第2个字母进行判断,输入“h”返回“Thusday”,输入“u”返回“Tuesday”;
(3)若用户第一次输入“s”,需要再输入第2个字母进行判断,输入“a”返回“Saturday”,输入“u”返回“Sunday”;
(4)若用户第一次输入其它字母,则提示用户“请输入正确的字母”。
从以上分析可知,第一个或第二个字母可以作为获取完整单词的键,因此这里可以创建一个包含7个键值对的字典,其中,键“m”、“w”和“f”对应的值为“Monday”、“Wednesday”和“Friday”,则键“t”和“s”对应的值是字典{'h': 'thursday', 'u': 'tuesday'}和{'a': 'saturday', 'u': 'sunday'}。
二、汉诺塔
汉诺塔是一个可以使用递归解决的经典问题,它源于印度一个古老传说:大梵天创造世界的时候做了三根金刚石柱子,其中一根柱子从下往上按照从大到小的顺序摞着64片黄金圆盘,大梵天命令婆罗门把圆盘从下面开始按照从大到小的顺序重新摆放在另一根柱子上,并规定:小圆盘上不能放大圆盘,三根柱子之间一次只能移动一个圆盘。问一共需要移动多少次,才能按照要求移完这些圆盘。三根金刚柱子与圆盘摆放方式如图1所示。
图1 汉诺塔格局图
本任务要求编写程序,实现输出汉诺塔移动过程的功能。
分析:
我们先来分析一下移动n个圆盘的过程:
(1)假设现在A柱子上只有1个圆盘,此时无需B柱子中转而直接将圆盘从A柱子移动到C柱子上。
(2)假设A柱子上有2个圆盘,此时可以先将小盘子移动到B柱子上,再将大盘子移动到C柱子上,最后将小盘子移动到C柱子上。我们既可以借助柱子B将2个盘子从A移动到C,也可以借助C将2个盘子从A移动到B。
(3)假设A柱子上有3个圆盘,则可以根据移动2个盘子的过程,先借助柱子C将柱子A上的两个盘子先移动到柱子B,将A上的大盘子移动到柱子C上,此时A成为空柱子,再借助柱子A,将柱子B上两个盘子移动到C。
(4)以此类推,假设A柱子上有n个盘子,则可以将n-1个盘子看作一个整体,也就是递归中的子问题。例如,借助柱子C先将柱子A上的n-1个盘子移动到柱子B上,再将柱子A上最大的盘子移动到柱子C上,此时A成为空柱子,最后借助柱子A,将柱子B上n-2个盘子移动到柱子A上,将柱子B上最大的盘子移动到柱子C上,此时B成为空柱子......如此往复。
经过上述分析的过程,递归函数边界条件和递归公式分别如下:
(1)边界条件:当n为1时,直接将盘子从A移动到C;
(2)递归公式:当n为n时,直接将n-1个盘子先从A移动到空柱子B上,再将第n个盘子移动到柱子C上,最后将柱子B上的n-1个盘子移动到柱子C上。
运行程序,在控制台输入“1”之后的结果如下所示:
请输入盘子的数量:1
A -> C
再次运行程序,在控制台输入“2”之后的结果如下所示:
请输入盘子的数量:2
A -> B
A -> C
B -> C
再次运行程序,在控制台输入“3”之后的结果如下所示:
请输入盘子的数量:3
A -> C
A -> B
C -> B
A -> C
B -> A
B -> C
A -> C
三、学生信息管理系统
学生信息管理系统是用于管理学生信息的管理软件,它具备学生信息的查找、修改、增加和删除功能,利用该系统可实现学生信息管理的电子化,提高信息管理效率。
本任务要求编写程序,实现学生信息管理系统。
分析:
由任务描述可知,本实例的学生管理系统具备5个功能,分别是打印功能菜单、添加学生信息、删除学生信息、修改学生信息和显示学生信息,每个功能可以抽取成一个函数,在程序执行的过程中调用即可。
除此之外,还可以定义一个主函数main(),该函数主要描述使用一次学生管理系统的过程,包括打印功能菜单、接收用户的输入、根据输入调用函数执行相应的功能。
运行程序,在控制台输入“1”之后的结果如下所示:
==============================
学生管理系统
1.添加学生信息
2.删除学生信息
3.修改学生信息
4.显示所有学生信息
0.退出系统
==============================
请选择功能:1
请输入新学生的姓名:小红
请输入新学生的性别:女
请输入学生的手机号码:123456
在控制台输入“3”之后的结果如下所示:
请选择功能:3
请输入学生序号:1
请输入学生姓名:小明
请输入学生性别(男/女):男
请输入学生的手机号码:123
在控制台输入“4”之后的结果如下所示:
请选择功能:4
学生的信息如下:
==============================
序号 姓名 性别 手机号码
1 小明 男 123
在控制台输入“2”之后的结果如下所示:
在控制台输入“0”之后的结果如下所示:
请选择功能:0
亲,真的要退出么?(Yes or No):Yes
四、生词本
背单词是英语学习中最基础的一环,不少学生在背诵单词的过程中会整理自己的生词本,以不断拓展自己的词汇量。本实例要求编写生词本程序,该程序需具备以下功能。
(1)查看生词列表功能:输出生词本中全部的单词;若生词本中没有单词,则提示“生词本内容为空”。
(2)背单词功能:从生词列表中取出一个单词,要求用户输入相应的翻译,输入正确提示“太棒了”,输入错误提示“再想想”。
(3)添加新单词功能:用户分别输入新单词和翻译,输入完成后展示添加的新单词和翻译,并提示用户“单词添加成功”。若用户输入的单词已经存在于生词本中,提示“此单词已存在”。
(4)删除单词功能:展示生词列表,用户输入单词以选择要删除的生词,若输入的单词不存在提示“删除的单词不存在”,生词删除后提示“删除成功”。
(5)清空生词本功能:查询生词列表,若列表为空提示“生词本内容为空”,否则清空生词本中的全部单词,并输出提示信息“生词本已清空”。
(6)退出生词本功能:退出生词本。
分析:
本实例的生词本主要用于保存多个单词及其翻译,其中的单词与翻译是互相对应的,且单词是不能重复的,因此这里可将每组单词与翻译视为一个字典,将生词本视为包含多个单词的集合。但集合中存储的元素必须是可哈希类型的,其中不能包含字典,这时需要将字典转换为字符串之后再添加到集合中。
生词本具有5个功能,分别是查看生词本、背单词、添加新单词、删除单词和清空生词本。其中背单词的功能相当于遍历集合元素的操作,添加新单词的功能相当于往集合中添加元素的操作,删除单词和清空生词本的功能相当于删除和清空集合元素的操作。
运行程序,在控制台输入“3”之后的结果如下所示:
====================
欢迎使用生词本
1.查看生词本
2.背单词
3.添加新单词
4.删除单词
5.清空生词本
6.退出生词本
====================
请输入功能编号:3
请输入新单词:new
请输入单词翻译:新的
单词添加成功
new: 新的
请输入功能编号:3
请输入新单词:perfect
请输入单词翻译:完美的
单词添加成功
perfect: 完美的
在控制台输入“1”之后的结果如下所示:
请输入功能编号:1
{'new': '新的', 'perfect': '完美的', }
在控制台输入“2”之后的结果如下所示:
请输入功能编号:2
请输入new翻译:
新的
太棒了
请输入perfect翻译:
简陋的
再想想
在控制台输入“4”之后的结果如下所示:
请输入功能编号:4
{'new': '新的', 'perfect': '完美的', }
请输入要删除的单词:new
删除成功
在控制台输入“5”之后的结果如下所示:
请输入功能编号:5
生词本清空成功