python将子例程定义传递给另一个子例程

时间:2017-10-29 09:38:54

标签: python

是否可以将定义从一个子例程转移到另一个子例程?我没有办法将dealthehand转移到playthegame而没有说“deckchoice is not defined

def dealthehand():
  deck2=[123456789]
  deckchoice=random.choice(deck2)
  deckchoice2=random.choice(deck2)
  deckchoice3=random.choice(deck2)
  deckchoice4=random.choice(deck2)
  deckchoice5=random.choice(deck2)
  deckchoice6=random.choice(deck2)



def playthegame():

  dealthehand()
  print(deckchoice)

1 个答案:

答案 0 :(得分:1)

我们的想法是从函数中返回一个值,以便调用代码可以访问结果。

def dealthehand():
    deck2=[1, 2, 3, 4, 5, 6, 7, 8, 9]

    deckchoice=random.choice(deck2)
    deckchoice2=random.choice(deck2)
    deckchoice3=random.choice(deck2)
    deckchoice4=random.choice(deck2)
    deckchoice5=random.choice(deck2)
    deckchoice6=random.choice(deck2)

    return (deckchoice, deckchoice2, deckchoice3, deckchoice4, deckchoice5, deckchoice6) 

def playthegame():
    hand = dealthehand()
    print(hand)    # will print a tuple, e.g. (5, 8, 2, 2, 1, 3)

通过索引元组来访问手中的各张牌,例如第3张牌是hand[2](索引从0开始)。

构造返回值(在这种情况下是一个元组)非常麻烦。你最好使用一个复杂的变量将处理过的牌组合成一只手。您可以使用元组,列表,字典或您自己的自定义类来执行此操作 - 这取决于您需要如何使用它。

以下是使用列表代表6张牌的一个例子:

def dealthehand():
    cards = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    return [random.choice(cards) for i in range(6)]

这使用列表推导来创建6张随机卡的列表。