1

ボクシングの試合のスコアを維持するための単純なクラスを作成しようとしています。初めてコードでクラスを実装します。クラスについて欠けている基本的なものはありますか?

class Sparring():
    def __init__(self, mywins, hiswins):
        self.mywins = mywins
        self.hiswins = hiswins

    def my_score(self, mywins):
        self.mywins = mywins =+ 1
        return self.mywins
    def his_score(self, hiswins):
        self.hiswins = hiswins =+ 1
        return self.hiswins

return を使用してみましたが、使用しないで、あらゆる種類の組み合わせを試しました。クラスを呼び出すために使用していた関数は次のとおりです。

def fight_match():
    print "Okay you're in the ring, ready to go three rounds with this dude"
    print "He throws a left hook, which way will you dodge?"

    dodge = raw_input()
    fight1 = Sparring(0,0)

    while fight1 != 2:
        if 'right' in dodge:
            print "Nice job, you knocked him out!"
            fight1 = Sparring(1,0)
            fight1.my_score(1)
        else:
            print 'Oh no he knocked you out'
            fight1 = Sparring(0, 1) 
            fight1.his_score(1)
4

2 に答える 2

1

カウンターをインクリメントするだけで十分です。

class Sparring():
    def __init__(self, mywins = 0, hiswins = 0):
        self.mywins = mywins
        self.hiswins = hiswins

    def my_score(self):
        self.mywins += 1

    def his_score(self):
        self.hiswins += 1

    @property
    def best (self):
        return max ( [self.mywins, self.hiswins] )

チェック 'fight1 != 2' には関数 "best" が必要です。これは、'fight1.best != 2' を赤くする必要があります。あなたのプログラムは次のように読めます:

def fight_match():
    print "Okay you're in the ring, ready to go three rounds with this dude"
    print "He throws a left hook, which way will you dodge?"

    dodge = raw_input()
    fight1 = Sparring()

    while fight1.best != 2:
        if 'right' in dodge:
            print "Nice job, you knocked him out!"
            fight1.my_score()
        else:
            print 'Oh no he knocked you out'
            fight1.his_score()

もう 1 つのことは、おそらく入力を while ループに移動したいということです。

    fight1 = Sparring()

    while fight1.best != 2:
        dodge = raw_input()
        if 'right' in dodge:
            print "Nice job, you knocked him out!"
            fight1.my_score()
        else:
            print 'Oh no he knocked you out'
            fight1.his_score()

あなたのコメントに答えるために、私は戦い全体のサンプル実装を提供します:

import random

class Fight:
        def __init__ (self): self.scores = [0, 0]
        def heScores (self): self.scores [1] += 1
        def youScore (self): self.scores [0] += 1

        @property
        def best (self): return max (self.scores)

        @property
        def winner (self): return 'You win.' if self.scores [0] > self.scores [1] else 'He wins.'

fight = Fight ()
print ('Fight begins.')
question, answer = 'left', 'right'
while fight.best != 2:
    if random.randint (0, 1): question, answer = answer, question
    if answer in input ('He throws a {} hook, which way will you dodge? '.format (question) ):
        print ('Nice job, you knocked him out.')
        fight.youScore ()
    else:
        print ('Oh no, he knocked you out.')
        fight.heScores ()
print (fight.winner)

完全を期すために、コードゴルフを行うために、これは同じことを行うワンライナーです。

_ = [print ('Fight!'), print ('You won.' if (lambda a, b: (lambda a, *b: a (a, *b) ) ( (lambda a, b, c, d, e: e if max (e) == 2 else a (a, b, c, c (b), [print ('Nice job, you knocked him out.'), (1 + e [0], 0 + e [1] )] [1] if d [1] in input ('He throws a {} hook, which way will you dodge? '.format (d [0] ) ) else [print ('Oh no, he knocked you out.'), (0 + e [0], 1 + e [1] )] [1] ) ), b, a, a (b), (0, 0) ) ) ( (lambda a: ('left', 'right') if a.randint (0, 1) else ('right', 'left') ), __import__ ('random') ) [0] == 2 else 'He won.') ]
于 2013-07-26T05:35:31.370 に答える
1

クラスを呼び出すたびに、クラスを再初期化しています。よりクリーンなバージョンは次のとおりです。

class Sparring():
    def __init__(self, mywins, hiswins):
        self.mywins = mywins
        self.hiswins = hiswins

    def i_win(self):
        self.mywins += 1

    def he_wins(self):
        self.hiswins += 1

    def __repr__(self):
        return "My wins: {}; his wins: {}".format(self.mywins,self.hiswins)

def fight_match():
    print "Okay you're in the ring, ready to go three rounds with this dude"
    print "He throws a left hook, which way will you dodge?"

    fight = Sparring(0,0)

    dodge = raw_input()
    if 'right' in dodge:
        print "Nice job, you knocked him out!"
        fight.i_win()
    else:
        print 'Oh no he knocked you out'
        fight.he_wins(1)

    print fight

fight_match()

このコードでは、 は と の 2 つの関数をSparring()持つクラスです。彼が勝った場合、実行します。あなたが勝った場合、実行します。he_wins()i_win()he_wins()i_win()

では、オブジェクトであるfight_match()を作成していることがわかりますfight。これはSparring、クラスのメソッドと変数がすべて含まれていることを意味しますSparring(クラスと直接対話するのではなく、そのクラスのオブジェクトと対話することを思い出してください)。したがって、 、 を受け入れraw_input()ますdodge。この入力が「正しい」場合は、( を使用して) 1 回の勝利を反映するように戦闘オブジェクトを更新しますi_win()。そうでない場合は、彼が勝った...ということで、彼が勝ったことを反映するようにオブジェクトをfight.he_wins()更新します。fight

于 2013-07-26T05:34:39.567 に答える