第一次个人编程作业
这个作业属于哪个课程 | ( https://edu.cnblogs.com/campus/fzzcxy/SE) |
---|---|
这个作业要求在哪里 | ( https://edu.cnblogs.com/campus/fzzcxy/SE/homework/10283) |
这个作业的目标 | 发布一篇随笔,使用markdown语法进行编辑。在随笔前附上github仓库地址。 |
作业正文 | .... |
其他参考文献 | ... |
GitHub链接:https://github.com/qq1261275789/JLY-s-software-engineering-warehouse/blob/master/%E7%AC%AC%E4%B8%80%E6%AC%A1%E4%B8%AA%E4%BA%BA%E7%BC%96%E7%A8%8B%E4%BD%9C%E4%B8%9A.py
编程题目
汉字是迄今为止持续使用时间最长的文字,也是上古时期各大文字体系中唯一传承至今者,中国历代皆以汉字为主要的官方文字。我们在感叹汉字的源远流长时,也不禁感慨,为什么没有一门使用汉字编程的语言?
小杨同学想到:用汉字来进行编程一定很有趣,来请你帮帮他。
编程要求
请编写一个程序,满足以下语法要求:
- 变量定义:整数 钱包 等于 零
- 运算(加法):钱包 增加 四
- 运算(减法):钱包 减少 四
输出:看看 钱包 or 看看 “字符串”
附加要求:选择:如果 钱包 大于 十 则 看看 “钱太多了” 否则 看看 “我穷死了”
样例
输入:
整数 气温 等于 十
气温 减少 三
气温 增加 二
看看 气温
如果 气温 大于 八 则 看看 “你好,世界” 否则 看看 “冻死我了”
输出:
九
你好,世界
注意事项
1.输入输出采用utf-8编码,请在编码过程中注意。
2.数字只会出现:零一二三四五六七八九十。
3.字符串输出的双引号是全角,即中文双引号。
4.变量类型要求只有整数,如有余力,可以自己实现更多。、
5.测试数据会相较于样例复杂,请考虑充分需求。
6.不限制编程语言。
一.最初的版本
1.输入部分:
输入的是一个一个的词,中间以空格割开,所以用split按空格切成一个数组,如果切出来的第一个词是整数,代表这句话是定义一个变量,那么将切出来的数组的第二个词(也就是中文的变量名)放进一个a中;如果第一个词是看看或者如果,也按照刚才的一样,将数组的第二个词放进a中
def 输入():
str=input()
s=str.split()
if len(s)>0:
if s[0]=='整数':
a[0]=s[1]
elif s[0]=='看看' or s[0]=='如果':
a[0]=s[1]
else:
a[0]=s[0]
return s
else:
return None
2.转换部分:
第一个函数做的是将汉字数字转换成阿拉伯数字,第二个函数是将阿拉伯数字转换成汉字
第一个函数:通过if和elif,把零到十转换成0-10,中途因为定义变量名语句和加减语句的数字所在的输入数组的位置不同,采取两次判断,确保将a中的数字转换
def 转换(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
第二个函数:通过if和elif,把零到十转换成0-10,因为这个是用来打印结果的,数字在a中的位置固定,所以直接if和elif就行
def 转换2():
if a[1]==0:
a[3]='零'
elif a[1]==1:
a[3]='一'
elif a[1]==2:
a[3]='二'
elif a[1]==3:
a[3]='三'
elif a[1]==4:
a[3]='四'
elif a[1]==5:
a[3]='五'
elif a[1]==6:
a[3]='六'
elif a[1]==7:
a[3]='七'
elif a[1]==8:
a[3]='八'
elif a[1]==9:
a[3]='九'
elif a[1]==10:
a[3]='十'
return s
3.使用部分:
通过if判断输入的句子属于哪种语句,如果是定义变量名的语句,那么就将中文变量名放进a的第一个中,将变量的数值放在第二个;如果是加减语句,则将所对应变量的第二个取出来,与输入语句的数值进行加减运算,然后再把结果返回回a的原来位置;如果是判断大小的语句,就将a中对应的变量的第二个提取出来与输入语句的数值进行比大小,然后按照要求输出输入语句中要求的话
def 使用(s):
if (s[0]=='整数') and (s[2]=='等于'):
a[0]=s[1]
# print(a[0])
a[1]=s[3]
# print(a[1])
if s[0]==a[0]:
if s[1]=='减少':
a[1]=a[1]-s[2]
# print(a[1])
elif s[1]=='增加':
a[1]=a[1]+s[2]
# print(a[1])
if s[0]=='看看':
转换2()
print(a[3])
if s[0]=='如果':
if s[2]=='大于':
if a[1]>s[3]:
s[6]=s[6].strip('“').strip('”')
print(s[6])
else:
s[9]=s[9].strip('“').strip('”')
print(s[9])
4.运行部分:
调用上面写的函数,最后以没有输入大小,直接回车结束
a=['',0,0,'']
while(1):
s=输入()
if s!=None:
s=转换(s)
使用(s)
else:
print('结束')
break
二.第一个改良版
1.输入部分:
基本没变,将a变成了数组a,加入一个bls(变量数),来统计变量的个数
def 输入():
global bls
str=input()
s=str.split()
if len(s)>0:
if s[0]=='整数':
a[bls][0]=s[1]
bls=bls+1
elif s[0]=='看看' or s[0]=='如果':
for i in range(bls):
if a[i][0]==s[1]:
a[i][0]=s[1]
else:
for i in range(bls):
if a[i][0]==s[1]:
a[i][0]=s[0]
return s
else:
return None
2.转换部分:
无变化
def 转换(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 转换2(i):
if a[i][1]==0:
a[i][3]='零'
elif a[i][1]==1:
a[i][3]='一'
elif a[i][1]==2:
a[i][3]='二'
elif a[i][1]==3:
a[i][3]='三'
elif a[i][1]==4:
a[i][3]='四'
elif a[i][1]==5:
a[i][3]='五'
elif a[i][1]==6:
a[i][3]='六'
elif a[i][1]==7:
a[i][3]='七'
elif a[i][1]==8:
a[i][3]='八'
elif a[i][1]==9:
a[i][3]='九'
elif a[i][1]==10:
a[i][3]='十'
return s
3.使用部分:
围绕a变成数组a进行些许调整,另外增加对未定义变量的判断,当输入语句中出现没有定义过的变量时,输出没有这个变量.
def 使用(s):
global bls
global i
# 整数 气温 等于 十
if (s[0]=='整数') and (s[2]=='等于'):
for i in range(bls):
if a[i][0]==s[1]:
a[i][0]=s[1]
# print(a[i][0])
a[i][1]=s[3]
# print(a[i][1])
i=0
# 气温 减少 三
for i in range(bls):
if s[0]==a[i][0]:
if s[1]=='减少':
a[i][1]=a[i][1]-s[2]
# print(a[i][1])
# 气温 增加 二
elif s[1]=='增加':
a[i][1]=a[i][1]+s[2]
# print(a[i][1])
if i>=bls:
print('没有这个变量')
i=0
# 看看 气温
if s[0]=='看看':
for i in range(bls):
if s[1]==a[i][0]:
转换2(i)
print(a[i][3])
if i>=bls:
print('没有这个变量')
i=0
# 如果 气温 大于 八 则 看看 “你好,世界” 否则 看看 “冻死我了”
if s[0]=='如果':
if s[2]=='大于':
for i in range(bls):
if s[1]==a[i][0]:
if a[i][1]>s[3]:
s[6]=s[6].strip('“').strip('”')
print(s[6])
else:
s[9]=s[9].strip('“').strip('”')
print(s[9])
if i>=bls:
print('没有这个变量')
elif s[2]=='小于':
for i in range(bls):
if s[1]==a[i][0]:
if a[i][1]=bls:
print('没有这个变量')
elif s[2]=='等于':
for i in range(bls):
if s[1]==a[i][0]:
if a[i][0]==s[3]:
s[6]=s[6].strip('“').strip('”')
print(s[6])
else:
s[9]=s[9].strip('“').strip('”')
print(s[9])
if i>=bls:
print('没有这个变量')
i=0
4.运行部分:
在这里定义了全局变量bls和一个数组a,数组a每行的第一个是变量名,第二个是变量的数值的阿拉伯数字,第三个是可能需要加减的数值的阿拉伯数字,第四个是输出时转换成汉字数字的变量所代表的数值
a=[['',0,0,''],['',0,0,''],['',0,0,''],['',0,0,''],['',0,0,''],['',0,0,''],
['',0,0,''],['',0,0,''],['',0,0,''],['',0,0,''],['',0,0,''],['',0,0,''],
['',0,0,''],['',0,0,''],['',0,0,''],['',0,0,''],['',0,0,''],['',0,0,'']]
bls=0 #变量数
i=0
while(1):
s=输入()
if s!=None:
s=转换(s)
使用(s)
else:
print('结束')
break
三.第二次修改版
1.输入部分:
无变化
def 输入():
global bls
str=input()
s=str.split()
if len(s)>0:
if s[0]=='整数':
a[bls][0]=s[1]
bls=bls+1
elif s[0]=='看看' or s[0]=='如果':
for i in range(bls):
if a[i][0]==s[1]:
a[i][0]=s[1]
else:
for i in range(bls):
if a[i][0]==s[1]:
a[i][0]=s[0]
return s
else:
return None
2.转换部分
转换函数无变化,转换2增加了输出负数和大于十的数的汉字转换,先判断数是负数还是零到十之间的数还是大于十的数,如果是零到十,就按之前的版本原样转换;如果是大于十的数,就先模十取余数,转换成汉字,然后再除以十,逐步将个十百千万位转换成汉字,并每转换一个汉字就插入到已经转换完成的汉字的前面,最终完成多位数的转换,叠加成一个字符串;如果是负数就先将数乘以负一,得到其绝对值,然后按照大于十的数来做,数字全部转换完成后,在前面插入一个"负"字
def 转换(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 转换2(i):
a[i][3]=''
j=0
#个位数
if a[i][1]<=10 and a[i][1]>=0:
if a[i][1]==0:
a[i][3]='零'
elif a[i][1]==1:
a[i][3]='一'
elif a[i][1]==2:
a[i][3]='二'
elif a[i][1]==3:
a[i][3]='三'
elif a[i][1]==4:
a[i][3]='四'
elif a[i][1]==5:
a[i][3]='五'
elif a[i][1]==6:
a[i][3]='六'
elif a[i][1]==7:
a[i][3]='七'
elif a[i][1]==8:
a[i][3]='八'
elif a[i][1]==9:
a[i][3]='九'
elif a[i][1]==10:
a[i][3]='十'
#大于十
elif a[i][1]>10:
b=a[i][1]
for j in range(10):
if b%10==1:
a[i][3]=''.join(['一',a[i][3]])
elif b%10==2:
a[i][3]=''.join(['二',a[i][3]])
elif b%10==3:
a[i][3]=''.join(['三',a[i][3]])
elif b%10==4:
a[i][3]=''.join(['四',a[i][3]])
elif b%10==5:
a[i][3]=''.join(['五',a[i][3]])
elif b%10==6:
a[i][3]=''.join(['六',a[i][3]])
elif b%10==7:
a[i][3]=''.join(['七',a[i][3]])
elif b%10==8:
a[i][3]=''.join(['八',a[i][3]])
elif b%10==9:
a[i][3]=''.join(['九',a[i][3]])
else:
a[i][3]=''.join(['',a[i][3]])
b=int(b/10)
if b==0:
break
elif b!=0:
if j==0:
a[i][3]=''.join(['十',a[i][3]])
elif j==1:
a[i][3]=''.join(['百',a[i][3]])
elif j==2:
a[i][3]=''.join(['千',a[i][3]])
elif j==3:
a[i][3]=''.join(['万',a[i][3]])
elif j==4:
a[i][3]=''.join(['十',a[i][3]])
elif j==5:
a[i][3]=''.join(['百',a[i][3]])
elif j==6:
a[i][3]=''.join(['千',a[i][3]])
elif j==7:
a[i][3]=''.join(['亿',a[i][3]])
elif j==8:
a[i][3]=''.join(['十',a[i][3]])
elif j==9:
a[i][3]=''.join(['百',a[i][3]])
#小于零
elif a[i][1]<0:
b=a[i][1]*(-1)
for j in range(10):
if b%10==1:
a[i][3]=''.join(['一',a[i][3]])
elif b%10==2:
a[i][3]=''.join(['二',a[i][3]])
elif b%10==3:
a[i][3]=''.join(['三',a[i][3]])
elif b%10==4:
a[i][3]=''.join(['四',a[i][3]])
elif b%10==5:
a[i][3]=''.join(['五',a[i][3]])
elif b%10==6:
a[i][3]=''.join(['六',a[i][3]])
elif b%10==7:
a[i][3]=''.join(['七',a[i][3]])
elif b%10==8:
a[i][3]=''.join(['八',a[i][3]])
elif b%10==9:
a[i][3]=''.join(['九',a[i][3]])
else:
a[i][3]=''.join(['',a[i][3]])
b=int(b/10)
if b==0:
a[i][3]=''.join(['负',a[i][3]])
break
elif b!=0:
if j==0:
a[i][3]=''.join(['十',a[i][3]])
elif j==1:
a[i][3]=''.join(['百',a[i][3]])
elif j==2:
a[i][3]=''.join(['千',a[i][3]])
elif j==3:
a[i][3]=''.join(['万',a[i][3]])
elif j==4:
a[i][3]=''.join(['十',a[i][3]])
elif j==5:
a[i][3]=''.join(['百',a[i][3]])
elif j==6:
a[i][3]=''.join(['千',a[i][3]])
elif j==7:
a[i][3]=''.join(['亿',a[i][3]])
elif j==8:
a[i][3]=''.join(['十',a[i][3]])
elif j==9:
a[i][3]=''.join(['百',a[i][3]])
3.使用部分:
略微修改,无大改动
def 使用(s):
global bls
global i
# 整数 气温 等于 十
if (s[0]=='整数') and (s[2]=='等于'):
for i in range(bls):
if a[i][0]==s[1]:
a[i][0]=s[1]
# print(a[i][0])
a[i][1]=s[3]
# print(a[i][1])
i=0
# 气温 减少 三
if s[1]=='减少':
for i in range(bls):
if s[0]==a[i][0]:
a[i][1]=a[i][1]-s[2]
# print(a[i][1])
if i>=bls:
print('没有这个变量1')
i=0
# 气温 增加 二
elif s[1]=='增加':
for i in range(bls):
if s[0]==a[i][0]:
a[i][1]=a[i][1]+s[2]
# print(a[i][1])
if i>=bls:
print('没有这个变量1')
i=0
# 看看 气温
if s[0]=='看看':
for i in range(bls):
if s[1]==a[i][0]:
转换2(i)
print(a[i][3])
if i>=bls:
print('没有这个变量2')
i=0
# 如果 气温 大于 八 则 看看 “你好,世界” 否则 看看 “冻死我了”
if s[0]=='如果':
if s[2]=='大于':
for i in range(bls):
if s[1]==a[i][0]:
if a[i][1]>s[3]:
s[6]=s[6].strip('“').strip('”')
print(s[6])
else:
s[9]=s[9].strip('“').strip('”')
print(s[9])
if i>=bls:
print('没有这个变量3')
i=0
elif s[2]=='小于':
for i in range(bls):
if s[1]==a[i][0]:
if a[i][1]=bls:
print('没有这个变量4')
i=0
elif s[2]=='等于':
for i in range(bls):
if s[1]==a[i][0]:
if a[i][0]==s[3]:
s[6]=s[6].strip('“').strip('”')
print(s[6])
else:
s[9]=s[9].strip('“').strip('”')
print(s[9])
if i>=bls:
print('没有这个变量5')
i=0
4.运行部分:
无改动
a=[['',0,0,''],['',0,0,''],['',0,0,''],['',0,0,''],['',0,0,''],['',0,0,''],
['',0,0,''],['',0,0,''],['',0,0,''],['',0,0,''],['',0,0,''],['',0,0,''],
['',0,0,''],['',0,0,''],['',0,0,''],['',0,0,''],['',0,0,''],['',0,0,'']]
bls=0 #变量数
i=0
while(1):
s=输入()
if s!=None:
s=转换(s)
使用(s)
else:
print('结束')
break