Python整洁的代码给出未知错误,尽管有以下教程

Python整洁的代码给出未知错误,尽管有以下教程,python,python-3.x,typeerror,Python,Python 3.x,Typeerror,我正在尝试学习使用整洁的python库(),因此我将学习本教程()。但是,在运行完成的代码后,我得到错误“TypeError:start_generation()缺少1个必需的位置参数:‘generation’”。底部完全错误。我已经完全按照图中所示重写了那行代码,但仍然得到了错误。有人能帮忙吗?代码附在下面 import pygame import neat import os import random # Setup pygame.init() WIN_WIDTH = 500 WIN_H

我正在尝试学习使用整洁的python库(),因此我将学习本教程()。但是,在运行完成的代码后,我得到错误“TypeError:start_generation()缺少1个必需的位置参数:‘generation’”。底部完全错误。我已经完全按照图中所示重写了那行代码,但仍然得到了错误。有人能帮忙吗?代码附在下面

import pygame
import neat
import os
import random

# Setup
pygame.init()
WIN_WIDTH = 500
WIN_HEIGHT = 800

# Image Loading
BIRD_IMGS = [
    pygame.transform.scale2x(pygame.image.load(os.path.join("images", "bird1.png"))),
    pygame.transform.scale2x(pygame.image.load(os.path.join("images", "bird2.png"))),
    pygame.transform.scale2x(pygame.image.load(os.path.join("images", "bird3.png")))]
PIPE_IMG = pygame.transform.scale2x(pygame.image.load(os.path.join("images", "pipe.png")))
BASE_IMG = pygame.transform.scale2x(pygame.image.load(os.path.join("images", "base.png")))
BG_IMG = pygame.transform.scale2x(pygame.image.load(os.path.join("images", "bg.png")))

STAT_FONT = pygame.font.SysFont("comicsans", 50)


# More setup
class Bird:
    IMGS = BIRD_IMGS
    MAX_ROTATION = 25
    ROT_VEL = 20
    ANIMATION_TIME = 5

    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.tilt = 0
        self.tick_count = 0
        self.velocity = 0
        self.height = self.y
        self.img_count = 0
        self.img = self.IMGS[0]

    def jump(self):
        self.velocity = -10.5
        self.tick_count = 0
        self.height = self.y

    def move(self):
        # Move
        self.tick_count += 1
        d = self.velocity * self.tick_count + 1.5 * self.tick_count ** 2
        if d >= 16:
            d = 16
        if d < 0:
            d -= 2
        self.y = self.y + d
        # Tilt
        if d < 0 or self.y < self.height + 50:
            if self.tilt < self.MAX_ROTATION:
                self.tilt = self.MAX_ROTATION
        else:
            if self.tilt > -90:
                self.tilt -= self.ROT_VEL

    def draw(self, win):
        self.img_count += 1

        if self.img_count < self.ANIMATION_TIME:
            self.img = self.IMGS[0]
        elif self.img_count < self.ANIMATION_TIME * 2:
            self.img = self.IMGS[1]
        elif self.img_count < self.ANIMATION_TIME * 3:
            self.img = self.IMGS[2]
        elif self.img_count < self.ANIMATION_TIME * 4:
            self.img = self.IMGS[1]
        elif self.img_count == self.ANIMATION_TIME * 4 + 1:
            self.img = self.IMGS[0]
            self.img_count = 0

        if self.tilt <= -80:
            self.img = self.IMGS[1]
            self.img_count = self.ANIMATION_TIME * 2

        rotated_image = pygame.transform.rotate(self.img, self.tilt)
        new_rect = rotated_image.get_rect(center=self.img.get_rect(topleft=(self.x, self.y)).center)
        win.blit(rotated_image, new_rect.topleft)

    def get_mask(self):
        return pygame.mask.from_surface(self.img)


class Pipe:
    GAP = 200
    VELOCITY = 5

    def __init__(self, x):
        self.x = x
        self.height = 0
        self.gap = 100
        self.top = 0
        self.bottom = 0
        self.PIPE_TOP = pygame.transform.flip(PIPE_IMG, False, True)
        self.PIPE_BOTTOM = PIPE_IMG
        self.passed = False
        self.set_height()

    def set_height(self):
        self.height = random.randrange(50, 450)
        self.top = self.height - self.PIPE_TOP.get_height()
        self.bottom = self.height + self.GAP

    def move(self):
        self.x -= self.VELOCITY

    def draw(self, win):
        win.blit(self.PIPE_TOP, (self.x, self.top))
        win.blit(self.PIPE_BOTTOM, (self.x, self.bottom))

    def collide(self, bird):
        bird_mask = bird.get_mask()
        top_mask = pygame.mask.from_surface(self.PIPE_TOP)
        bottom_mask = pygame.mask.from_surface(self.PIPE_BOTTOM)

        top_offset = (self.x - bird.x, self.top - round(bird.y))
        bottom_offset = (self.x - bird.x, self.bottom - round(bird.y))

        b_point = bird_mask.overlap(bottom_mask, bottom_offset)
        t_point = bird_mask.overlap(top_mask, top_offset)

        if t_point or b_point:
            return True

        return False


class Base:
    VELOCITY = 5
    WIDTH = BASE_IMG.get_width()
    IMG = BASE_IMG

    def __init__(self, y):
        self.y = y
        self.x1 = 0
        self.x2 = self.WIDTH

    def move(self):
        self.x1 -= self.VELOCITY
        self.x2 -= self.VELOCITY

        if self.x1 + self.WIDTH < 0:
            self.x1 = self.x2 + self.WIDTH

        if self.x2 + self.WIDTH < 0:
            self.x2 = self.x1 + self.WIDTH

    def draw(self, win):
        win.blit(self.IMG, (self.x1, self.y))
        win.blit(self.IMG, (self.x2, self.y))


def draw_window(win, birds, pipes, base, score):
    win.blit(BG_IMG, (0, 0))
    for pipe in pipes:
        pipe.draw(win)

    base.draw(win)
    text = STAT_FONT.render("Score: " + str(score), 1, (255, 255, 255))
    win.blit(text, (WIN_WIDTH - 10 - text.get_width(), 10))
    for bird in birds:
        bird.draw(win)
    pygame.display.update()


def eval_genomes(genomes, config):
    nets = []
    ge = []
    birds = []

    for _, g in genomes:
        net = neat.nn.FeedForwardNetwork.create(g, config)
        nets.append(net)
        birds.append(Bird(230, 350))
        g.fitness = 0
        ge.append(g)

    base = Base(730)
    pipes = [Pipe(700)]
    win = pygame.display.set_mode((WIN_WIDTH, WIN_HEIGHT))
    clock = pygame.time.Clock()

    rerun = True
    add_pipe = False
    score = 0

    while rerun:
        clock.tick(30)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                rerun = False
                pygame.quit()
                quit()
                break

        pipe_ind = 0
        if len(birds) > 0:
            if len(pipes) > 1 and birds[0].x > pipes[0].x + pipes[0].PIPE_TOP.get_width():
                pipe_ind = 1
        else:
            break

        for x, bird in enumerate(birds):
            bird.move()
            ge[x].fitness += 0.1

            output = nets[x].activate(bird.y,
                                      abs(bird.y - pipes[pipe_ind].height),
                                      abs(bird.y - pipes[pipe_ind].bottom))
            if output[0] > 0.5:
                bird.jump()

        rem = []
        for pipe in pipes:
            for x, bird in enumerate(birds):
                if pipe.collide(bird):
                    ge[x].fitness -= 1
                    birds.remove(bird)
                    birds.pop(x)
                    nets.pop(x)
                    ge.pop(x)

                if not pipe.passed and pipe.x < bird.x:
                    pipe.passed = True
                    add_pipe = True

            if pipe.x + pipe.PIPE_TOP.get_width() < 0:
                rem.append(pipe)

            pipe.move()

        if add_pipe:
            score += 1
            for g in ge:
                g.fitness += 5
            pipes.append(Pipe(600))
            add_pipe = False

        for r in rem:
            pipes.remove(r)

        for x, bird in enumerate(birds):
            if bird.y + bird.img.get_height() >= 730 or bird.y < 0:
                birds.pop(x)
                nets.pop(x)
                ge.pop(x)

        base.move()

        draw_window(win, birds, pipes, base, score)


def run(config_path):
    config = neat.config.Config(neat.DefaultGenome, neat.DefaultReproduction, neat.DefaultSpeciesSet,
                                neat.DefaultStagnation, config_path)

    p = neat.Population(config)

    p.add_reporter(neat.StdOutReporter(True))
    stats = neat.StatisticsReporter
    p.add_reporter(stats)

    winner = p.run(eval_genomes, 50)


if __name__ == "__main__":
    local_dir = os.path.dirname(__file__)
    config_path = os.path.join(local_dir, "config.txt")
    run(config_path)

导入pygame
输入整洁
导入操作系统
随机输入
#设置
pygame.init()
宽度=500
WIN_高度=800
#图像加载
鸟_IMGS=[
pygame.transform.scale2x(pygame.image.load(os.path.join(“images”,“bird1.png”)),
pygame.transform.scale2x(pygame.image.load(os.path.join(“images”,“bird2.png”)),
pygame.transform.scale2x(pygame.image.load(os.path.join(“images”,“bird3.png”))]
PIPE\u IMG=pygame.transform.scale2x(pygame.image.load(os.path.join(“images”,“PIPE.png”))
BASE\u IMG=pygame.transform.scale2x(pygame.image.load(os.path.join(“images”,“BASE.png”))
BG_IMG=pygame.transform.scale2x(pygame.image.load(os.path.join(“images”,“BG.png”))
STAT\u FONT=pygame.FONT.SysFont(“comicsans”,50)
#更多设置
类鸟:
IMGS=鸟
最大旋转=25
ROT_等级=20
动画时间=5
定义初始化(self,x,y):
self.x=x
self.y=y
self.tilt=0
self.tick_count=0
自速度=0
self.height=self.y
self.img\u计数=0
self.img=self.IMGS[0]
def跳转(自):
自速度=-10.5
self.tick_count=0
self.height=self.y
def移动(自我):
#移动
self.tick_count+=1
d=自速度*自滴答计数+1.5*自滴答计数**2
如果d>=16:
d=16
如果d<0:
d-=2
self.y=self.y+d
#倾斜
如果d<0或self.y-90:
自倾斜-=自旋转水平
def抽签(自我,赢):
self.img_计数+=1
如果self.img\u计数1,birds[0].x>pipes[0].x+pipes[0].pipes\u TOP.get\u width():
管道内径=1
其他:
打破
对于x,枚举中的鸟(鸟):
小鸟,快走
ge[x].适合度+=0.1
输出=网络[x]。激活(bird.y,
abs(bird.y-管道[pipe_-ind].高度),
abs(bird.y-pipes[pipe_ind].底部))
如果输出[0]>0.5:
鸟,跳
rem=[]
对于管道中的管道:
对于x,枚举中的鸟(鸟):
如果管道发生碰撞(鸟):
ge[x].适合度-=1
鸟。移走(鸟)
鸟类。流行音乐(x)
net.pop(x)
通用电气pop(x)
如果未通过管道和管道x=730或bird.y<0:
鸟类。流行音乐(x)
net.pop(x)
通用电气pop(x)
base.move()
绘制窗口(赢、鸟、管道、基础、分数)
def运行(配置路径):
config=neat.config.config(neat.DefaultGenome、neat.DefaultReproduction、neat.DefaultSpeciesSet、,
neat.defaultstaging,配置路径)
p=neat.Population(配置)
p、 add_reporter(neat.StdOutReporter(True))
stats=neat.StatisticsReporter
p、 添加报告器(统计数据)
获胜者=p.run(评估基因组,50)
如果名称=“\uuuuu main\uuuuuuuu”:
local\u dir=os.path.dirname(\u文件\u)
config\u path=os.path.join(local\u dir,“config.txt”)
运行(配置路径)
文件“/Users/Student/PycharmProjects/Neat/Flappy Bird.py”,第274行,在
运行(配置路径)
文件“/Users/Student/PycharmProjects/Neat/Flappy Bird.py”,第268行,运行中
获胜者=p.run(评估基因组,50)
文件“/Users/Student/PycharmProjects/Neat/venv/lib/python3.7/site packages/Neat/population.py”,第86行,运行中
self.reporters.start_generation(self.generation)
文件“/Users/Student/PycharmProjects/Neat/venv/lib/python3.7/site packages/Neat/reporting.py”,第32行,在开始生成时
r、 开始新一代(gen)
TypeError:start_generation()缺少1个必需的位置参数:“generation”

我不知道您是否发现了错误,但可能在这行:

stats = neat.StatisticsReporter
应该是这样的:

 stats = neat.StatisticsReporter()
 stats = neat.StatisticsReporter()