我只是无法弄清楚这有什么问题......
#!/usr/bin/env python
#
# Bugs.py
#
from __future__ import division
# No Module!
if __name__ != '__main__':
print "Bugs.py is not meant to be a module"
exit()
# App
import pygame, sys, random, math
pygame.init()
# Configuration Vars
conf = {
"start_energy": 50,
"food_energy": 25,
"mate_minenergy": 50,
"mate_useenergy": 35,
"lifespan": 300000
}
class Bugs:
def __init__(self):
self.list = []
self.timers= {}
# Names / colors for sexes
self.sex = ["Male", "Female"]
self.color = ["#CBCB25", "#A52A2A"]
# Bug info tracking
self.bugid = 0
self.buginfo = {"maxgen":0, "maxspeed":0}
def new(self, x=False, y=False, sex=2, speed=0, generation=0, genes=[]):
sex = sex if not sex == 2 else random.randint(0,1)
speed = speed if not speed == 0 else random.randint(1,3)
# Create new bug object
self.bugs.append(BugObj(sex, speed, generation, bugid, pygame.time.get_ticks, genes))
# Make sure it has a timer
if not self.timers[speed]:
self.timers[speed] = 1
pygame.time.set_timer(25 + speed, 1000 / speed)
# Update info tracking variables
if speed > self.buginfo["maxspeed"]: self.buginfo["maxspeed"] = speed
if generation > self.buginfo["maxgen"] : self.buginfo["maxgen"] = generation
self.bugid += 1
def speed_count(self, speed):
a = 0
for i in list[:]:
if i.speed = speed:
a += 1
return a
class BugObj:
def __init__(self, sex, speed, generation, bugid, born, genes):
global conf
self.sex = sex
self.speed = speed
self.generation = generation
self.id = bugid
self.born = born
self.genes = genes
self.died = -1
self.energy = conf["start_energy"]
self.target = "None"
def update(self):
global conf
if self.age() > conf["lifespan"]:
self.die()
else:
f = closest_food()
m = closest_mate()
# If there's a potential mate
if m != 0 and self.energy > conf["mate_minenergy"]:
if not self.rect.colliderect(m.rect):
self.move_toward(m)
self.target = "Mate: " + str(m.rect.center)
else:
Bugs.mate(self, m)
self.target = "Mate: (Reached)"
elif f != 0:
if not self.rect.colliderect(f.rect):
self.move_toward(f)
self.target = "Food: " + str(f.rect.center)
else:
self.eat(f)
self.target = "Food: (Reached)"
else:
self.target = "Resting"
# Use energy
self.energy -= 0
def closest_food(self):
pass
def closest_mate(self):
pass
def age(self):
if self.died != -1:
return pygame.time.get_ticks - self.born
else:
return self.died - self.born
def die(self):
# Remove self from the list
Bugs.list.remove(self)
# Turn off timer
if not Bugs.speed_count(self.speed):
Bugs.timers[self.speed] = 0
pygame.time.timers(25 + self.speed, 0)
# Bye!
del self
class Food:
def __init__(self)
pass
def update(self)
pass
# Update Loop
while 1:
ev = pygame.event.wait()
speed = ev.type - 25
if speed > 24:
for i in Bugs.list[:]:
if i.speed = speed
i.update()
print "Updating bug #" + str(i.id)
if speed == 0:
Food.update()
我每次都得到以下内容:
File "Bugs.py" line 53
def new(self, x=False, y=False, sex=2, speed=0, generation=0, genes=[]):
^
Indentation Error: unindent does not match any outer indentation level
12 回答
您的文件中可能有混合标签和空格 . 你可以让python帮助检查这些错误
您的原始源文件中可能包含空格和制表符的混合 . 用四个空格替换所有选项卡(反之亦然),您应该立即看到问题 .
粘贴到您的问题中的代码没有这个问题,但我猜您的编辑器(或您的Web浏览器,或Stack Overflow本身......)可能在您不知情的情况下完成了标签到空格的转换 .
不要忘记使用“”评论 . 这些也需要精确的缩进(我也可以解决这个该死的错误的1/2小时工作!)
我正在使用Ubuntu 11.10附带的gedit基本版本 . 我有同样的错误 . 这主要是因为您将空格与制表符混合使用 .
区分哪些行有问题的好方法是:1 . 编辑2.首选项3.编辑器4.检查“自动缩进”5.将缩进增加到12或一些大数字
在完成第五步之后,您将能够看到代码中的行,这些行导致了问题(这些是混合了空格和制表符的行)
使整个代码约定只是TAB或只是SPACE(这必须逐行手动完成)
希望这可以帮助...
我在PyCharm中遇到类似的问题 .
我在代码中找不到任何标签,但是一旦我删除了带有IndentationError的行之后的代码,一切都很顺利 .
我怀疑您在以下行中有一个标签:
sex = sex if not sex == 2 else random.randint(0,1)
我建议一直检查你的缩进级别 . 确保您一直使用任何一个标签或一直使用空格,没有混合 . 我过去曾经有过混淆造成的奇怪的压痕问题 .
也许是这部分:
尝试删除额外的空间,使其看起来对齐 .
编辑:从pep8
x = 1
y = 2
long_variable = 3
没有:
x = 1
y = 2
long_variable = 3
尝试遵循这种编码风格 .
抱歉,我无法添加评论,因为我的声誉不够高: - /,所以这必须是一个答案 .
正如一些人所评论的那样,你发布的代码包含几(5)个语法错误(两次=而不是==和三次':'缺失) .
一旦语法错误得到纠正,我就没有任何问题,无论是缩进还是其他问题;当然,不可能看到你有其他人建议的混合标签和空格,这可能是你的问题 .
但我要强调的真正要点是:tabnanny不可行:当它实际上只是语法错误时,你可能会收到“缩进”错误 .
例如 . 当我添加一个超过必要的闭括号时,我得到了它;-)
会引起tabnanny对下一行的警告 .
希望这可以帮助!
Geany在其菜单中有一个选项,显示“Apply Default Intendation”,如果在Geany的设置中指定,它会用空格数替换制表符
IDLE TO VISUAL STUDIO USERS: 在将代码直接从IDLE移动到Visual Studio时,我也遇到了这个问题 . 当您按Tab键时,IDLE会添加4个空格而不是选项卡 . 在IDLE中,点击Ctl A选择所有代码,然后转到格式>表格区域 . 现在将代码移动到visual studio,大多数错误都应该修复 . 每隔一段时间就会出现一些off-tab的代码,只需手动修复即可 .
我有同样的问题,它与标签无关 . 这是我的问题代码:
请注意,上面的
for
缩进的空格多于以if
开头的行 . 这是不好的 . 所有缩进必须一致 . 所以我想你可以说我有一个迷路的空间,而不是一个流浪的标签 .我也遇到过PyCharm这个问题 . 我进入代码菜单并选择了重新格式化代码 . 问题消失了 .