首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多台发电机

多台发电机
EN

Stack Overflow用户
提问于 2012-06-28 06:31:43
回答 2查看 378关注 0票数 0

我正试图为一个棒球程序编写一个程序,它将使用多台发电机来获得打击和球。我的发电机看起来是这样的:

代码语言:javascript
复制
k = (strike(x) for x in range(3) if x%1 ==0)  
w = (ball(n) for n in range(4) if x%1 == 0)

到目前为止,我所做的程序如下:

代码语言:javascript
复制
def count(pitch):
    if pitch == 'strike':
        return next(k),w
    elif pitch =='ball':
        return next(w),k

我想要我的代码返回下一个结果的罢工,也返回当前的球,和反之亦然。请帮助我非常困难。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-28 07:13:23

一种更简单的方法是:

代码语言:javascript
复制
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]    

输出:

代码语言:javascript
复制
>>> countt('strike')
(1, 0)
>>> countt('strike')
(2, 0)
>>> countt('ball')
(1, 2)
>>> countt('ball')
(2, 2)
>>> countt('ball')
(3, 2)
>>> countt('strike')
(0, 3)
票数 0
EN

Stack Overflow用户

发布于 2012-06-28 06:48:37

如果不推进发电机,就无法得到发电机的“电流”值。如果您想要跟踪“当前”值,您需要自己存储它。这意味着您必须重构代码,因为count函数将在下一次调用中“忘记”它的任何值。这里有一种方法可以通过一个类来实现:

代码语言:javascript
复制
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

我删除了对strikeball函数的引用,因为您没有提供关于这些函数的信息,但是可以将它们添加进来。然后:

代码语言:javascript
复制
>>> c = Count()
>>> c.count("strike")
(1, 0)
>>> c.count("strike")
(2, 0)
>>> c.count("ball")
(2, 1)

正如@gnibbler在一条评论中所指出的,您还应该考虑一下您试图对x%1业务做些什么。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11239180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档