Python Self TypeError:add_state()只接受4个参数(给定3个参数)

2024-06-02 12:54:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用基于agent的仿真来解决stagecoach问题。我正在尝试将状态添加到Panda的数据帧中。但是,当我这样做的时候,我得到了一个错误“TypeError:add_state()正好接受4个参数(给定3个)。”我查看了Stackoverflow上的其他问题并尝试了解决方案,但是有一点我遗漏了。在

有人能给我一些建议或提示,为什么我总是得到这个错误?谢谢你抽出时间。在

from __future__ import division
import random
import pandas as pd


class stagecoach():

    current_state = "A"
    home_state = "J"
    cost = 0

    index = range(1,20,1)
    columns = ["Current", "Choices", "Cost"]

    states = pd.DataFrame(columns=columns, index=index)

    counter = 1

    def add_state(self, s_current, s_choices, s_cost):
        self.states.loc[self.counter] = [s_current, s_choices, s_cost]
        self.counter += 1

    add_state("A", "B", 2)
    add_state("A", "C", 4)
    add_state("A", "D", 3)
    add_state("B", "E", 7)
    add_state("B", "F", 4)
    add_state("B", "G", 6)
    add_state("C", "E", 3)
    add_state("C", "F", 2)
    add_state("C", "G", 4)
    add_state("D", "E", 4)
    add_state("D", "F", 1)
    add_state("D", "G", 5)
    add_state("E", "H", 1)
    add_state("E", "I", 4)
    add_state("F", "H", 6)
    add_state("F", "I", 3)
    add_state("G", "H", 3)
    add_state("G", "I", 3)
    add_state("H", "J", 3)
    add_state("I", "J", 4)



    def choose(self,state):
        states_to_choose = self.states[self.states.Current == state]
        random_path = random.randint(0,len(states_to_choose))
        current_state = states_to_choose[random_path]


    def run(self):
        while self.current_state != self.home_state:
            print(self.states)
            self.choose(self.current_state)
            print(self.current_state)
            self.cost += 1



game = stagecoach()
game.run()

Tags: columnstoimportselfaddindexdefcounter
1条回答
网友
1楼 · 发布于 2024-06-02 12:54:58

缺少的参数是第一个,通常称为self,当您在类的实例上调用方法时,它将自动传递。但是您并不是在一个实例上调用add_state():您是作为一个普通函数调用它,并且必须传递所有四个参数。你不能这样做,因为你没有类的任何实例,因为你还在定义它。在

您需要编写一个__init__()方法,该方法执行add_state()调用以及当前类主体中的所有其他操作。这样,就会有一个实例调用add.state()!像这样:

def __init__(self):
    self.current_state = "A"
    self.home_state = "J"
    self.cost = 0

    self.index = range(1,20,1)
    self.columns = ["Current", "Choices", "Cost"]

    self.states = pd.DataFrame(columns=columns, index=index)

    self.counter = 1

    self.add_state("A", "B", 2)
    self.add_state("A", "C", 4)
    self.add_state("A", "D", 3)
    # and so on

相关问题 更多 >