for turt in winningRowTurtles:
winningRowTurtles[turt] = ''
我真的不知道为什么......抱歉所有的困惑!
我正在用Python制作一个连接四个游戏,并且我希望有四只乌龟可以获得胜利的瓷砖和闪光,一旦找到胜利。我已经完成了这项工作......但只有在获得胜利后,海龟才能在屏幕中间产生并且非常快速地隐藏(这会分散注意力)然后去他们的位置。我想让它们在设置阶段在游戏开始时产生和隐藏,而不是在游戏结束时。这是我的代码:
winningRowTurtles = {}
for turt in range(4):
winningRowTurtles[turt] = turtle.Turtle()
winningRowTurtles[turt].up()
winningRowTurtles[turt].ht()
下一个代码是找到胜利者后发生的事情:
if winnerFound == 1:
for turt in winningRowTurtles:
winningRowTurtles[turt].shape('circle')
winningRowTurtles[turt].color('blue')
elif winnerFound == 2:
for turt in winningRowTurtles:
winningRowTurtles[turt].shape('square')
winningRowTurtles[turt].color('red')
然后我收到此错误:
Traceback (most recent call last):
File "C:\[redacted]\Python\Connect Four!.py", line 353, in <module>
play_game()
File "C:\[redacted]\Python\Connect Four!.py", line 258, in play_game
winningRowTurtles[turt].shape('circle')
AttributeError: 'str' object has no attribute 'shape'
play_game()是运行代码的第二部分的函数。有谁知道为什么?这似乎完全不合理。我在运行其他代码之前定义了winsRowTurtles [1,2,3,4] ...作为乌龟,而不是字符串。提前谢谢。
答案 0 :(得分:0)
考虑:
范围内的turt(4):
和
在我运行其他代码之前,我定义了winsRowTurtles [1,2,3,4]。
但是range(4)
是[0,1,2,3]。我们希望你说的是:
我在运行其他代码之前定义了winsRowTurtles [0,1,2,3]。
使用winningRowTurtles
的字典可以让你看起来像一个从1开始而不是0的数组但是更容易引入索引错误和使随机字符串变得更容易进入。即这个问题可能不是四只海龟中的一只,而是一条额外的条目,因为你进入了字典:
for turt in winningRowTurtles:
假设字典中的所有内容都是乌龟。
我建议,删除的评论之前做的是,您将winningRowTurtles
切换到数组以强制进行一致的索引并防止通过索引插入意外的项目。
类似的东西:
winningRowTurtles = []
for _ in range(4):
winningRowTurtles.append(turtle.Turtle())
winningRowTurtles[-1].up()
winningRowTurtles[-1].ht()
...
for turt in range(4):
winningRowTurtles[turt].shape(winningRowTurtles[winnerFound].shape())
winningRowTurtles[turt].color(winningRowTurtles[winnerFound].color())
其中winnerFound的范围也是0-3。
是的,你必须重新考虑所有的东西,而不是基于一个。
如果您真的想继续使用基于单一的索引和字典,请务必适当调整range()
:
for turt in range(1, 5):
winningRowTurtles[turt] = turtle.Turtle()
...
无论哪种方式,您都需要检查索引以确保其一致。