1

我只是在学习 python/pygame,我正在做一个物理教程。不幸的是,我认为它是用旧版本的 python 制作的。我完全复制了视频中的代码,但是当我运行它时,它返回“无法运行脚本 - 语法错误 - 无效语法(physics.py,第 7 行)”。我敢肯定,我错过了一些愚蠢而明显的事情,但是任何答案对我来说都会有很长的路要走!

import os, sys, math, pygame, pygame.mixer
from pygame.locals import *

screen_size = screen_width, screen_height = 600, 400

class MyCircle:
    def __init__(self, (x, y), size, color = (255,255,255), width = 1):
        self.x = x
        self.y = y
        self.size = size
        self.color = color
        self.width = width

    def display(self):
        pygame.draw.circle(screen, self.color, (self.x, self.y), self.size, self.width)

screen = pygame.display.set_mode(screen_size)

my_circle = MyCircle((100,100), 10, red)
my_circle_2 = MyCircle((200,200), 30, blue)
my_circle_3 = MyCircle((300,150), 40, green, 4)
my_circle_4 = MyCircle((450,250), 120, black, 0)

fps_limit = 60
run_me = True
while run_me:
    clock.tick(fps_limit)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run_me = False

    my_circle.display()
    my_circle_2.display()
    my_circle_3.display()
    my_circle_4.display()

    pygame.display.flip()

pygame.quit()
sys.exit()
4

2 回答 2

1

您可能正在使用 Python 3。元组参数解包在 3.X 中已删除,因此您必须更改:

def __init__(self, (x, y), size, color = (255,255,255), width = 1):
    self.x = x
    self.y = y
    self.size = size
    self.color = color
    self.width = width

至:

def __init__(self, position, size, color = (255,255,255), width = 1):
    self.x, self.y = position
    self.size = size
    self.color = color
    self.width = width
于 2013-08-13T03:39:06.167 回答
1

好吧,第 7 行就是这一行:

def __init__(self, (x, y), size, color = (255,255,255), width = 1):

看到(x, y)参数列表中间的那个了吗?这是一个称为“元组参数解包”的功能,它在 Python 3.0 中被删除。(在 Python 2.6-2.7 中也不鼓励使用它,但它可以工作,所以有些人仍然使用它。)

PEP 3113有完整的细节。

如果您2to3在脚本上运行该工具,它会告诉您如何修复它。

但简单的解决方法是(x, y)用单个参数替换该元组xy,并将其拆分到函数内部:

def __init__(self, xy, size, color = (255,255,255), width = 1):
    self.x, self.y = xy
    self.size = size
    self.color = color
    self.width = width
于 2013-08-13T03:39:36.950 回答