2013-03-27 64 views
0

如何讓我的項目代碼更小?這是我的hang子手圖形的一個巨大的定義。使Python龜的命令更小巧/緊湊

def joonista_mees(valede_pakkumiste_arv): 
    if valede_pakkumiste_arv == 0: 
     ht() 
     up() 
     right(90) 
     forward(150) 
     right(90) 
     forward(30) 
     right(180) 
     down() 
     forward(200) 
     back(170) 
     left(90) 
     forward(150) 
     right(90) 
     forward(100) 
     right(90) 
    if valede_pakkumiste_arv == 1: 
     forward(15) 
     right(90) 
     circle(15) 
     left(90) 
     up() 
     forward(30) 
     down() 
    if valede_pakkumiste_arv == 2: 
     forward(45) 
     backward(45) 
     right(45) 
     forward(20) 
     backward(20) 
     left(90) 
    if valede_pakkumiste_arv == 3: 
     forward(20) 
     backward(20) 
     right(45) 
     forward(45) 
     right(30) 
    if valede_pakkumiste_arv == 4: 
     forward(45) 
     backward(45) 
     left(60) 
    if valede_pakkumiste_arv == 5: 
     forward(45) 
     backward(45) 
     right(30) 
     up() 
     backward(67) 
    if valede_pakkumiste_arv == 6: 
     right(90) 
     forward(3) 
     right(45) 
     down() 
     forward(3) 
     backward(6) 
     forward(3) 
     right(90) 
     forward(3) 
     backward(6) 
     forward(3) 
     right(45) 
     up() 
     forward(6) 
     left(45) 
     down() 
     forward(3) 
     backward(6) 
     forward(3) 
     right(90) 
     forward(3) 
     backward(7) 

有什麼方法可以使這個更小,更緊湊?我可以寫幾條命令到一行嗎?我正在使用Python 3.3,這是我的項目的一部分,我真的很想在這方面得到一些幫助。如果你不能做得更小,這很好,但我只想知道是否有辦法做到這一點。

回答

3

你可以爲迷你語言編寫一個簡單的解釋器。例如,你可以在一個字符串編碼

forward(3) 
right(90) 
forward(3) 
backward(7) 

dostring = "f 3 r 90 f 3 b 7"

一個解釋可能看起來像:

def interpret(dostring): 
    tokens = dostring.split() 
    for command_id in range(0, len(tokens), 2): 
      command = tokens[command_id] 
      param = int(tokens[command_id+1]) 
      if command == "f": 
       forward(param) 
      elif command == "b": 
       backward(param) 
      elif command == "r": 
       right(param) 
      else: 
       print("Unknown command: %s" % command) 

然後您只要致電:

interpret("f 3 r 90 f 3 b 7")