diff --git a/Lib/lib-tk/turtle.py b/Lib/lib-tk/turtle.py
index e78324e..aa4fe84 100644
--- a/Lib/lib-tk/turtle.py
+++ b/Lib/lib-tk/turtle.py
@@ -859,7 +859,7 @@
         >>> poly = ((0,0),(10,-5),(0,10),(-10,-5))
         >>> s = Shape("compound")
         >>> s.addcomponent(poly, "red", "blue")
-        ### .. add more components and then use register_shape()
+        >>> # .. add more components and then use register_shape()
         """
         if self._type != "compound":
             raise TurtleGraphicsError("Cannot add component to %s Shape"
@@ -958,7 +958,7 @@
         No argument.
 
         Example (for a TurtleScreen instance named screen):
-        screen.clear()
+        >>> screen.clear()
 
         Note: this method is not available as function.
         """
@@ -1030,8 +1030,8 @@
         Example (for a TurtleScreen instance named screen):
         >>> screen.setworldcoordinates(-10,-0.5,50,1.5)
         >>> for _ in range(36):
-                left(10)
-                forward(0.5)
+        ...     left(10)
+        ...     forward(0.5)
         """
         if self.mode() != "world":
             self.mode("world")
@@ -1136,7 +1136,7 @@
         >>> screen.colormode()
         1.0
         >>> screen.colormode(255)
-        >>> turtle.pencolor(240,160,80)
+        >>> pencolor(240,160,80)
         """
         if cmode is None:
             return self._colormode
@@ -1204,9 +1204,9 @@
         >>> screen.tracer(8, 25)
         >>> dist = 2
         >>> for i in range(200):
-                fd(dist)
-                rt(90)
-                dist += 2
+        ...     fd(dist)
+        ...     rt(90)
+        ...     dist += 2
         """
         if n is None:
             return self._tracing
@@ -1233,7 +1233,7 @@
         self._delayvalue = int(delay)
 
     def _incrementudc(self):
-        "Increment upadate counter."""
+        """Increment upadate counter."""
         if not TurtleScreen._RUNNING:
             TurtleScreen._RUNNNING = True
             raise Terminator
@@ -1304,13 +1304,10 @@
         Example (for a TurtleScreen instance named screen
         and a Turtle instance named turtle):
 
-        >>> screen.onclick(turtle.goto)
-
-        ### Subsequently clicking into the TurtleScreen will
-        ### make the turtle move to the clicked point.
+        >>> screen.onclick(goto)
+        >>> # Subsequently clicking into the TurtleScreen will
+        >>> # make the turtle move to the clicked point.
         >>> screen.onclick(None)
-
-        ### event-binding will be removed
         """
         self._onscreenclick(fun, btn, add)
 
@@ -1324,20 +1321,18 @@
         In order to be able to register key-events, TurtleScreen
         must have focus. (See method listen.)
 
-        Example (for a TurtleScreen instance named screen
-        and a Turtle instance named turtle):
+        Example (for a TurtleScreen instance named screen):
 
         >>> def f():
-                fd(50)
-                lt(60)
-
-
+        ...     fd(50)
+        ...     lt(60)
+        ...
         >>> screen.onkey(f, "Up")
         >>> screen.listen()
 
-        ### Subsequently the turtle can be moved by
-        ### repeatedly pressing the up-arrow key,
-        ### consequently drawing a hexagon
+        Subsequently the turtle can be moved by repeatedly pressing
+        the up-arrow key, consequently drawing a hexagon
+
         """
         if fun is None:
             if key in self._keys:
@@ -1369,12 +1364,12 @@
 
         >>> running = True
         >>> def f():
-                if running:
-                        fd(50)
-                        lt(60)
-                        screen.ontimer(f, 250)
-
-        >>> f()   ### makes the turtle marching around
+        ...     if running:
+        ...             fd(50)
+        ...             lt(60)
+        ...             screen.ontimer(f, 250)
+        ...
+        >>> f()   # makes the turtle marching around
         >>> running = False
         """
         self._ontimer(fun, t)
@@ -1418,7 +1413,7 @@
 
         Example (for a Turtle instance named turtle):
         >>> turtle.screensize(2000,1500)
-            ### e. g. to search for an erroneously escaped turtle ;-)
+        >>> # e. g. to search for an erroneously escaped turtle ;-)
         """
         return self._resize(canvwidth, canvheight, bg)
 
@@ -2004,7 +1999,7 @@
         Example (for a Turtle instance named turtle):
         >>> turtle.pensize()
         1
-        turtle.pensize(10)   # from here on lines of width 10 are drawn
+        >>> turtle.pensize(10)   # from here on lines of width 10 are drawn
         """
         if width is None:
             return self._pensize
@@ -2516,7 +2511,7 @@
 
         Example (for a Turtle instance named turtle):
         >>> while undobufferentries():
-                undo()
+        ...     undo()
         """
         if self.undobuffer is None:
             return 0
@@ -2592,9 +2587,9 @@
         >>> turtle.tracer(8, 25)
         >>> dist = 2
         >>> for i in range(200):
-                turtle.fd(dist)
-                turtle.rt(90)
-                dist += 2
+        ...     turtle.fd(dist)
+        ...     turtle.rt(90)
+        ...     dist += 2
         """
         return self.screen.tracer(flag, delay)
 
@@ -2763,7 +2758,6 @@
         >>> turtle.shapesize(5,2)
         >>> turtle.tilt(45)
         >>> turtle.tiltangle()
-        >>>
         """
         tilt = -self._tilt * (180.0/math.pi) * self._angleOrient
         return (tilt / self._degreesPerAU) % self._fullcircle
@@ -2963,7 +2957,7 @@
 
         Example (for a Turtle instance named turtle):
         >>> for i in range(8):
-                turtle.stamp(); turtle.fd(30)
+        ...     turtle.stamp(); turtle.fd(30)
         ...
         >>> turtle.clearstamps(2)
         >>> turtle.clearstamps(-2)
@@ -3430,9 +3424,9 @@
         Example for the anonymous turtle, i. e. the procedural way:
 
         >>> def turn(x, y):
-                left(360)
-
-        >>> onclick(turn) # Now clicking into the turtle will turn it.
+        ...     left(360)
+        ...
+        >>> onclick(turn)  # Now clicking into the turtle will turn it.
         >>> onclick(None)  # event-binding will be removed
         """
         self.screen._onclick(self.turtle._item, fun, btn, add)
@@ -3448,16 +3442,17 @@
 
         Example (for a MyTurtle instance named joe):
         >>> class MyTurtle(Turtle):
-                def glow(self,x,y):
-                        self.fillcolor("red")
-                def unglow(self,x,y):
-                        self.fillcolor("")
-
+        ...     def glow(self,x,y):
+        ...             self.fillcolor("red")
+        ...     def unglow(self,x,y):
+        ...             self.fillcolor("")
+        ...
         >>> joe = MyTurtle()
         >>> joe.onclick(joe.glow)
         >>> joe.onrelease(joe.unglow)
-        ### clicking on joe turns fillcolor red,
-        ### unclicking turns it to transparent.
+
+        Clicking on joe turns fillcolor red, unclicking turns it to
+        transparent.
         """
         self.screen._onrelease(self.turtle._item, fun, btn, add)
         self._update()
@@ -3476,9 +3471,9 @@
         Example (for a Turtle instance named turtle):
         >>> turtle.ondrag(turtle.goto)
 
-        ### Subsequently clicking and dragging a Turtle will
-        ### move it across the screen thereby producing handdrawings
-        ### (if pen is down).
+        Subsequently clicking and dragging a Turtle will move it
+        across the screen thereby producing handdrawings (if pen is
+        down).
         """
         self.screen._ondrag(self.turtle._item, fun, btn, add)
 
@@ -3525,10 +3520,11 @@
 
         Example (for a Turtle instance named turtle):
         >>> for i in range(4):
-                turtle.fd(50); turtle.lt(80)
-
+        ...     turtle.fd(50); turtle.lt(80)
+        ...
         >>> for i in range(8):
-                turtle.undo()
+        ...     turtle.undo()
+        ...
         """
         if self.undobuffer is None:
             return
diff --git a/Misc/NEWS b/Misc/NEWS
index f41263d..ef06960 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -79,6 +79,8 @@
 Library
 -------
 
+- Issue #13439: Fix many errors in turtle docstrings.
+
 - Issue #12856: Ensure child processes do not inherit the parent's random
   seed for filename generation in the tempfile module.  Patch by Brian
   Harring.
