【问题标题】:Alternative to Globals Here?在这里替代 Globals?
【发布时间】:2018-04-11 14:35:25
【问题描述】:

我正在编写一个代码,允许用户在计算机上玩 Pontoon (21)。

作为其中的一部分,我使用了一个函数,该函数从名为deck 的列表中为计算机选择一张随机卡片(每三轮随机“洗牌”一次,因此卡片取自索引 0并将其删除)并将其添加到名为 comp_cards 的列表中,该列表充当计算机的“手”。

目前,我正在使用一个名为 card 的全局变量来存储函数选择的卡片。但是,我听说一般情况下最好不要使用全局变量,所以我想知道是否有任何 simple 替代方法。

这是定义函数的代码:

def comp_random_card():
    global card
    card = deck[0]
    deck.pop(0)
    comp_cards.append(card)

这是使用它的代码:

input("Computer twisted and was dealt "+card)
        input("Computer: "+" ".join(comp_cards))

编辑:当我选择随机卡片时,我需要多次参考它。还有,不知道是什么 类是(我对 Python 有点陌生)。

【问题讨论】:

  • 总有一个替代方案,但你还没有真正展示足够的代码。为什么不能从函数中退卡?
  • 创建一个类并将状态存储在属性中,并使该函数成为该类的方法。
  • 一旦你的游戏运行起来,考虑发布到 [CodeReivew.SE] 以获得更彻底的建设性批评。 (请务必阅读并遵守他们的社区准则。)
  • 感谢 cmets,我编辑了我的问题以回复他们。

标签: python python-3.x function global


【解决方案1】:

直接退货怎么样:

def comp_random_card():
  return deck.pop(0)

上面的函数使用了pop除了删除它之外还返回该项目的事实。 您的变量现在很好地受到函数范围的限制!

在您的代码中,您没有显示deck 的分数,但是也应该以某种方式处理。你可以做这样的事情:

class Game(object):
    def __init__(self):
       self.deck = code_that_creates_deck()

    def round(self):
        computed_hand = comp_random_card()
        play_round()

    def comp_random_card(self):
        return self.deck.pop(0)

【讨论】:

    猜你喜欢
    • 2013-03-07
    • 1970-01-01
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-10
    相关资源
    最近更新 更多