0

複数のジェネレーターを使用してストライクとボールを取得する野球プログラムの手順を作成しようとしています。私のジェネレーターは次のようになります。

k = (strike(x) for x in range(3) if x%1 ==0)  
w = (ball(n) for n in range(4) if x%1 == 0)

私がこれまでに行った手順は次のようになります。

def count(pitch):
    if pitch == 'strike':
        return next(k),w
    elif pitch =='ball':
        return next(w),k

コードでストライクの次の結果を返し、ボールの電流も返すようにします。その逆も同様です。私がかなり困惑しているのを手伝ってください。

4

2 に答える 2

3

ジェネレーターを前進させずにジェネレーターの「現在の」値を取得する方法はありません。「現在の」値を追跡する場合は、自分で保存する必要があります。これは、count関数が次の呼び出しでその値を「忘れる」ため、コードをリファクタリングする必要があることを意味します。クラスでそれを行う1つの方法は次のとおりです。

class Count(object):
    def __init__(self):
        self.k = (x for x in range(3))
        self.w = (x for x in range(4))
        self.strikes = next(self.k)
        self.balls = next(self.w)

    def count(self, pitch):
        if pitch == "strike":
            self.strikes = next(self.k)
        elif pitch == "ball":
            self.balls = next(self.w)
        return self.strikes, self.balls

あなたがそれらに関する情報を提供しないので、私はそれらへの参照strikeと関数を削除しました、しかしあなたはそれらを追加することができました。ball

>>> c = Count()
>>> c.count("strike")
(1, 0)
>>> c.count("strike")
(2, 0)
>>> c.count("ball")
(2, 1)

@gnibblerがコメントで述べたように、あなたはそのx%1ビジネスで何をしようとしているのかについても考える必要があります。

于 2012-06-28T06:48:37.513 に答える
0

これを行う簡単な方法:

k = [x for x in range(3)]
w = [n for n in range(4)]
i=0
j=0

def countt(pitch):
    global i
    global j
    if pitch == 'strike':

        if i==len(k)-1:
            i=0
        else:i=i+1
        return k[i],w[j]

    elif pitch =='ball':
        if j==len(w)-1:
            j=0
        else:j=j+1    
        return w[j],k[i]    

出力:

>>> countt('strike')
(1, 0)
>>> countt('strike')
(2, 0)
>>> countt('ball')
(1, 2)
>>> countt('ball')
(2, 2)
>>> countt('ball')
(3, 2)
>>> countt('strike')
(0, 3)
于 2012-06-28T07:13:23.443 に答える