Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 33.9k
Description
Unexpected behavior report
Unexpected behavior description:
Hello, I recently started teaching Python. I found turtle module interesting and I'm planning to use the module for deeper understanding of loop, condition, and function. I tried to simplify some turtle examples, just to show how for loop works. I cloned Turtle object, moved the clones to initial position, and cleared all Turtles before start drawing. However, clear() method did not work as I expected. Here is the code that I used.
fromturtleimport*t1=Turtle() t2=t1.clone() t1.forward(100) t2.right(90) t2.forward(100) t2.clear()I expected t2.clear() to clear the trace of the cloned Turtle. Instead, t2.clear() erased the trace of the original Turtle, where the trace was drawn after the cloning.
I wanted to know what is going on, so I read the definition of clear() method, and the method seemed to delete all items in self.items. Also, the source code of forward() used self.currentLineItem when drawing. So I tracked items and currentLineItem in my code. Here are the results of the tracking.
fromturtleimport*#t1.currentLineItem, t1.items, t2.currentLineItem, t2.itemst1=Turtle() #1, [1], None, Nonet2=t1.clone() #2, [1,2], 3, [1,2]t1.forward(100) #2, [1,2], 3, [1,2]t2.right(90) #2, [1,2], 3, [1,2]t2.forward(100) #2, [1,2], 3, [1,2]t2.clear() #2, [1,2], 4, [4]So, t2 drew lines in 3, however, because 3 is not in t2.items, t2.clear() does not delete 3. Also, t1 drew lines in 2, and, because 2 is in t2.items, t2.clear() delete 2.
I think that the items of the cloned Turtle should be [1,3] instead of [1,2] after clone() is called.
CPython versions tested on:
3.12
Operating systems tested on:
Windows
Linked PRs
Metadata
Metadata
Assignees
Labels
Projects
Status