试着用随机数找出海龟的最终距离

2024-04-20 12:26:06 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的代码,我试图找出如何得到我的乌龟所走过的整个长度的总距离,我不知道如何计算它,而不把它从一个循环中取出来,我不能这样做,因为numsteps是一个输入。顺便说一下,这是给学校的

for a in range(numsteps):
    s = randint(-100,100)
    angle = random() * 2 * pi
    x = s * cos(angle)
    y = s * sin(angle)
    walking.goto(x,y)
distance = sqrt(x ** 2 + y ** 2)
finald.goto(x,y)
print("The final distance is {:,.0f}".format(distance))
print("Your total distance traveled is {}")

Tags: 代码in距离forispirangerandom
2条回答

您必须保存上一个位置,以计算从当前位置到它的距离

然后每次计算距离(接近回路末端)后,当前位置变为前一个位置:

from math import sin, cos, pi, sqrt
from random import random, randint

start_x, start_y = 0, 0                      # The starting point coordinates
previous_x, previous_y = start_x, start_y   

total_distance = 0                           # We will progressively increase it

numsteps = int(input("Number of steps: "))

for __ in range(numsteps):
    s = randint(-100, 100)
    angle = random() * 2 * pi
    x = s * cos(angle)
    y = s * sin(angle)
    # walking.goto(x, y)                     # I commented it out for testing
    distance = sqrt((x - previous_x) ** 2 + (y - previous_y) ** 2)
    total_distance += distance
    prev_x, prev_y = x, y
    
final_distance = sqrt((x - start_x) ** 2 + (y - start_y) ** 2)

print("The final distance is {:,.0f}".format(final_distance))
print("Your total distance traveled is {:,.0f}".format(total_distance))

请注意__而不是您的a(或其他常规名称)-此特殊名称(一个或两个下划线字符)表示其值不符合我们的兴趣

(因为我们只使用range(numsteps)作为计数器。)

我会根据一些观察结果进行简化:

  1. 海龟已经知道距离函数了,不需要再重新设计它

  2. 当我们可以朝任何方向前进时,向后移动(负距离)是多余的,这与朝任何方向向前移动没有什么区别

  3. 我们可以更容易地计算我们已经移动了多远,而不是测量我们移动多远

这导致代码更像:

from math import pi
from random import random
from turtle import Screen, Turtle

numsteps = int(input("Number of steps: "))

screen = Screen()

walking = Turtle()
walking.radians()

total_distance = 0  # sum of all distances traveled

for _ in range(numsteps):
    previous = walking.position()

    angle = random() * 2 * pi
    distance = random() * 100

    walking.setheading(angle)
    walking.forward(distance)

    total_distance += walking.distance(previous)

final_distance = walking.distance(0, 0)  # distance from where we started

print("Your final distance traveled is {:,.0f} pixels".format(final_distance))
print("Your total distance traveled is {:,.0f} pixels".format(total_distance))

screen.exitonclick()

输出

> python3 test.py
Number of steps: 100
Your final distance traveled is 356 pixels
Your total distance traveled is 4,630 pixels
>

相关问题 更多 >