簡體   English   中英

Python中的龍曲線

[英]Dragon Curve in Python

我創建了一個使用烏龜圖形繪制龍形曲線的程序。但是我的結果與鏈接中的圖片並不完全相同:

在此處輸入圖片說明

我注意到的一個問題是,我想將生成的字符串保存到變量newWord ..中,但是我不能在函數drawit中使用newWord作為參數,后者實際上是根據字符串繪制線條的。 當我嘗試執行此操作時,出現錯誤“未定義全局變量newWord”。 因此,在我的代碼中,我只是復制了要繪制的newWord的輸出,而沒有實際傳遞我想要傳遞的變量。

我不確定問題出在我的createWord函數上還是我在drawit中沒有“足夠繪制”。

import turtle

def createWord(max_it, axiom, proc_rules):

    word = axiom
    t = 1

    while (t < max_it):
        word = rewrite(word, proc_rules)
        t=t+1

    newWord = word

def rewrite(word, proc_rules):

    wordList = list(word)

    for i in range(len(wordList)):
        curChar = wordList[i]
        if curChar in proc_rules:
            wordList[i] = proc_rules[curChar]

    return "".join(wordList)

def drawit(newWord, d, angle):

    newWordLs = list(newWord)
    for i in range(len(newWordLs)):
        cur_Char = newWordLs[i]
        if cur_Char == 'F':
            turtle.forward(d)
        elif cur_Char == '+':
            turtle.right(angle)
        elif cur_Char == '-':
            turtle.left(angle)
        else:
            i = i+1

#sample test of dragon curve

def main():
    createWord(10, 'FX', {'X':'X+YF','Y':'FX-Y'})
    drawit('FX+YF+FX-YF+FX+YF-FX-YF+FX+YF+FX-YF-FX+YF-FX-YF', 20, 90)

if __name__=='__main__': main()

newWord在createWord()的內部范圍內,因此createWord()完成后,newWord消失。

考慮在全局范圍內創建newWord,以便您可以使用createWord進行修改-或更妙的是,讓createWord()返回一個值,並將newWord設置為該值。

我認為打印“單詞”然后將其用作drawit中的參數將導致與使用變量相同的結果。

可以,但是如果要更改龍曲線的長度,則每次都必須復制/粘貼字符串,而不是簡單地更改max_it的值。

編輯:我的解決方案與一些性感的遞歸(=

import turtle

def dragon_build(turtle_string, n):
    """ Recursively builds a draw string. """
    """ defining f, +, -, as additional rules that don't do anything """
    rules = {'x':'x+yf', 'y':'fx-y','f':'f', '-':'-', '+':'+'}
    turtle_string = ''.join([rules[x] for x in turtle_string])
    if n > 1: return dragon_build(turtle_string, n-1)
    else: return turtle_string

def dragon_draw(size):
    """ Draws a Dragon Curve of length 'size'. """
    turtle_string = dragon_build('fx', size)
    for x in turtle_string:
        if x == 'f': turtle.forward(20)
        elif x == '+': turtle.right(90)
        elif x == '-': turtle.left(90)

def main():
    n = input("Size of Dragon Curve (int): ")
    dragon_draw(n)

if __name__ == '__main__': main()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM