Làm thế nào để bạn di chuyển một con rùa ngẫu nhiên trong python?

Rùa là một mô-đun sẵn có trong python. Nó cung cấp bản vẽ bằng màn hình [bìa cứng] và con rùa [bút]. Để vẽ một cái gì đó trên màn hình, chúng ta cần di chuyển con rùa. Để di chuyển rùa, có một số chức năng tôi. tiến [], lùi [], v.v.

Trong dự án này, bạn sẽ mô phỏng bước đi ngẫu nhiên. Tạo năm con rùa trở lên và đưa chúng vào Danh sách Python. Trong mỗi lần lặp lại, mỗi con rùa trong danh sách chọn một hướng ngẫu nhiên và di chuyển về phía trước một số bước không đổi

Mã nguồn

import turtle
import random
import math

turtle.setup[1000,1000]
turtle.title["Random Walk - PythonTurtle.Academy"]
a = turtle.Turtle[]
b = turtle.Turtle[]
c = turtle.Turtle[]
d = turtle.Turtle[]
e = turtle.Turtle[]

a.color['red']
b.color['green']
c.color['blue']
d.color['orange']
e.color['black']

tlist = []
tlist.append[a]
tlist.append[b]
tlist.append[c]
tlist.append[d]
tlist.append[e]

turtle.speed[0]
turtle.tracer[0]
turtle.hideturtle[]
sum = 0
count = 0
for j in range[100]:  
    for i in range[10000]:
        for t in tlist:
            t.seth[random.randrange[0,360,90]]
            t.fd[10]
        turtle.update[]
    for t in tlist:
        sum += math.sqrt[t.xcor[]*t.xcor[] + t.ycor[]*t.ycor[]]/10*2*math.sqrt[t.xcor[]*t.xcor[] + t.ycor[]*t.ycor[]]/10*2/100
        count += 1
    for t in tlist:
        t.clear[]
        t.up[]
        t.goto[0,0]
        t.down[]
    print[sum/count]

20 người đi bộ ngẫu nhiên với danh sách

import turtle
import random

screen = turtle.Screen[]
screen.setup[1000,1000]
screen.tracer[0,0]
walkers = list[]
n = 20
for i in range[n]:
    walkers.append[turtle.Turtle[]]
for i in range[n]:
    walkers[i].color[[random.uniform[0,1], random.uniform[0,1], random.uniform[0,1]]]
                  
def random_walk[]:
    for i in range[n]:
        angle = random.randint[0,3]*90
        walkers[i].seth[angle]
        walkers[i].fd[10]
    screen.update[]
    screen.ontimer[random_walk,1000//20]

random_walk[]

Thẻ. hoạt hình, danh sách, ngẫu nhiên

Giả sử chúng ta muốn giải trí bằng cách xem một con rùa lang thang ngẫu nhiên bên trong màn hình. Khi chúng tôi chạy chương trình, chúng tôi muốn con rùa và chương trình hoạt động theo cách sau

  1. Con rùa bắt đầu ở giữa màn hình

  2. Lật một đồng xu. Nếu nó ngửa thì quay sang trái 90 độ. Nếu nó sấp thì quay sang phải 90 độ

  3. Tiến 50 bước

  4. Nếu rùa đã di chuyển ra ngoài màn hình thì dừng lại, nếu không thì quay lại bước 2 và lặp lại

Lưu ý rằng chúng ta không thể dự đoán con rùa sẽ cần tung đồng xu bao nhiêu lần trước khi nó đi ra khỏi màn hình, vì vậy chúng ta không thể sử dụng vòng lặp for trong trường hợp này. Trên thực tế, mặc dù rất khó xảy ra, nhưng chương trình này có thể không bao giờ kết thúc, đó là lý do tại sao chúng tôi gọi đây là phép lặp vô thời hạn

Vì vậy, dựa trên mô tả vấn đề ở trên, chúng ta có thể phác thảo một chương trình như sau

create a window and a turtle

while the turtle is still in the window:
    generate a random number between 0 and 1
    if the number == 0 [heads]:
        turn left
    else:
        turn right
    move the turtle forward 50

Bây giờ, có lẽ điều duy nhất có vẻ hơi khó hiểu với bạn là phần về việc liệu con rùa có còn trên màn hình hay không. Nhưng đây là cái hay của lập trình, chúng ta có thể trì hoãn những thứ khó khăn và làm cho một cái gì đó trong chương trình của chúng ta hoạt động ngay lập tức. Cách chúng ta sẽ làm điều này là ủy thác công việc quyết định xem con rùa có còn ở trong màn hình hay không cho một hàm boolean. Hãy gọi hàm boolean này là isInScreen Chúng ta có thể viết một phiên bản rất đơn giản của hàm boolean này bằng cách để nó luôn trả về True hoặc bằng cách để nó quyết định một cách ngẫu nhiên, vấn đề là để nó làm điều gì đó đơn giản để chúng ta có thể tập trung vào những phần chúng ta đã có . Vì nó luôn trả về true sẽ không phải là một ý tưởng hay, chúng tôi sẽ viết phiên bản của mình để quyết định ngẫu nhiên. Giả sử có 90% khả năng con rùa vẫn ở trong cửa sổ và 10% khả năng con rùa đã trốn thoát

Bây giờ chúng tôi có một chương trình đang hoạt động để vẽ bước đi ngẫu nhiên của chú rùa có 90% cơ hội ở lại trên màn hình. Chúng tôi đang ở một vị trí thuận lợi, vì phần lớn chương trình của chúng tôi đang hoạt động và chúng tôi có thể tập trung vào phần công việc tiếp theo – quyết định xem con rùa có nằm trong ranh giới màn hình hay không

Chúng ta có thể tìm ra chiều rộng và chiều cao của màn hình bằng cách sử dụng các phương thức window_widthwindow_height của đối tượng màn hình. Tuy nhiên, hãy nhớ rằng con rùa bắt đầu ở vị trí 0,0 ở giữa màn hình. Vì vậy, chúng tôi không bao giờ muốn con rùa đi xa hơn về bên phải so với chiều rộng/2 hoặc xa hơn về bên trái so với chiều rộng âm/2. Chúng tôi không bao giờ muốn con rùa đi xa hơn chiều cao/2 hoặc xuống xa hơn chiều cao âm/2. Khi chúng ta biết ranh giới là gì, chúng ta có thể sử dụng một số câu điều kiện để kiểm tra vị trí của con rùa so với ranh giới và trả về

import turtle
import random

screen = turtle.Screen[]
screen.setup[1000,1000]
screen.tracer[0,0]
walkers = list[]
n = 20
for i in range[n]:
    walkers.append[turtle.Turtle[]]
for i in range[n]:
    walkers[i].color[[random.uniform[0,1], random.uniform[0,1], random.uniform[0,1]]]
                  
def random_walk[]:
    for i in range[n]:
        angle = random.randint[0,3]*90
        walkers[i].seth[angle]
        walkers[i].fd[10]
    screen.update[]
    screen.ontimer[random_walk,1000//20]

random_walk[]
0 nếu con rùa ở bên ngoài hoặc True nếu con rùa ở bên trong

Khi chúng tôi đã tính toán ranh giới của mình, chúng tôi có thể nhận được vị trí hiện tại của con rùa và sau đó sử dụng các điều kiện để quyết định. Đây là một thực hiện

def isInScreen[wn,t]:
    leftBound = -[wn.window_width[] / 2]
    rightBound = wn.window_width[] / 2
    topBound = wn.window_height[] / 2
    bottomBound = -[wn.window_height[] / 2]

    turtleX = t.xcor[]
    turtleY = t.ycor[]

    stillIn = True
    if turtleX > rightBound or turtleX < leftBound:
        stillIn = False
    if turtleY > topBound or turtleY < bottomBound:
        stillIn = False

    return stillIn

Có rất nhiều cách mà điều kiện có thể được viết. Trong trường hợp này, chúng tôi đã cung cấp cho

import turtle
import random

screen = turtle.Screen[]
screen.setup[1000,1000]
screen.tracer[0,0]
walkers = list[]
n = 20
for i in range[n]:
    walkers.append[turtle.Turtle[]]
for i in range[n]:
    walkers[i].color[[random.uniform[0,1], random.uniform[0,1], random.uniform[0,1]]]
                  
def random_walk[]:
    for i in range[n]:
        angle = random.randint[0,3]*90
        walkers[i].seth[angle]
        walkers[i].fd[10]
    screen.update[]
    screen.ontimer[random_walk,1000//20]

random_walk[]
2 giá trị mặc định của True và sử dụng hai câu lệnh
def isInScreen[wn,t]:
    leftBound = -[wn.window_width[] / 2]
    rightBound = wn.window_width[] / 2
    topBound = wn.window_height[] / 2
    bottomBound = -[wn.window_height[] / 2]

    turtleX = t.xcor[]
    turtleY = t.ycor[]

    stillIn = True
    if turtleX > rightBound or turtleX < leftBound:
        stillIn = False
    if turtleY > topBound or turtleY < bottomBound:
        stillIn = False

    return stillIn
0 để có thể đặt giá trị thành
import turtle
import random

screen = turtle.Screen[]
screen.setup[1000,1000]
screen.tracer[0,0]
walkers = list[]
n = 20
for i in range[n]:
    walkers.append[turtle.Turtle[]]
for i in range[n]:
    walkers[i].color[[random.uniform[0,1], random.uniform[0,1], random.uniform[0,1]]]
                  
def random_walk[]:
    for i in range[n]:
        angle = random.randint[0,3]*90
        walkers[i].seth[angle]
        walkers[i].fd[10]
    screen.update[]
    screen.ontimer[random_walk,1000//20]

random_walk[]
0. Bạn có thể viết lại phần này để sử dụng các điều kiện lồng nhau hoặc câu lệnh
def isInScreen[wn,t]:
    leftBound = -[wn.window_width[] / 2]
    rightBound = wn.window_width[] / 2
    topBound = wn.window_height[] / 2
    bottomBound = -[wn.window_height[] / 2]

    turtleX = t.xcor[]
    turtleY = t.ycor[]

    stillIn = True
    if turtleX > rightBound or turtleX < leftBound:
        stillIn = False
    if turtleY > topBound or turtleY < bottomBound:
        stillIn = False

    return stillIn
2 và đặt
import turtle
import random

screen = turtle.Screen[]
screen.setup[1000,1000]
screen.tracer[0,0]
walkers = list[]
n = 20
for i in range[n]:
    walkers.append[turtle.Turtle[]]
for i in range[n]:
    walkers[i].color[[random.uniform[0,1], random.uniform[0,1], random.uniform[0,1]]]
                  
def random_walk[]:
    for i in range[n]:
        angle = random.randint[0,3]*90
        walkers[i].seth[angle]
        walkers[i].fd[10]
    screen.update[]
    screen.ontimer[random_walk,1000//20]

random_walk[]
2 thành True trong một mệnh đề khác

Đây là phiên bản đầy đủ của chương trình đi bộ ngẫu nhiên của chúng tôi

Chúng ta có thể viết chương trình này mà không cần sử dụng hàm boolean. Bạn có thể muốn thử viết lại nó bằng cách sử dụng một điều kiện phức tạp trong câu lệnh while. Tuy nhiên, sử dụng hàm boolean giúp chương trình dễ đọc và dễ hiểu hơn nhiều. Nó cũng cung cấp cho chúng tôi một công cụ khác để sử dụng nếu đây là một chương trình lớn hơn và chúng tôi cần kiểm tra xem liệu con rùa có còn ở trên màn hình trong một phần khác của chương trình hay không. Một ưu điểm khác là nếu bạn cần viết một chương trình tương tự, bạn có thể tự tin sử dụng lại chức năng này vào lần tiếp theo khi bạn cần. Chia chương trình này thành một vài phần là một ví dụ khác về phân rã chức năng

Kiểm tra việc hiểu của bạn

    Loại vòng lặp nào có thể được sử dụng để thực hiện phép lặp sau. Bạn chọn ngẫu nhiên một số nguyên dương rồi in các số từ 1 đến và bao gồm cả số nguyên đã chọn

Chủ Đề