python - 我在海龟模块的 penup() 函数中遇到错误
问题描述
这是我收到的错误消息:
Traceback (most recent call last):
File "\\tsclient\E\Python34\Doc\mazes5.py", line 62, in <module>
sky.penup()
File "C:\Python34\lib\turtle.py", line 2107, in penup
self.pen(pendown=False)
File "C:\Python34\lib\turtle.py", line 2425, in pen
self._newLine()
File "C:\Python34\lib\turtle.py", line 3287, in _newLine
self._pencolor, self._pensize)
File "C:\Python34\lib\turtle.py", line 545, in _drawline
self.cv.coords(lineitem, *cl)
File "<string>", line 1, in coords
File "C:\Python34\lib\tkinter\__init__.py", line 2307, in coords
self.tk.call((self._w, 'coords') + args))]
File "C:\Python34\lib\tkinter\__init__.py", line 2305, in <listcomp>
return [getdouble(x) for x in
ValueError: could not convert string to float: 'floating'
我不知道我打算如何解决这个问题,因为 penup() 是一个不需要输入的函数。此外,我的迷宫发生器抽屉变得疲惫不堪,朝着我从未说过它可以绘制的方向绘制。这已经发生了多次。
这是它在崩溃之前生成的屏幕截图。我告诉它以 270 度的增量旋转。
根据要求,这是我的代码。请注意,我不知道错误在哪里,所以我将粘贴整个内容。有问题的线条朝向底部。
import turtle, random
from turtle import *
maze=[]
mazelev=[]
x=int(input("How many columns?\n"))
y=int(input("How many rows?\n"))
siz=int(input("How wide should the passages be?\n"))
maze=[[5]*x for n in range(y)]
wn=turtle.Screen()
wn.setup(2000, 1000, 0, 0)
sky=turtle.Turtle()
sky.speed(0)
wn.delay(0)
sky.goto(-700, -350)
wn.bgcolor("black")
sky.color("white")
sky.pensize(1)
n=0
tot=0
for i in range(x+1):
cx=sky.xcor()
cy=sky.ycor()
sky.pendown()
sky.goto(cx, cy+(siz*y))
sky.penup()
sky.goto(cx+siz, -350)
sky.goto(-700,-350)
for i in range(y+1):
cx=sky.xcor()
cy=sky.ycor()
sky.pendown()
sky.goto(cx+(siz*x), cy)
sky.penup()
sky.goto(-700, cy+siz)
sky.pensize(siz-1)
sky.color("red")
sky.speed(0)
turtle.tracer(0,0)
num=0
eks=0
why=0
direc=1
sky.goto(-700+(.5*siz),-350+(.5*siz))
for i in range(y):
for j in range(x):
eks=-700+(.5*siz)+siz*j
why=-350+(.5*siz)+siz*i
sky.goto(eks, why) #second error (when first error is made a comment)
direc=(direc+siz-1)
direc=direc//1
direc=direc*270
sky.seth(direc)
sky.pendown()
sky.forward(siz) #third error
sky.penup() #first error
direc=direc/90
wn.update() #fourth error
sky.goto(-700+(.5*siz),-350-(.5*siz)+siz*y)
sky.pendown()
sky.goto(-700+(.5*siz)+(siz*x),-350-(.5*siz)+siz*y)
sky.penup()
sky.hideturtle()
wn.update()
print("done")
解决方案
direc
你的错误来自于变得无限的事实。坦率地说,我不明白该变量应该代表什么,但是您似乎siz-1
在每次迭代时都将其添加到其中,然后有效地将其乘以3
(首先乘以270
,然后再除以90
)。这意味着它呈指数增长,并且由于在进行除法时它会变成浮点数,因此当float
数据类型不能再表示它时,它最终会溢出到无穷大。
当给定无限值时, Python 的turtle
模块似乎表现得有些糟糕,但这并不意味着它不是您自己代码中的错误。
如果direc
应该是一个角度,您可能想对其进行模数 360 的数学运算。这至少可以防止它不受控制地增长(尽管它可能不会使您的代码有意义)。
推荐阅读
- android - 显示没有视图引用但应用程序上下文的快餐栏
- ios - 使用两个生产 APN 证书
- java - 在 spring-boot 中使用 2 个数据库的问题。无法自动装配。找不到 EntityManagerFactoryBuilder 的 bean
- java - 尽管添加了 android:usesCleartextTraffic 和 android:networkSecurityConfig,但不允许明文 HTTP 流量
- c++ - 从单链表的头中删除节点后指向垃圾值的头指针
- r - 使用 anomalize::time_decompose() 时出错 - “断言长度不是 1”
- javascript - 如何重命名表格中的列标题
- c# - 列表