第一次个人编程作业——汉字编程

这个作业属于哪个课程 软件工程
这个作业要求在哪里 点我
这个作业的目标 用汉字编程
作业正文 如下
其他参考文献 ...
  • 代码行数:258
  • 分析时间:>1h
  • 编码时间:>6h

人生苦短,我用Python

需求分析

  • 看完题目要求,得知需要定义四种情况:
    • “整数”开头的句子
    • “变量名”开头的句子
    • “看看”开头的句子
    • “如果”开头的句子
  • 看完样例及注意事项,还需注意:
    • 用空格隔开词
    • 数字的转换(目前还只考虑数字0-10)
    • 交互式

一步步分析

输入句子input()

句子分割:看到输入的句子是用空格隔开的,那就很容易想到用.split()函数。

字符转换定义两个函数,trans_to_cn()函数把阿拉伯数字转为中文数字,trans_to_nums()另一个则相反。(目前还只考虑数字0-10)

/* 以零和0为例 */
def trans_to_nums(cn):
	if cn == "零":
		return 0

def trans_to_cn(num):
	if num == 0:
		return "零"

交互式:用while True(死循环)将核心代码包起来。

“整数”开头的句子:如“整数 气温 等于 十”。这就相当于变量名为 气温,赋值为10,我一开始想到的是用exec()函数来动态定义变量。

/* python可以用中文来定义变量名 */
exec("{}={}".format("气温", trans_to_nums("十")))
气温 += 5
print(气温)
/* 输出为15 */

之后我发现用字典就可以,还省事,pycharm也不会在 气温 下有报错的红线(因为要在运行中才会定义 气温 变量,所以在未运行时,pycharm会划红线提示未定义变量。)
首先定义一个空字典,之后添加“气温”为key,10为value的键值对。后续代码中都用字典。

names = {}
names["气温"] = 10
print(names)
/* 输出为{'气温': 10} */

“变量名”开头的句子:如果前面用的是exec(),那么这里用globals()函数来判断“变量名”是否定义,globals()函数会以字典类型返回当前位置的全部全局变量。

/* 接着前面exec()的例子 */
if "气温" in globals():
    print(气温)
/* 输出为15 */

如果前面用的是字典,那么这里只要判断“变量名”是否在key里即可。

/* 接着前面字典的例子 */
if "气温" in names.keys():
	print(names["气温"])
/* 输出为10 */

之后要考虑“增加”“减少”这两个运算关键词。如“气温 增加 三”或“气温 减少 三”

no = input()
if no.split()[1] == "减少":
	names[no.split()[0]] -= trans_to_nums(no.split()[2])
elif no.split()[1] == "增加":
	names[no.split()[0]] += trans_to_nums(no.split()[2])

“看看”开头的句子:如 “看看 气温”,就是打印key为气温的值,不要忘了转成中文数字就好了。

“如果”开头的句子:需要讨论很多种,如下图:

根据这几种情况可概括为下图(以“如果 气温 大于 八 则”开头为例):

然后就可以开写了,这里就不写了。
需要特别注意的是,“否则”后的判断语句需要按照数字从小到大依次写,不然可能产生列表越界报错,比如先写第十个的判断语句,可是“如果”语句并没有第十个,就会产生列表越界报错。

到此也就差不多了。
之后我还增加了:

  • 判断“乘以”、“除以”
  • “除以”可判断除数为0,除后结果为小数时可提示还原结果或者强制转换为整数
  • 退出功能
  • 捕获几个常见异常

Git镜像(官网下载实在慢):https://npm.taobao.org/mirrors/git-for-windows/
Git教程(廖雪峰牛逼!):https://www.liaoxuefeng.com/wiki/896043488029600

我的Github仓库地址:https://github.com/SunJC911/rjgc

还在持续改进中···

posted @ 2020-02-08 00:21  SunJC911  阅读(257)  评论(0编辑  收藏  举报