2013-04-09 26 views
0

我有烏龜路線清單:如何使用Python在列表中填寫龜的方向?

redlist = ['seth(0)', 'forward(drawdist)', 'seth(0)', 'forward(drawdist)', 'seth(90)', 'forward(drawdist)', 'seth(90)', 'forward(drawdist)', 'seth(180)', 'forward(drawdist)', 'seth(180)', 'forward(drawdist)', 'seth(270)', 'forward(drawdist)', 'seth(270)', 'forward(drawdist)'] 

我怎樣才能填補這一使用列表?

回答

-1

使用pendown,則fillcolor方法在一個循環:

def draw_n_fill(self,redlist): 
    self.pendown() 
    [self.getAttr(entry)() for entry in redlist] 
    self.fillcolor("red") 

參考

+0

此答案無效,也無法解決OP的問題。這些參考文獻是非基礎的。 (OP的問題中沒有環,顏色和圓圈。)海龜沒有'getAttr()'方法,導致異常。 – cdlane 2016-12-05 07:14:04

0

雖然這樣的句法正確的Python語句列表看起來像是使用eval()的機會,但要抵制這種誘惑。這裏的語法是很簡單的,有一個參數的函數,我們可以使用re模塊解析命令並只執行什麼看似是有效參數的有效功能:

import turtle 
import re 

redist = [ \ 
    'seth(0)', 'forward(drawdist)', 'seth(0)', 'forward(drawdist)', \ 
    'seth(90)', 'forward(drawdist)', 'seth(90)', 'forward(drawdist)', \ 
    'seth(180)', 'forward(drawdist)', 'seth(180)', 'forward(drawdist)', \ 
    'seth(270)', 'forward(drawdist)', 'seth(270)', 'forward(drawdist)' \ 
    ] 

valid_functions = { \ 
    'seth': turtle.setheading, \ 
    'forward': turtle.forward, \ 
    } 

valid_arguments = { \ 
    'drawdist': 50, \ 
    } 

turtle.begin_fill() 

for command in redist: 
    match = re.match(r"^(\w+)\((\w+)\)$", command) 

    if match is None: 
     raise SyntaxError("Invalid syntax") 

    function, argument = match.group(1), match.group(2) 

    if function not in valid_functions: 
     raise ValueError("Invalid function") 

    if argument in valid_arguments: 
     argument = valid_arguments[argument] 
    elif argument.isdigit(): 
     argument = int(argument) 
    else: 
     raise TypeError("Invalid argument") 

    valid_functions[function](argument) 

turtle.end_fill() 

turtle.hideturtle() 

turtle.mainloop() 

對於那些誰想要提前讀取,它繪製一個實心正方形。我上面提到的異常可能不是正確的,但重點在於,當您嘗試執行作爲字符串提交給您的代碼時,您需要錯誤地檢查所有內容,並引發異常。