我试图创建一个 Turtle 项目,如下所示:
def randcol(): hex=["1","2","3","4","5","6","7","8","9","0","a","b","c","d","e","f"] cur="#" for _ in range(6): cur+=(choice(hex)) return cur def _setup(): import turtle as t global t t.register_shape("circ.gif") from random import choice global choice from time import sleep global sleep def _main(): wn=t.Screen() wn.bgcolor((randcol())) ck=t.Turtle() ck.fillcolor((randcol())) ck.shape("circ.gif") ck.shapesize(40,50) ck.penup() ck.setpos(0,0) while running: wn.mainloop() if __name__=="__main__": _setup() global running=True _main()
但是,该代码绝对没有给出任何错误,并且无法按预期工作。
我注册了一个图像“circ.gif”并尝试使用它。但它没有显示。我已确保该文件位于同一目录中并且扩展名为 gif。这是“circ.gif”文件:
GIF89a���������,-�-.�;<�<=�JK�KL�YZ�Z[�hi�ij�wx�wy��������������������!�,��� '�di�h��l�p,�tm�x��|���pH,�Ȥr�l:�ШtJ�Z�جv��z��xL.���z�n���|N����~������������������������������������������������������������������������������������������������������������������������������������ H���*\Ȱ�Ç#J�H��ŋ3j�ȱ�Ǐ C�I��ɓ(S��\ɲ�˗0cʜI��͛8s��ɳ�ϟ@� J��ѣH�*]ʴ�ӧP�J�J��իX�j�ʵ�ׯ`ÊK��ٳhӪ]˶�۷p�ʝK��ݻx���˷�߿�L���È+^̸��ǐ#K�L���˘3k�̹��ϠC�M���ӨS�^ͺ��װc˞M���۸s��ͻ����N����ȓ+_μ���УK�N����سk�ν����ËO�����ӫ_Ͼ�����˟O��������Ͽ���(�h�&����6��F(�Vh�f��v�� �(�$�h�(���,���0�(�4�h�8��<���@)�Di�H&��L6��PF)�TVi�Xf��\v��`�)�d�i�h���l���p�)�t�i�x�)|�Az���8�����6�(� ��H����1( ���*ꨑ:��j� x:꫰�*80��:�*���믌����J� ���*�������������Ұ� d+ �@�ݮ`����閐��«ホ ��j��l0� L�A�H`��G̀y �o�L�uj�@� g�q��lr�@���z������-�l3��.��3�9��A�?�3g��F7-rZVp��T���Qj@t�\���@�����L��+���������$Sӭ7��+�[�-8��Aރ'N�I�(���۷������cjc������礓[��1V^��� �.��4������/����� ��o�¯X�����7/���?<��j.��c���x�����㗯~��~����j�S�����[�������P�G@�A�+��@�*�����6h�| ��>�y Z�?� ���� O����,̠T���̏gC*`@��# � 1�)�O �C�g�L����(����1�m�D�,q�6t�}���N�>,� �8����]L��Ḑst����<�m�р��@�n�1�{��H!�1=�c#m���q�G��w�IB�琝�!��P Q9��xhJV�<Zl%5y� �r���%o��𬒗V�%wv L!���,� ���(ӊ��$����=��v����1;�� ��n�������E;b��D�u�(&�:άg��s�����?�X���r�=�r���2:�l�#��F�����I�E)�P�0�r�1@t�#*�9�,����p�ԃ�\I_�Ó.G�4-`G�#М����ɧOc�J��t�,<�M����Г�'<�r\ U.��U-�R��Ь���y�W3(Ֆ�����Y���tu��+q���{'�tU P��Ѽ�8������ v}m���t���\���u8x�,��:��j6~� �g�GX�v��K�o�Z�9�7�mm�&������m��Y�dv����o~\� �7�-�����*Wz�}n�#Z�2�����v����rwz��Mu�������e�yu���2o��i�{�_��w��{-{�{<����]}o��W��݀m3�cn�i��#a�HxS�m.���y�äUA���8��q�=��{n��u1���xn4�MJo���ǐ��o���7.��*a%�����VO�i��n��5��lc�o���7I.s�l*����iLf�v+��d8NO��3/ז�F�j]4���Ä>��yc�D,��q��� 2Kb���/�E�Ƴ�6X����PG�ȱ������lz���a}�Q/�Դ�����\c���A���%k��o�y�{uf�z���p�mf��9��6���)kX�Ζ�-�];'��U��3�t�������g���{Tl�N��m�����������s^�#���V8t~l�'��ˆtvЭ�uK�ָv8�l�O��6��m��;���t���fg�ÎyyH��|�ⴖ�v-�pc'�ж�w�p�G���yy4��\��<Ds�.MZ+}<(���uI[�;��HN;=>�Vs�m�l_���:�)��O9����������I���N��c���� / �w�hT;���h^Ɯ�yy9���?���z�>��oP��{Q\�t�틋y�]��'P��� ���_��+d-_��W���M����f_�ڇ��y���֏�����I4z�@�j?c�" �_/�����p�~7b�g�,��=�H%�>B�>e�3���DU\W#Pv��#i�P ��:6�d6Ycy��C���t&8$K�L�}R�,�F_�%@s[t��$?8I �PR�y4iR;HAL�&���3�%���G&%3B�҅g�-�=�8h'ex< P}qr/@8;�0���<W(��|x.w80�kSPbX�%���=��@ �І/s܂�G�0�T/p`�H��; ��h��v��*��~���r��@�苼���'Cx�ʸ��،�����8��X��x�ؘ�ڸ��؍�����8��X��x�蘎긎�؎�����8��X��x����؏���9�Y�y��� ��ِ��9�Y�y�����ّ� �"9�$Y�&y�(��*��,ْ.�0�29�4Y�6y�8��:��<ٓ>�@�B9�DY�Fy�H��J��LٔN�P�R9�TY�Vy��X��Z��\ٕ^�`�b9�dY�fy�h��j��lٖn�p�r9�tY�vy�x��z��|ٗ~���9��Y��y��������٘����9��Y��y��������ٙ����9��Y��y��������ٚ����9��Y��y��������ٛ�����9��Y��y�ș�ʹ��ٜ�����9��Y��y�ؙ�ڹ��ٝ�����9��Y��y�虞깞�ٞ�����9��Y��y����ٟ����:�Z�z��� ��ڠ��:�Z�z�����ڡ� �":�$Z�&z�(��*��,ڢ.�0�2:�4Z�6z�8��:��<ڣ>�@�B:�DZ�Fz�H��J��LڤN�P�R:�TZ�Vz�X��Z��\ڥ^�`�b:�dZ�fz�h��j��lڦn�p�r:�tZ�vz�x��z��|ڧ~���:��Z��z��������ڨ����:��Z��z��������ک����:��Z��z���������ڪ����:��Z��z��������ګ�����:��Z��z�Ț�ʺ��ڬ�����:��Z��z�ؚ�ں��ڭ�����:��Z��z�蚮꺮�ڮ�����:��Z��z����گ���!;
问题出在您的代码中 running=True 的位置。在 Python 中,您不能在变量名前面加上 global 关键字来赋值,这将导致语法错误。
running=True
global
要解决这个问题,您可以在 _main() 函数中将 running 定义为一个局部变量,并在需要改变 running 的值时使用 nonlocal 关键字。这样可以使 running 成为 _main() 函数内的局部变量,从而避免全局变量问题。
_main()
running
nonlocal
以下是修改后的代码:
def randcol(): hex = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "a", "b", "c", "d", "e", "f"] cur = "#" for _ in range(6): cur += (choice(hex)) return cur def _setup(): import turtle as t global t t.register_shape("circ.gif") from random import choice global choice from time import sleep global sleep def _main(): running = True # Define running as a local variable wn = t.Screen() wn.bgcolor(randcol()) # Call the randcol() function to get a random color ck = t.Turtle() ck.fillcolor(randcol()) # Call the randcol() function to get a random color ck.shape("circ.gif") ck.shapesize(40, 50) ck.penup() ck.setpos(0, 0) while running: wn.update() # Use wn.update() to update the screen sleep(0.1) # Add a small delay to control the loop speed # Check for user input to stop the loop if wn.textinput("Stop", "Press 'Enter' to stop.") != None: running = False if __name__ == "__main__": _setup() _main()
在修改后的代码中,我们将 running 定义为 _main() 函数的局部变量,并且在 while 循环中使用 wn.textinput() 来检查是否有用户输入。当用户按下 “Enter” 键时,循环会停止,从而退出 _main() 函数。
while
wn.textinput()
此外,我们还对背景色和海龟的填充颜色调用了 randcol() 函数来获取随机颜色,以使每次运行都有不同的颜色效果。
randcol()