Python:缩进错误

Win*_*ert 2 python indentation python-idle

我年轻的堂兄不知怎的拿到了一本蟒蛇书,一直在努力学习Python.他向我求助了.但我在做这件事时遇到了麻烦.

他正在使用IDLE,他报告说他收到了这个错误:

               Error: Inconsistent indentation detected!

    1)      Your indentation is outright incorrect (easy to fix), OR
    2)      Your indentation mixes tabs and spaces.

                   To fix case 2, change all tabs to spaces by using Edit->Select All
                   Followed by Format->Untabify Region and specify the number of
                   Columns used by each tab.
Run Code Online (Sandbox Code Playgroud)

他给我发了一份他的代码副本,缩进是正确的.由于许多语法错误,它无法运行,但这并不重要.他报告说他使用了Format-> Untabify Region,但问题并没有解决.

我不能为我的生活弄清楚为什么我可以运行他的python文件,但他不能.有没有人知道这是怎么回事?我很遗憾地目前正坐飞机飞行五个小时,否则我会看到发生了什么.

他的代码在这里,当我尝试运行它时没有任何缩进错误,所以我怀疑它告诉你任何有用的东西.如果有问题,那么在我得到它之前它已被某种方式删除了.

import pygame, sys, random

skier_images = ["skier_down.png", "skier_right1.png",
                "skier_right2.png", "skier_left2.png",
                "skier_left1.png"]

class SkierClass(pygame.sprite.Sprite):
    def __init__(self)
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load("skier_down.png")
        self.rect = self.image.get_rect()
        self.rect.center = [320, 100]
        self.angle = 0
    def turn(self, direction):
        self.angle = self.angle + direction
        if self.angle < -2: self.angle = -2
        if self.angle >  2: self.angle =  2
        center = self.rect.center
        self.image = pygame.image.load(skier_images[self.angle])
        self.rect = self.image.get_rect()
        self.rect.center = center
        speed = [self.angle, 6 - abs(self.angle) * 2]
        return speed
    def move(self, speed):
        self.rect.centerx = self.rect.centerx + speed [0]
        if self.rect.centerx < 20: self.rect.centerx =20
        if self.rect.centerx > 620: self.rect.centerx = 620

class ObstacleClass(pygame.sprite.Sprite):
    def __init__(self, image_file, location, type):
        pygame.sprite.Sprite.__init__(self)
        self.image_file = image_file
        self.image = pygame.image.load(image_file)
        self.location = location
        self.rect = self.image.get_rect()
        self.rect.center = location
        self.type = type
        self.passed = False

    def scroll(self, t_ptr):
        self.rect.centery = self.location[1] - t_ptr

def create_map(start, end):
    obstacles = pygame.sprite.Group()
    gates = pygame.sprite.Group()
    locations = []
    for i in range(10):
        row = random.randint(start, end)
        col = random.randint(0, 9)
        location = [col * 64 + 20, row * 64 + 20]
        if not (location in locations):
            locations.append(location)
            type = random.choice(["tree", "flag"])
            if type == "tree": img = "skier_flag.png"
            obstacle = ObstacleClass(img, location, type)
            obstacles.add(obstacle)
    return obstacles
def animate():
    screen.fill(255, 255, 255])
    pygame.display.update(obstacles.draw(screen))
    screen.blit(skier.image, skier.rect)
    screen.blit(score_text, [10, 10])
    pygame.display.flip()
def updateObstaclegroup(map0, map1):
    obstacles = pygame.sprite.Group()
    for ob in map0:  obstacles.add(ob)
    for ob in map1:  obstacles.add(ob)
    return obstacles

pygame.init()
screen = pygame.display.set_mode([640,640])
clock = pygame.time.Clock()
skier =SkierClass()
speed = [0, 6]
map_position = 0
points = 0
map0 = create_map(20, 29)
map1 = create_map(10, 19)
activeMap = 0
obstacles = updateObstacleGroup(map0, map1)
font = pygame.font.Font(None, 50)


while True:
    clock.tick(30)
    for event in pygame.event.get():
        if event.type == pygame.QUIT: sys.exit()
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                speed = skier.turn(-1)
            elif efvent.key == pygame.K_RIGHT:
                speed = skier.turn(1)
    skier.move(speed)
    map_position += speed[1]

    if map_position >=640 and activeMap == 0:
        activeMap = 1
        map0 = create)map(20, 29)
        obstacles = updateObstacleGroup (map0, map1)
    if map_position >=1280 and activeMap ==1:
        activeMap = 0
        for ob in map0:
                ob.location[1] = ob.location[1] - 1280
        map_position = map_position - 1280
        map1 = create_map(10, 19)
        obstacles = updateObstacleGroup (map0, map1)

    for obstacle in obstacles:
                obstacle.scroll(map_position)
    hit = pygame.sprite.spritecollide(skier, obstacles, False)
    if hit:
        if hit[0].type == "tree" and not hit[0].passed:
            points = points - 100
            skier.image = pygame.image.load("skier_crash.png")
            animate()
            pygame.time.delay(1000)
            skier.image = pygame.image.load("skier_down.png")
            speed = [0, 6]
            hit[0].passed = True
        elif hit[0].type == "flag" and not hit[0].passed:
            points += 10
            obstacles.remove (hit[0])


    score_text = font.render("Score: " +str(points), 1, (0, 0, 0))
    animate()
Run Code Online (Sandbox Code Playgroud)

unu*_*tbu 5

with open('problem_script.py','r') as f:
    content = f.read()
    print(repr(content))
Run Code Online (Sandbox Code Playgroud)

机会很好,他的文件中隐藏着不可见的字符.使用上面的程序将帮助他找到它们.