بيثون السلاحف الرسومات لا استجابة ، تشغيل مع سبايدر من أناكوندا

import turtle

def main():
    window = turtle.Screen()
    luis = turtle.Turtle()

    make_square(luis)

    turtle.mainloop()

def make_square(luis):
    turn = 0
    lenght = input('Insert lenght: ')
    lenght = int(lenght)

    while turn < 3:
        turn = input('Insert number of sides of your figure: ')
        turn = int(turn)
        if turn <  3:
            print('The minimum number of sides is 3')

    angle = 360/turn

    for i in range(turn):
        luis.forward(lenght)
        luis.left(angle)

        turtle.done()

if __name__ == '__main__':
    main()

أحاول أن أركض في سباكوندا سبايدر ، ولكن عندما تظهر نافذة رسومات السلاحف ، يستغرق الأمر وقتا طويلا لرسم أو لا يرسم.

0
turtle.mainloop() و turtle.done() هي مرادفات. تحتاج فقط إلى استدعاء واحد منهم ، مرة واحدة ، كآخر ما يقوم به برنامجك قبل تحويل السيطرة إلى tkinter. حافظ على turtle.mainloop() المكالمة في main() وأرمي الخاص بك turtle.done() في make_square() </القانون>
وأضاف المؤلف cdlane, مصدر

1 إجابة

ربما لديك خطأ في المسافة البادئة هناك.

أنت أتصل

وturtle.done()

داخل الحلقة الخاصة بك التي ينبغي أن ترسم متشابكة.

إذا قمت بنقل turtle.done() خارج تلك الحلقة وقم بتشغيل البرنامج مرة أخرى ، فإن ذلك يؤدي إلى سحب n-tangle بالكامل. والسبب في ذلك هو أن turtle.done() سيوقف البرنامج مؤقتًا وستحتاج إلى إغلاق النافذة للمتابعة.

يجب أن تبدو كالتالي:

import turtle

def main():
    window = turtle.Screen()
    luis = turtle.Turtle()

    make_square(luis)

    turtle.mainloop()

def make_square(luis):
    turn = 0
    lenght = input('Insert lenght: ')
    lenght = int(lenght)

    while turn < 3:
        turn = input('Insert number of sides of your figure: ')
        turn = int(turn)
        if turn <  3:
            print('The minimum number of sides is 3')

    angle = 360/turn

    for i in range(turn):
        luis.forward(lenght)
        luis.left(angle)

    turtle.done()

if __name__ == '__main__':
    main()

وهناك نوع أكثر إثارة للاهتمام هو ما يلي. بالإضافة إلى ذلك ، يجب أن تتجنب دائمًا الحصول على إدخال سطر الأوامر دون معالجة الاستثناء نظرًا لأنك لا تستطيع التأكد من قيام المستخدم بإدخال أمر غير منتظم ...

import random
import turtle

def main():
    window = turtle.Screen()
    luis = turtle.Turtle()

    make_square(luis)

    turtle.mainloop()

def make_square(luis):


    turn = 0
    length = 0

    while length == 0:
        lengthInput = input('Insert lenght: ')
        try:
            length = int(lengthInput)
        except:
            if turn == 'end':
                return

    luis.pencolor(random.choice(['black', 'red', 'green', 'blue', 'yellow']))

    while turn < 3:
        turn = input('Insert number of sides of your figure: ')
        try:
            turn = int(turn)
        except:

            if turn == 'end':
                return

        if turn <  3:
            print('The minimum number of sides is 3')

    angle = 360/turn

    for i in range(turn):
        luis.forward(length)
        luis.left(angle)


    make_square(luis)

if __name__ == '__main__':
    main()
0
وأضاف
حسنًا ، شكرًا ، الرمز قيد التشغيل بالفعل ؛ ومع ذلك ، عندما أعطي الثانية من الكود ، فإنه لا يحصل على الرسم البياني ويستغرق الكثير من الوقت ، ثم عند محاولة إغلاق النافذة لا يستجيب. هل يحدث شيء مشابه لك؟
وأضاف المؤلف NILS ERICSON SÀNCHEZ HUAY, مصدر
ماذا تقصد من الجولة الثانية؟ يمكنك الاتصال make_square مع luse السلاحف. ثم تطلب من المستخدم طول الجانب وعدد الجوانب. ثم تقوم برسم أي شيء يريده المستخدم ، والانتهاء من برنامج السلاحف الخاص بك ( turtle.done() ) والخروج من وظيفة make_square. ثم أدخل turtle.mainloop() الذي ينتج عنه عدم إنهاء البرنامج (لا تزال الشاشة معروضة).
وأضاف المؤلف mjoppich, مصدر
لقد قمت بتحرير جوابي قليلاً - هل يمكنك محاولة شرح ما سيفعله الرمز الإضافي؟
وأضاف المؤلف mjoppich, مصدر