Kalosak
Kalosak

Reputation: 13

Random Walk - Any Direction

I'm new to this, but I'm trying to create a program that goes on a Random Walk in turtle and I have no idea what I'm doing.This is the program that I need to create Requirements, and this is what I have so far Code. I'm starting to get a little lost, and am wondering if I 'm headed towards the right direction or if i need to scrap it and start all over again

Thanks,

import turtle
import random
import math

def start():
    myS = turtle.Screen()
    myS.title("Random Walk")
    border = 50
    myWin.setworldcoordinates(-border, -border, border, border)

def go(heading, step_size):
    turtle.setheading(heading)
    turtle.forward(step_size)

def random_walk(step_size, steps):
    angle = random.random() * 2 * math.pi
    x = 0
    y = 0
    x = x + math.cos(angle)
    y = y + math.sin(angle)
    coord = (x, y)
    for _ in range(steps):
        go(random.choice(coord), step_size)

if __name__ == '__main__':
    turtle.hideturtle()
    turtle.speed('fastest')
    random_walk(15, 1000)

Upvotes: 0

Views: 2621

Answers (2)

0x6d64
0x6d64

Reputation: 153

Because this looks like a homework assignment I don't want to just fix your errors but instead give you pointers to the right solution. I will also hide hints behind spoilers...

  1. if you run random_walk() with e.g. parameters random_walk(1, 1) your will notice that the direction of the walk will not appear random. Use some form of debugging to find out why that is

    your go() functions expects an angle, look at what random.choice() produces

  2. if you fix the issue number 1. you will see that the turtle will not draw a random line at all again

    looks like the angle does not change every step. find a solution that updates the angle before each step!

  3. units of angles: find out what unit setheading() expects: hint

  4. your requirements mention the output of straight line distance and distance travelled. This somehow sounds like you need some form of tally variable (one or several). hint: if you read the turtle documentation carefully you might find a funtion that maybe makes this task easier

    read the documentation for turtle.position().

Upvotes: 0

user8408080
user8408080

Reputation: 2468

Your random_walk function does way to many things; I think it grew over your head a little. What it should do for every step:

  • Calculate a random angle between 0 and 2*math.pi
  • Calculate x and y with the given formulas
  • Call turtle.goto(x,y) to go to these coordinates

Also there was a little typo in start.

import turtle
import random
import math

def start():
    myS = turtle.Screen()
    myS.title("Random Walk")
    border = 50
    myS.setworldcoordinates(-border, -border, border, border)

def go(heading, step_size):
    turtle.setheading(heading)
    turtle.forward(step_size)

def random_walk(steps):
    x = 0
    y = 0
    for i in range(steps):
        angle = random.random()*2*math.pi
        x = x + math.cos(angle)
        y = y + math.sin(angle)
        turtle.goto(x,y)



if __name__=="__main__":
    start()
    random_walk(100)

Upvotes: 1

Related Questions