第一次个人编程作业
第一次个人编程作业
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/fzzcxy/SE |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzzcxy/SE/homework/10283 |
这个作业的目标 | 编写一个程序,制作一个简易的中文语言编译器 |
作业正文 | 第一次个人编程作业 |
其他参考文献 | Python元组 Python函数 |
GitHub链接 |
编程题目
汉字是迄今为止持续使用时间最长的文字,也是上古时期各大文字体系中唯一传承至今者,中国历代皆以汉字为主要的官方文字。我们在感叹汉字的源远流长时,也不禁感慨,为什么没有一门使用汉字编程的语言?
小杨同学想到:用汉字来进行编程一定很有趣,来请你帮帮他。
编程要求
请编写一个程序,制作一个简易的中文语言编译器,即使用中文语法进行编程,输入为逐行输入,每行为一个语句,一个语句代变一个操作,满足以下语法要求(括号内代变格式类型,具体参考样例):
变量定义:整数 (变量名) 等于 (数字)
运算(加法):(变量名) 增加 (数字)
运算(减法):(变量名) 减少 (数字)
输出:看看 (变量名) or 看看 “(字符串内容)”
附加要求:
选择:如果 (判断语句) 则 (操作语句) 否则 (操作语句)
若否则后没有任何操作使用(无)来进行填充(参考样例2)。
代码行数: 128行 171行
所用时间:
Python的自学:2天。分析和代码框架建立:1天。补全代码:一个下午。
总有人以为自己学了点爬虫就会python.mp4感觉没啥拿得出手的语言,Java学的不太行,C也有点遗忘了,那干脆来个没学的python吧(迫真。
思路:旧版代码思路:
1.创建中文数字转阿拉伯数字的函数trans1,再创建阿拉伯数字转中文数字的函数trans2(本想用字典实现的,但是在学习字典的反向使用中遇到了困难,所以只好用if else来实现)trans1用于获取输入并将数字用于计算,trans2用于把计算结果转换成中文。
2.创建函数获取输入,将输入的中文存在在字符串str中,用split(" ")以空格为分片。循环获取输入,返回输入值直至输入为空,返回None。
3.创建使用部分函数,使用if判断输入,输入正确则将输入存入字符串并赋值给2个转换函数中的参数。当输入到增加、减少部分将元组相应位置进行计算,当输入到判断位置,时进行判断并输出判断结果。
# 以下为旧版代码:
# -*- coding: UTF-8 -*-
def trans1(s):
if len(s) <= 2:
s[1] = s[1]
elif s[2] == '零':
s[2] = 0
elif s[2] == '一':
s[2] = 1
elif s[2] == '二':
s[2] = 2
elif s[2] == '三':
s[2] = 3
elif s[2] == '四':
s[2] = 4
elif s[2] == '五':
s[2] = 5
elif s[2] == '六':
s[2] = 6
elif s[2] == '七':
s[2] = 7
elif s[2] == '八':
s[2] = 8
elif s[2] == '九':
s[2] = 9
elif s[2] == '十':
s[2] = 10
elif s[3] == '零':
s[3] = 0
elif s[3] == '一':
s[3] = 1
elif s[3] == '二':
s[3] = 2
elif s[3] == '三':
s[3] = 3
elif s[3] == '四':
s[3] = 4
elif s[3] == '五':
s[3] = 5
elif s[3] == '六':
s[3] = 6
elif s[3] == '七':
s[3] = 7
elif s[3] == '八':
s[3] = 8
elif s[3] == '九':
s[3] = 9
elif s[3] == '十':
s[3] = 10
return s
def trans2(temp):
if temp[1] == 0:
temp[3] = '零'
elif temp[1] == 1:
temp[3] = '一'
elif temp[1] == 2:
temp[3] = '二'
elif temp[1] == 3:
temp[3] = '三'
elif temp[1] == 4:
temp[3] = '四'
elif temp[1] == 5:
temp[3] = '五'
elif temp[1] == 6:
temp[3] = '六'
elif temp[1] == 7:
temp[3] = '七'
elif temp[1] == 8:
temp[3] = '八'
elif temp[1] == 9:
temp[3] = '九'
elif temp[1] == 10:
temp[3] = '十'
return temp
def get_input():
str = input()
s = str.split(" ")
if len(s) > 0:
if s[0] == '整数':
temp[0] = s[1]
elif s[0] == '看看' or '如果':
temp[0] = s[1]
else:
temp[0] = s[0]
return s
else:
return None
def rep(s, temp):
if (s[0] == '整数') and (s[2] == '等于'):
temp[0] = s[1] # 整数 气温
# print(temp[0])
temp[1] = s[3] # 等于 十
# print(temp[1])
if s[0] == temp[0]:
if s[1] == '减少': # 气温 减少 二
temp[1] = temp[1] - s[2]
# print(temp[1])
if s[1] == '增加': # 气温 增加 四
temp[1] = temp[1] + s[2]
# print(temp[1])
if s[0] == '看看': # 看看 气温
trans2(temp)
print(temp[3])
if s[0] == '如果': # 如果 气温 大于 八 则 看看 “你好,世界” 否则 看看 “冻死我了”
if s[2] == '大于':
if temp[1] > s[3]:
print(s[6]) # “你好,世界”
else:
print(s[9]) # “冻死我了”
if __name__ == '__main__':
temp = ['', 0, 0, '']
while 1:
s = get_input()
if s is not None:
s = trans1(s)
temp = trans2(temp)
rep(s, temp)
代码肯定仍存在不少问题,欢迎大家提出。
更新后代码已写出:
# -*- coding: UTF-8 -*-
def trans2num(c):
if c == "零":
return 0
elif c == "一":
return 1
elif c == "二":
return 2
elif c == "三":
return 3
elif c == "四":
return 4
elif c == "五":
return 5
elif c == "六":
return 6
elif c == "七":
return 7
elif c == "八":
return 8
elif c == "九":
return 9
elif c == "十":
return 10
else:
print("暂不支持0-10以外数字!")
def trans2cn(num):
if num == 0:
return "零"
elif num == 1:
return "一"
elif num == 2:
return "二"
elif num == 3:
return "三"
elif num == 4:
return "四"
elif num == 5:
return "五"
elif num == 6:
return "六"
elif num == 7:
return "七"
elif num == 8:
return "八"
elif num == 9:
return "九"
elif num == 10:
return "十"
else:
print("暂不支持0-10以外数字!")
print("输入仅支持0-10以内的加减运算,按回车结束。")
try:
ndict = {} # 用字典存放变量名及对应变量值
while 1: # 用死循环来变得像交互式
no = input() # 装入语句
n = no.split(" ") # 空格分片并简化
if no is "": # 输入结束后按回车退出
exit()
if n[0] == "整数": # 对“整数”开头语句的定义
ndict[n[1]] = trans2num(n[3]) # 装入变量名及对应变量值
elif n[0] in ndict.keys(): # 对“变量名”开头语句的操作
if n[1] == "减少":
ndict[n[0]] -= trans2num(n[2])
elif n[1] == "增加":
ndict[n[0]] += trans2num(n[2])
elif n[0] == "看看":
if n[1] in ndict.keys():
print(trans2cn(ndict[n[1]])) # 输出指定变量值
else:
print("未声明的变量!") # 未定义变量时发出提示
elif n[0] == "如果": # 判断部分
if n[2] == "大于": # 判断是否大于
if ndict[n[1]] > trans2num(n[3]): # “则”后的处理
if n[5] == "看看":
print(n[6][1:-1])
else:
if n[6] == "增加":
ndict[n[5]] += trans2num(n[7]) # 增加操作
elif n[6] == "减少":
ndict[n[5]] -= trans2num(n[7]) # 减少操作
else: # “否则”后的处理
if n[8] == "看看":
print(n[9][1:-1])
elif n[8] == "无":
pass
elif n[9] == "无":
pass
elif n[9] == "增加":
ndict[n[8]] += trans2num(n[10])
elif n[9] == "减少":
ndict[n[8]] -= trans2num(n[10])
elif n[9] == "看看":
print(n[10][1:-1])
elif n[10] == "增加":
ndict[n[9]] += trans2num(n[11])
elif n[10] == "减少":
ndict[n[9]] -= trans2num(n[11])
if n[2] == "小于": # 判断是否小于
if ndict[n[1]] < trans2num(n[3]): # “则”后的处理
if n[5] == "看看":
print(n[6][1:-1])
else:
if n[6] == "增加":
ndict[n[5]] += trans2num(n[7])
elif n[6] == "减少":
ndict[n[5]] -= trans2num(n[7])
else: # “否则”后的处理
if n[8] == "看看":
print(n[9][1:-1])
elif n[8] == "无":
pass
elif n[9] == "无":
pass
elif n[9] == "增加":
ndict[n[8]] += trans2num(n[10])
elif n[9] == "减少":
ndict[n[8]] -= trans2num(n[10])
elif n[9] == "看看":
print(n[10][1:-1])
elif n[10] == "增加":
ndict[n[9]] += trans2num(n[11])
elif n[10] == "减少":
ndict[n[9]] -= trans2num(n[11])
if n[2] == "等于": # 判断是否等于
if ndict[n[1]] == trans2num(n[3]): # “则”后的处理
if n[5] == "看看":
print(n[6][1:-1])
else:
if n[6] == "增加":
ndict[n[5]] += trans2num(n[7])
elif n[6] == "减少":
ndict[n[5]] -= trans2num(n[7])
else: # “否则”后的处理
if n[8] == "看看":
print(n[9][1:-1])
elif n[8] == "无":
pass
elif n[9] == "无":
pass
elif n[9] == "增加":
ndict[n[8]] += trans2num(n[10])
elif n[9] == "减少":
ndict[n[8]] -= trans2num(n[10])
elif n[9] == "看看":
print(n[10][1:-1])
elif n[10] == "增加":
ndict[n[9]] += trans2num(n[11])
elif n[10] == "减少":
ndict[n[9]] -= trans2num(n[11])
else:
print("请按指定格式输入!")
except IndexError:
print("请按要求进行输入")
except SystemExit:
print("运行结束!")