【问题标题】:Why Python keeps telling me missing positional argument even the parameter already has the positional argument?为什么 Python 一直告诉我缺少位置参数,即使参数已经有位置参数?
【发布时间】:2021-01-02 19:57:34
【问题描述】:

我是一名经验有限的 Python-3 新手。 有人可以回答我:为什么 Python 一直告诉我我的代码缺少位置参数,即使参数已经有位置参数? 这是我的代码

    """A simple attempt to represent a car."""

    def __init__(self, manufacturer, model, year):
        """Initialize attributes to describe a car."""
        self.manufacturer = manufacturer
        self.model = model
        self.year = year
        self.odometer_reading = 0
        self.miles=0

    def get_descriptive_name(self):
        """Return a neatly formatted descriptive name."""
        long_name = str(self.year) + ' ' + self.manufacturer + ' ' + self.model
        return long_name.title()

    def read_odometer(self):
        """Print a statement showing the car's mileage."""
        return("This car now has " + str(self.odometer_reading) + " miles on it.")

    def update_odometer(self, mileage):

        if mileage >= self.odometer_reading:
            self.odometer_reading = mileage
        else:
            print("You can't roll back an odometer!")

    def increment_odometer(self, miles):
        self.odometer_reading += miles
        return('This car increase another ' + str(miles)+' mileages in this 2 months.')

my_new_car = Car('Acura', 'TSX', 2010)
my_new_car.update_odometer(20000)
my_new_car.increment_odometer(1000)    
print(my_new_car.get_descriptive_name())
print(my_new_car.read_odometer())       #until this line the program running is fine
print(my_new_car.increment_odometer())  # Problem shows up!!!!!! 

我为 my_new_car.increment_odometer(). 分配了一个参数 (1000) 但 python 总是告诉我:缺少 1 个必需的位置参数:'miles' while python run print(my_new_car.increment_odometer()).

我确实将值 1000 传递给 my_new_car.increment_odometer() 。所以我认为print(my_new_car.increment_odometer()) 会自动看起来像print(my_new_car.increment_odometer(1000))。但是,实际上并没有。

print(my_new_car.get_descriptive_name()) print(my_new_car.read_odometer()) 这两个函数工作正常。 python 自动将 ('Acura', 'TSX', 2010) 和 (20000) 分配给参数。为什么my_new_car.increment_odometer(1000)不能给print(my_new_car.increment_odometer())赋值

有专家能告诉我是什么问题导致这种情况发生吗?

【问题讨论】:

  • 您已经定义了接受参数的函数:def increment_odometer(self, miles)。如果你没有通过my_new_car.increment_odometer() 向函数传递任何东西,你希望在这里发生什么:self.odometer_reading += miles
  • 不,这是两个不同的函数调用。
  • print(my_new_car.get_descriptive_name()) print(my_new_car.read_odometer()) 但这两个功能工作正常。 python 自动为参数分配('Acura', 'TSX', 2010) and (20000)。为什么`my_new_car.increment_odometer(1000)can assign value to print(my_new_car.increment_odometer())```
  • 您已经在调用.read_odometer(),它会打印该值。您可以轻松地 print(my_new_car.odometer_reading) - 但如果您需要 StackOverflow 上的人告诉您,我强烈建议您返回课程材料并重新阅读,或者遵循一些有关 Python 和 Python OO 基础的教程。
  • @Grismar,很抱歉让您感到困惑。我想我已经找到了答案。可以打印print(my_new_car.get_descriptive_name()) print(my_new_car.read_odometer()) 的原因是因为它们具有来自其他函数的属性。 print(my_new_car.increment_odometer()) 无法打印,因为它没有自己的打印属性。应该多注意函数属性的知识。谢谢你激励我。

标签: python python-3.x return


【解决方案1】:

打印(my_new_car.increment_odometer(1000))

【讨论】:

  • 试试这个,因为您定义了获取里程的功能,但您没有在打印期间提供值
  • 抱歉让你们混淆了。我想我已经找到了答案。可以打印print(my_new_car.get_descriptive_name()) print(my_new_car.read_odometer()) 的原因是因为它们具有来自其他函数的属性。 print(my_new_car.increment_odometer()) 无法打印,因为它没有自己的打印属性。应该多注意函数属性的知识。谢谢你启发我。祝你一切顺利
【解决方案2】:

这是我的问题的解决方案。

    """A simple attempt to represent a car."""

    def __init__(self, manufacturer, model, year):
        """Initialize attributes to describe a car."""
        self.manufacturer = manufacturer
        self.model = model
        self.year = year
        self.odometer_reading = 0
        self.mile=0  # add one more variable 


    def get_descriptive_name(self):
        """Return a neatly formatted descriptive name."""
        long_name = str(self.year) + ' ' + self.manufacturer + ' ' + self.model
        return long_name.title()

    def read_odometer(self):
        """Print a statement showing the car's mileage."""
        return("This car now has " + str(self.odometer_reading) + " miles on it.")

    def update_odometer(self, mileage):

        if mileage >= self.odometer_reading:
            self.odometer_reading = mileage
        else:
            print("You can't roll back an odometer!")

    def increment_odometer(self, miles):
        """Add the given amount to the odometer reading."""
        self.odometer_reading = self.odometer_reading+miles
        # set this variable as the attribute for the function of mileage_increament
        self.mile = self.mile+miles
        return('This car increase another ' + str(miles)+' mileages in this 2 months.')

    def mileage_increament(self):
        return('This car increase another ' + str(self.mile)+' mileages in this 2 months.')

my_new_car = Car('Acura', 'TSX', 2010)
my_new_car.update_odometer(20000)
my_new_car.increment_odometer(2000)

print(my_new_car.get_descriptive_name())
print(my_new_car.read_odometer())
print(my_new_car.mileage_increament()) #the attribute is come from increment_odometer(2000)

【讨论】:

    猜你喜欢
    • 2020-06-17
    • 2018-09-06
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多