2013-08-01 74 views
-2

我已經寫了這個大函數來在我的Python代碼中做一些格式化。你能建議反正使這個更小?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 
+1

我很困惑,你甚至從來沒有定義的變量「string」 – Greg

+0

'string'可以是一個全局變量(不是一個好名字,因爲標準的'string'模塊,儘管如此)。 – EOL

+0

當您編輯原始發佈的代碼以迴應答案,以便答案不再有意義時,它*確實*會混淆未來出現的人。 – SethMMorton

回答

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 
+0

真正減少了我以前寫過的5個不同功能的代碼。錯過了這一點。謝謝 :) – misguided

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 

,然後更改所有的邏輯,所以它只是挑選合適的*內容(看起來你有不同的代碼路徑上的一個或兩個項目)和標題文字