第一次个编程人作业

这个作业属于哪个课程 ·作业课程·
这个作业要求在哪里 ·作业地址·
这个作业的目标 汉字编程
作业正文 ·作业正文·
其他参考文献 [python函数][python字典]
Github地址 ·跳转至Github·
代码行数 80
完成时间 10h

第一次个人编程作业

提前准备

看到条件判断,首先想到的是各类方法,Java。但对java不熟悉,经过一段时间摸索后,转为python。通过split、字典将数据进行保存分析。值得注意的是语句中"看看"后的数据需要进行识别,否则将无法正确输出"看看"。

实现过程

采用字典的形式进行转换前的准备。通过全局变量传参,可以灵活转换。


number={"零":0,"一":1,"二":2,"三":3,"四":4,"五":5,"六":6,"七":7,"八":8,"九":9,'十':10}

实用函数进行转换,相较于if,更加高效简练。


def trann(name):#中文转数字
    global number
    for x in number:
        if name==x:
            name=number[x]
            return name

def tranc(name):#数字转中文
    global number
    for x in number:
        if name==number[x]:
            return  x

发现了一些语句不能使用条件"&"进行连接 所以用多层if进行替代


    elif sen[0] == "如果":
        if sen[1] == tuple(name.keys())[0]:
            if sen[2] == "大于":
                if trann(name[tuple(name.keys())[0]]) > trann(sen[3]):
                    if sen[4] == "则":
                        if sen[5] == "看看":
                            print(sen[6])

对于字典的不熟悉导致了不会单纯提取键值,花费了大量大量大量时间想办法让他去符合函数的参数。甚至出现代码及其繁琐的结构。


 elif sen[0] == tuple(name.keys())[0]:
        if sen[1] == "减少":
            minus(name[tuple(name.keys())[0]],sen[2])
        elif sen[1] == "增加":
            add(name[tuple(name.keys())[0]], sen[2])

后仔细思索改进取消tuple累赘使用,代码看上去更简练。


    elif key.find(sen[0]) != -1:  #判断键值是否存在
        if sen[1] == "减少":  #判断是否为减少
            minus(sen[0],sen[2])  #调用减函数
        elif sen[1] == "增加": #判断是否为增加
            add(sen[0], sen[2])  #调用加函数

考虑到出现的语句可能并不为已经保存至字典里的键,所以添加一个查询作为判断键是否存在,提高了用法的稳定性。这一点是最大的学习,看了许多字典、字符串、元组的相互转化。


     key=''.join(tuple(name.keys()))
            key.find(sen[0])  #为下文的所有的键判断是否存在做准备

不能继续往大的数字方面实现,需要对数字处理进行函数上的补充完善。

后续添加

在第二次作业布置以后 ,发现所有的issue都是十以上的问题,针对这个问题也临时草草想了两个函数可以实现十以上千以下的转换,尽管逻辑上经不起推敲,但仍是可作为参考的一步。学会了// 和/的一些区别。

def tran_num(chinese):
global to
global number
global name
#三千二百一十一
result = list(chinese)
a=chinese.find("十")#5
b=chinese.find("百")#3
name = 0
for x in chinese:
if x.find("十") != -1:
name += trann(result[a-1]) * 10
elif x.find("百") != -1:
name += trann(result[b-1]) * 100
name += trann(result[-1])
return name

def tran_chinese(num):
global to
global number
global name
#三千二百一十一
a = num // 100
b = (num-100a) // 10
c = (num-100
a-10*b) // 1
if a > 1:
a1 = tranc(a)+"百"
if b > 1:
b1 = tranc(b)+"十"
if c > 1:
c1 = tranc(c)
name = a1+b1+c1
return name

测试结果

1、标准测试样例1


2、增加命令行,改变如"果,则"条件

3、标准测试样例2

4、增加命令行,改变"如果,则"以及"增加/减少"各条件

心得体会

因为自己的不熟练,导致浪费了许多时间,可惜也很值得。完成的过程很烦躁,完成的结果收获也是颇丰。自己对字典的不熟练导致效率偏低,但是代码逻辑完成度很高,自己还很满意,考虑的已经很周全。需要继续补充知识储备,提高自己的知识面。

原文地址:https://www.cnblogs.com/HammerPro/p/12286043.html