Python 为什么我的代码在重复模式时会在不同的位置打印模式?

Python 为什么我的代码在重复模式时会在不同的位置打印模式?,python,turtle-graphics,python-turtle,Python,Turtle Graphics,Python Turtle,当你重复这个图案时,它总是在不同的地方打印雪人,到处都是雪人的身体,但是眼睛、按钮等都是正确的。我认为这是因为构成身体的圆圈大小不同,而且呈对角线打印。请帮忙,非常感谢 # Import required module import turtle # Create turtle object t = turtle.Turtle() # Create a screen screen =turtle.Screen() # Set background color s

当你重复这个图案时,它总是在不同的地方打印雪人,到处都是雪人的身体,但是眼睛、按钮等都是正确的。我认为这是因为构成身体的圆圈大小不同,而且呈对角线打印。请帮忙,非常感谢

# Import required module 
import turtle 
  
# Create turtle object 
t = turtle.Turtle() 
  
# Create a screen  
screen =turtle.Screen() 
  
# Set background color 
screen.bgcolor("sky blue") 
      
# Function to draw body of snowman 
def draw_circle(color, radius, x, y):
    t.penup() 
    t.fillcolor (color) 
    t.goto (x, y) 
    t.pendown() 
    t.begin_fill() 
    t.circle (radius) 
    t.end_fill() 

# Function to draw arms  
def create_line(x, y, length, angle): 
    t.penup() 
    t.goto(x, y) 
    t.setheading(angle) 
    t.pendown() 
    t.forward(length) 
    t.setheading(angle + 20) 
    t.forward(20) 
    t.penup() 
    t.back(20)
    t.pendown() 
    t.setheading(angle - 20) 
    t.forward(20) 
    t.penup() 
    t.home() 

# Illustrating snowman  
# Drawing snowman body 
def snowman(x):
    t.pensize(3)
    draw_circle ("#ffffff", 30 , 0 + x*100, -40) 
    draw_circle ("#ffffff", 40 , 0 + x*100, -100) 
    draw_circle ("#ffffff", 60 , 0 + x*100, -200) 
    # Drawing left eye 
    draw_circle ("#ffffff", 2 , -10 + x*100, -10)  
    # Drawing right eye 
    draw_circle ("#ffffff", 2 , 10 + x*100, -10)  
    # Drawing nose 
    draw_circle ("#FF6600", 3 , 0 + x*100, -15)  
    # Drawing buttons on 
    draw_circle ("#ffffff", 2 , 0 + x*100, -35) 
    draw_circle ("#ffffff", 2 , 0 + x*100, -45) 
    draw_circle ("#ffffff", 2 , 0 + x*100, -55) 
    # Drawing left arm 
    create_line(-35 + x*100, -50, 30, 160)  
    # Drawing right arm 
    create_line(35 + x*100, -50, 30, 20)  
    # Drawing hat 
    t.penup() 
    t.goto (-35 + x*100, 8) 
    t.color ("black") 
    t.pensize (6) 
    t.pendown() 
    t.goto (35 + x*100, 8) 
    t.goto (30 + x*100, 8) 
    t.fillcolor ("black") 
    t.begin_fill() 
    t.left (90) 
    t.forward (15) 
    t.left (90) 
    t.forward (60) 
    t.left (90) 
    t.forward (15) 
    t.end_fill()

repeat = int(input("how many times would you like to repeat the pattern?"))

def penPattern():
    for x in range (repeat):
        snowman(x)
        
penPattern()

与开始第二个雪人时的方向相比,你的乌龟在开始第一个雪人时面向不同的方向

对于第一个雪人,你的乌龟在开始画每个球的时候都是面向右边的。这将使您传递到
绘制圆的起始位置成为圆的最底点。第二个雪人,你的乌龟面朝下。这将使您传递到
绘制圆的起始位置成为圆的最左侧点。参见此处所示的起始位置和方向:

要解决这个问题,您应该在完成第一个雪人之后将海龟的方向恢复为脸。您可以通过将
t.left(90)
添加到
snowman
函数的末尾来完成此操作: