【问题标题】:class takes exactly three arguments and two are given类恰好需要三个参数,并给出两个
【发布时间】:2013-07-29 20:23:45
【问题描述】:

我正在尝试制作我的第一个游戏,它类似于带有自行车的 tron 游戏,到目前为止,我已经创建了一个自行车类和几个函数来提供帮助。但是,当它如下运行时,当我尝试使用速度声明 Bike 对象时出现错误,它表示:

类 Vector 正好有三个参数,其中两个由 what_direction 函数。

这对我来说是个问题,因为我创建了一个用于改变方向的 2x2 矩阵和一个将矩阵乘以向量的函数。我该如何解决这个错误?

   import random, math, pygame, sys

    class Vector(object):
        """ |x| = [0]
            |y| = [1] """
        def __init__(self, x, y):
            self.vec = [ x, y]

    def what_direction():  
        x = random.uniform(0.0, 5.0)
        y = math.sqrt(25-(x**2))
        return x, y

    class Bike(object):
        def __init__(self):
            self.position = [random.randint(0, 200), random.randint(0, 200)]
            self.velocity = Vector(what_direction())
            self.score = 0
            self.path_traveled = []

【问题讨论】:

  • 你能把错误贴在这里吗?
  • 呃。我认为这是某种元组与列表的事情,我不够聪明,无法弄清楚。
  • 你需要一个问题:Vector(*what_direction())
  • 我认为what_directionxy 作为单个值tuple 返回。尝试“解包”它,然后传递给Vector
  • 没有理由对这个人投反对票,这是一个完全合法的问题。

标签: python


【解决方案1】:

您的what_direction() 函数返回一个值元组,而您正试图将该元组传递给一个接受两个参数的函数。 Python 认为您正在传递一个参数(即 2 元组)。在表达式Vector(what_direction()) 中使用元组之前,您需要解包它。你可以自己做:

a, b = what_direction()
Vector(a, b)

或者你可以使用元组解包操作符*:

Vector(*what_direction())

【讨论】:

    【解决方案2】:

    你需要像这样使用星号:

    self.velocity = Vector(*what_direction())
    

    为了将这两个组件传递给Vector 构造函数。当前,您正在传递一个参数,该参数是一个具有两个成员的元组。星号解包元组,将其成员值作为单独的参数传递给Vector()

    【讨论】:

      猜你喜欢
      • 2018-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多