0

じゃんけんゲームの変種のシミュレーションゲームであるプログラムを書いています。私のメイン関数では、インターフェイスを出力してから、その中で定義されているメソッドを呼び出して、switchステートメントとして機能させようとしています。「makeSel()に必要な位置引数が1つありません:'self'」TypeErrorsWebでヒントを探しましたが、役に立ったものは見つかりませんでした。「makeSel()」を「Main.makeSel()」に変更しようとしましたが、mainが未定義であることがわかります。


class Main:

    def makeSel(self):
        selection = input()
        if(selection == 1):
            return StupidBot('StupidBot')
        elif(selection == 2):
            return RandomBot('RandomBot')
        elif(selection == 3):
            return IterativeBot('IterativeBot')
        elif(selection == 4):
            return LastPlayBot('LastPlayBot')
        elif(selection == 5):
            return MyBot('MyBot')
        elif(selection == 6):
            return HumanPlayer('HumanPlayer')
        else:
            print('Invalid selection, please try again.  Enter 1, 2, 3, 4, 5, or 6')
            makeSel()

    print('')
    print('Welcome to my Rock-Paper-Scissors-Lizard-Spock game!')
    print('')
    print('Please select two players, enter 1, 2, 3, 4, 5, or 6')
    print('  (1) -> StupidBot')
    print('  (2) -> RandomBot')
    print('  (3) -> IterativeBot')
    print('  (4) -> LastPlayBot')
    print('  (5) -> MyBot')
    print('  (6) -> HumanPlayer')

    p1 = makeSel()
    p2 = makeSel()

誰かが私が経験している問題に光を当てることができることを望んでいました。

4

1 に答える 1

1

即時を修正するには、に変更makeSel()self.makeSel()ます。 self他のいくつかの言語とは異なり、Pythonのメソッド呼び出しに暗黙的に渡されることはありません。あなたも意味return self.makeSel()していると思います。

また、でループが必要だと思いますmainSel()mainSel()ループのように機能しますが、呼び出しスタックがいっぱいになる再帰呼び出しを行っています。

class Main:

    def makeSel(self):
        while True
            selection = input()
            if(slection == 1):
                return StupidBot('StupidBot')
            elif(slection == 2):
                return RandomBot('RandomBot')
            elif(selection == 3):
                return IterativeBot('IterativeBot')
            elif(selection == 4):
                return LastPlayBot('LastPlayBot')
            elif(selection == 5):
                return MyBot('MyBot')
            elif(selection == 6):
                return HumanPlayer('HumanPlayer')
            else:
                print('Invalid selection, please try again.  Enter 1, 2, 3, 4, 5, or 6')
于 2013-03-24T22:59:05.967 に答える