【问题标题】:Python Turtle Not Drawing CorrectlyPython Turtle 绘图不正确
【发布时间】:2016-07-20 17:11:39
【问题描述】:

前段时间我做了这个程序来绘制一个标志,我最近尝试运行它,但由于某种原因它没有工作,即使它是我最初编写它的时候。条纹画得很好,但是当谈到蓝色方块和星星时,海龟指针不会移动到任何地方。我正在使用 python 2.7.11,但这是一年前写的,我想这可能是它不起作用的原因吗?我不记得我用的是什么版本的python。

import turtle

def draw_stripes(length, height, color):
    turtle.speed('fast')
    turtle.color(color)
    turtle.begin_fill()
    turtle.pendown()
    turtle.forward(length)
    turtle.left(90)
    turtle.forward(height)
    turtle.left(90)
    turtle.forward(length)
    turtle.left(90)
    turtle.forward(height)

    for i in range(0,6):
        turtle.penup()
        turtle.left(180)
        turtle.forward(height*2)
        turtle.pendown()
        turtle.right(90)
        turtle.forward(length)
        turtle.left(90)
        turtle.forward(height)
        turtle.left(90)
        turtle.forward(length)
        turtle.left(90)
        turtle.forward(height)

    turtle.end_fill()

def draw_canton(length, height, color):
    turtle.speed('fast')
    turtle.left(180)
    turtle.forward(height/13)
    turtle.color(color)
    turtle.begin_fill()
    turtle.right(90)
    turtle.pendown()
    turtle.forward(length*(2/5))
    turtle.right(90)
    turtle.forward(height*(7/13))
    turtle.right(90)
    turtle.forward(length*(2/5))
    turtle.right(90)
    turtle.forward(height*(7/13))
    turtle.end_fill()

def draw_star_row_six(length, height, size):
    turtle.speed('fast')
    turtle.right(90)
    turtle.forward(length)
    turtle.right(90)
    turtle.forward(length)
    turtle.right(180)
    turtle.forward(size)
    turtle.right(163)

    for i in range (6):
        draw_star(size, 'white')
        turtle.left(73)
        turtle.forward(length*2)
        turtle.right(73)

    turtle.left(253)
    turtle.forward((length*2)*6)
    turtle.left(90)
    turtle.forward(height*2)
    turtle.right(180)
    turtle.right(163)

    for i in range (6):
        draw_star(size, 'white')
        turtle.left(73)
        turtle.forward(length*2)
        turtle.right(73)

    turtle.left(253)
    turtle.forward((length*2)*6)
    turtle.left(90)
    turtle.forward(height*2)
    turtle.right(180)
    turtle.right(163)

    for i in range (6):
        draw_star(size, 'white')
        turtle.left(73)
        turtle.forward(length*2)
        turtle.right(73)

    turtle.left(253)
    turtle.forward((length*2)*6)
    turtle.left(90)
    turtle.forward(height*2)
    turtle.right(180)
    turtle.right(163)

    for i in range (6):
        draw_star(size, 'white')
        turtle.left(73)
        turtle.forward(length*2)
        turtle.right(73)

    turtle.left(253)
    turtle.forward((length*2)*6)
    turtle.left(90)
    turtle.forward(height*2)
    turtle.right(180)
    turtle.right(163)

    for i in range (6):
        draw_star(size, 'white')
        turtle.left(73)
        turtle.forward(length*2)
        turtle.right(73)

    turtle.left(253)
    turtle.forward((length * 2)*6)
    turtle.right(90)
    turtle.forward(height*7)

def draw_star_row_five(length, height, size):
    turtle.right(90)
    turtle.forward(length)
    turtle.right(73)

    for i in range (5):
        draw_star(size, 'white')
        turtle.left(73)
        turtle.forward(length*2)
        turtle.right(73)

    turtle.left(253)
    turtle.forward((length*2)*5)
    turtle.left(90)
    turtle.forward(height*2)
    turtle.right(180)
    turtle.right(163)

    for i in range (5):
        draw_star(size, 'white')
        turtle.left(73)
        turtle.forward(length*2)
        turtle.right(73)

    turtle.left(253)
    turtle.forward((length*2)*5)
    turtle.left(90)
    turtle.forward(height*2)
    turtle.right(180)
    turtle.right(163)

    for i in range (5):
        draw_star(size, 'white')
        turtle.left(73)
        turtle.forward(length*2)
        turtle.right(73)

    turtle.left(253)
    turtle.forward((length*2)*5)
    turtle.left(90)
    turtle.forward(height*2)
    turtle.right(180)
    turtle.right(163)

    for i in range (5):
        draw_star(size, 'white')
        turtle.left(73)
        turtle.forward(length*2)
        turtle.right(73)

    turtle.home()

def draw_star(size, color):
    turtle.color(color)
    turtle.begin_fill()
    turtle.pendown()

    for i in range(5):
        turtle.forward(size)
        turtle.right(144)

    turtle.end_fill()
    turtle.penup()

def get_color():
    return r,g,b



def draw_flag(height):
    turtle.speed('fast')
    turtle.setx(-150)
    turtle.color('black')
    turtle.pendown()
    turtle.forward(height*1.9)
    turtle.left(90)
    turtle.forward(height)
    turtle.left(90)
    turtle.forward(height*1.9)
    turtle.left(90)
    turtle.forward(height)
    turtle.penup()
    turtle.left(90)
    draw_stripes((height*1.9), height/13, 'red')
    draw_canton((height*1.9), height, 'blue')
    draw_star_row_six(((height*1.9)*(2/5))/12,(height*(7/13))/10, ((height/13)*(4/5))/2)
    draw_star_row_five(((height*1.9)*(2/5))/12,(height*(7/13))/10, ((height/13)*(4/5))/2)

height = float(input('Enter The Height of Your Flag: '))
draw_flag(height)

【问题讨论】:

    标签: python-2.7 drawing turtle-graphics


    【解决方案1】:

    这是你的问题:

    我正在使用 python 2.7.11

    由于除法运算符在 Python 2 和 Python 3 之间的工作方式不同,因此该程序只有在 Python3 中运行才能正常工作。证明:

    在 Python2 中,除法截断:3 / 2 => 1
    在 Python3 中,除法总是产生一个浮点数:3 / 2 => 1.5

    只需在 Python3 中运行您的代码,它应该可以工作。

    【讨论】:

    • ...或者,更好的是,只需在文件顶部添加from __future__ import division
    • @Gerrat:这行得通,但我不会这样做,除非出于某种原因在 Python2 中运行是可取的。
    • 我不会为了避免在程序中添加一行而安装一个全新的 Python 版本。他提到他正在使用 Python2.7。
    • @Gerrat:我想我忘记了,对于某些人来说,安装新版本的 Python 需要的时间比 apt-get install python3 还要多。如果这是一次性脚本,那么是的,他不应该经历比他需要的更多的麻烦。
    • @Gerrat 我选择了你的方式,因为我不想安装 3。感谢大家的帮助。
    猜你喜欢
    • 2016-11-20
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多