第一次个人编程作业——汉字编程
这个作业属于哪个课程 | 软件工程 |
---|---|
这个作业要求在哪里 | 点我 |
这个作业的目标 | 用汉字编程 |
作业正文 | 如下 |
其他参考文献 | ... |
- 代码行数: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
还在持续改进中···