-2

我已经编写了这个大函数来在我的 python 代码中进行一些格式化。无论如何,你能建议把它变小吗?

def disfun(String1,String2,String3):
        if String3 == "A" or String3 == "B":
            if String3 == "A":
                pass
            elif String3 == "B":
                print "#"*54

            print "##"," "*48,"##"
            print "##",'{0:^48}'.format(String2),"##"
            print "##",'{0:^48}'.format(String1),"##"
            print "##"," "*48,"##"
            print "#"*54

        elif String3 == "C":
            print "-"*40
            print "--",'{0:^34}'.format(String2),"--"
            print "-"*40

        elif String3 == 'D':
            String2 = ' * '.join(String2)
            print "#"*54
            print "##",'{0:^48}'.format(String2),"##"
            print "##",'{0:^48}'.format(String1),"##"
            print "#"*54

        elif String3 == 'E':
           print "*"*54
           print "**",'{0:^48}'.format(String2),"**"
           print "**",'{0:^48}'.format(String1),"**"
           print "*"*54
4

2 回答 2

2
if String3 == "A":
    pass
elif String3 == "B":
    print "#"*54

很容易变成...

if String3 == "B":
    print "#"*54

此外,B、D 和 E 之间还有一堆共享代码:

def disfun(String1,String2,String3):

    if String3 in ("B", "D", "E"):
        print "#"*54

        if String3 == "B":
            print "##"," "*48,"##"

        if String2 == "D":
            String2 = ' * '.join(String2)

        print "##",'{0:^48}'.format(String2),"##"
        print "##",'{0:^48}'.format(String1),"##"
        print "##"," "*48,"##"
        print "#"*54

    elif String3 == "C":
        print "-"*40
        print "--",'{0:^34}'.format(String2),"--"
        print "-"*40
于 2013-08-01T04:51:15.987 回答
1

我会尝试将所有格式减少到一次调用:

def marquee (width,  *content, headerCharacter = '#'):
   print headerCharacter  * width
   for item in content:
       print "%s%s%s" % (headerCharacter * 2, content.center(width - 4), headerCharacter * 2)
   print headerCharacter  * width

然后更改所有逻辑,使其简单地选择正确的*内容(看起来你有一个或两个项目,具体取决于代码路径)和标题字符

于 2013-08-01T05:06:07.267 回答