gpt4 book ai didi

python - Python 中的龙曲线

转载 作者:行者123 更新时间:2023-11-28 23:04:29 25 4
gpt4 key购买 nike

我创建了一个程序来绘制 dragon curve使用 turtle 图形..但我的结果看起来并不像链接中的图片:

enter image description here

我注意到的一个问题是我想将生成的字符串保存到变量 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 设置为该值。

I would think that printing "word" and then using it as a parameter in drawit would result in the same thing as using a variable.

确实如此,但如果您想更改龙曲线的长度,则每次都必须复制/粘贴字符串,而不是简单地更改 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()

关于python - Python 中的龙曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7562772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com