我需要在乌龟上绘制一个功能f1(x)
。我需要从x=-7
开始并提前.01直到达到x=-3
。我还需要使用 25
我已经在主函数中创建了一个用于循环。当我去坐标(i,i)
并向前 .01
时,绘制对角线线,但是当我将第二个i
替换为f1(i)
时,什么也不会发生。
def f1(x):
return 2 * sqrt((-abs(abs(x)-1)) * abs(3 - abs(x))/((abs(x)-1)* (3-abs(x)))) * (1 + abs(abs(x)-3)/(abs(x)-3))*sqrt(1-(x/7)**2)+(5+0.97* (abs(x-0.5)+abs(x+0.5))-3*(abs(x-0.75)+abs(x+0.75)))*(1+abs(1- abs(x))/(1-abs(x)))
def main():
wn=turtle.Screen()
wn.bgcolor("white")
wn.title("plotting")
draw=turtle.Turtle()
draw.fillcolor("black")
draw.speed(10)
draw.penup()
scale=25
for i in range(-700,-300,1):
draw.goto(((i/100)*scale),((f1(i)/100)*scale))
draw.pendown()
我不确定应该绘制什么,因为这是我们应该发现的,但是现在什么都没有绘制,当我运行时,所有的事情就是乌龟窗口打开。
我发现强迫代码适合range()
可能会导致更多的问题,而简单的while
循环有时可能是要走的方法:
from math import sqrt
from turtle import Screen, Turtle
SCALE = 25
def f1(x): # long line broken up based on where parentheses balance
return 2 *
sqrt((-abs(abs(x) - 1)) * abs(3 - abs(x)) / ((abs(x) - 1) * (3 - abs(x)))) * (1 + abs(abs(x) - 3) / (abs(x) - 3)) *
sqrt(1 - (x / 7) ** 2) +
(5 + 0.97 * (abs(x - 0.5) + abs(x + 0.5)) - 3 * (abs(x - 0.75) + abs(x + 0.75))) *
(1 + abs(1 - abs(x)) / (1 - abs(x)))
wn = Screen()
wn.title("plotting")
draw = Turtle()
draw.speed('fastest')
draw.penup()
i = -7.0
while i < -3.0:
draw.goto(i * SCALE, f1(i) * SCALE)
draw.pendown()
i += 1.0 / 100
wn.exitonclick()
在python 3或python 2中,我似乎对我有同样的效果。
我认为问题是您正在尝试计算负数的平方根。更正的代码:
import turtle
from math import sqrt
def f1(x):
return 2 * sqrt(abs(abs(x)-1)) * abs(3 - abs(x))/((abs(x)-1)* (3-abs(x))) * (1 + abs(abs(x)-3)/(abs(x)-3))*sqrt(abs(1-(x/7)**2))+(5+0.97* (abs(x-0.5)+abs(x+0.5))-3*(abs(x-0.75)+abs(x+0.75)))*(1+abs(1- abs(x))/(1-abs(x)))
def main():
wn=turtle.Screen()
wn.bgcolor("white")
wn.title("plotting")
draw=turtle.Turtle()
draw.fillcolor("black")
draw.speed(10)
draw.penup()
scale=25
for i in range(-700,-300):
draw.goto(i*(scale/100),(f1(i)*(scale/100)))
draw.pendown()
main()