第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

提高混沌游戲效率

提高混沌游戲效率

元芳怎么了 2022-06-07 18:48:21
我編寫了這個腳本來使用海龜模塊來復制我在 Numberphile 頻道上看到的混沌游戲。繪制了大量的點以使其在更大的范圍內實際運行良好。我認為大量的點是導致程序在一段時間后開始運行緩慢的原因,我想知道是否有人可以幫助我想出一個解決方法。我愿意接受任何類型的解決方案,只要控件保持不變并且頂點數(shù)可以是 3 以上的任何數(shù)字。如果有人不知道混沌游戲是什么,那么它就是一個包含任意數(shù)量頂點的多邊形的游戲。首先,您在多邊形內放置一個點,隨機選擇一個頂點并在您之前放置的點和隨機選擇的頂點之間繪制一個新點。你不斷重復這個過程,每次你都會使用新繪制的點。在這個腳本中,我還包含了一條規(guī)則,以確保它不會連續(xù)兩次選擇相同的頂點來形成具有超過 3 個頂點的漂亮分形。3 個頂點實際上形成了謝爾賓斯基三角形。這是 Numberphile 視頻的鏈接:https ://www.youtube.com/watch?v=kbKtFN71Lfs正如您可能知道的那樣,我對 Python 和一般編碼有點陌生。完整代碼:import turtle as timport tkinter as tkfrom tkinter import ttkfrom random import randintwn = t.Screen()wn.colormode(255)t.pu();t.ht();t.speed(0)plist = []l = 0val = 0pb=ttk.Progressbar(orient="horizontal",length=wn.window_width(),mode="determinate")pb.pack(side=tk.BOTTOM)pb["value"]=0def Clear():    t.clear()    plist = []def Dot(x, y):    t.goto(x, y)    t.dot(5, (0, 0, 255))    plist.append(t.pos())def Run(x, y):    wn.onscreenclick(None)    wn.tracer(0, 0)    l = len(plist)    pb["maximum"]=l*1000    xyc = randint(0, l-1)    xyc_old = 0    for _ in range(l*10):        xyc = randint(0, l-1)        for i in range(100):            xyc = randint(0, l-1);            if l >= 4:                while xyc == xyc_old:                    xyc = randint(0, l-1);                xyc_old = xyc;            t.goto((t.pos()[0]+plist[xyc][0])/2, (t.pos()[1]+plist[xyc][1])/2);                 t.dot(2, (255, 0, 0));            pb["value"]+=1;            pb.update()        wn.update()    plist.clear()    wn.onscreenclick(Dot, btn=1)    wn.onscreenclick(Run, btn=3)  wn.onscreenclick(Dot, btn=1)wn.onscreenclick(Run, btn=3)wn.onkey(Clear, "c")wn.listen()wn.mainloop()我覺得我的編碼風格與這里的許多人非常不同,但我希望這不是問題。
查看完整描述

1 回答

?
郎朗坤

TA貢獻1921條經驗 獲得超9個贊

我認為大量的點是導致程序在一段時間后開始運行緩慢的原因,我想知道是否有人可以幫助我想出一個解決方法。


令人驚訝的是,沒有。這是您自己的儀器(進度條)減慢您的速度。注釋掉:


pb.update()

看看會發(fā)生什么。


我覺得我的編碼風格與這里的許多人非常不同,但我希望這不是問題。


這是一個與糟糕的編碼風格重疊的問題。例如,缺少空格、使用分號、代碼中的有效無操作等。我對您的代碼的返工:


from turtle import Screen, Turtle

import tkinter as tk

from tkinter import ttk

from random import randrange


def clear():

    turtle.clear()

    plist.clear()


def dot(x, y):

    turtle.goto(x, y)

    turtle.dot(5, 'blue')

    plist.append(turtle.position())


def run(x, y):

    screen.onscreenclick(None, btn=1)

    screen.onscreenclick(None, btn=3)

    screen.onkey(None, 'c')


    length = len(plist)

    flag = length >= 4

    pb['maximum'] = length * 1000

    xyc_old = 0


    for _ in range(length * 100):

        for _ in range(10):

            xyc = randrange(length)


            if flag:

                while xyc == xyc_old:

                    xyc = randrange(length)

                xyc_old = xyc


            x, y = turtle.position()

            dx, dy = plist[xyc]

            turtle.goto((x + dx) / 2, (y + dy) / 2)

            turtle.dot(2)


        pb['value'] += 10

        pb.update()


    plist.clear()

    pb['value'] = 0


    screen.onscreenclick(dot, btn=1)

    screen.onscreenclick(run, btn=3)

    screen.onkey(clear, 'c')


plist = []


screen = Screen()

screen.tracer(False)


turtle = Turtle()

turtle.hideturtle()

turtle.setundobuffer(None)

turtle.color('red')

turtle.penup()


pb = ttk.Progressbar(orient='horizontal', length=screen.window_width(), mode='determinate')

pb.pack(side=tk.BOTTOM)

pb['value'] = 0


screen.onscreenclick(dot, btn=1)

screen.onscreenclick(run, btn=3)

screen.onkey(clear, 'c')

screen.listen()


screen.mainloop()

其他變化包括:


plist = []沒有.in將Clear()無法工作global plist。改為使用plist.clear()。


您還需要禁用(并重新啟用)wn.onkey(Clear, "c"),Run否則您的用戶可能會破壞程序。您還需要單獨禁用兩個鼠標按鈕。


你真的想要randrange(),沒有randint()。


查看完整回答
反對 回復 2022-06-07
  • 1 回答
  • 0 關注
  • 111 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號