如何重复一个函数,但每次重复都返回不同的值?(Python)

2024-09-24 02:24:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我是新来的,这对我来说很难解释,所以请容忍我,我会尽量具体的!你知道吗

我正在模拟一个顶级王牌游戏,我定义了一个函数“playgame()”,它可以玩1个游戏。我需要玩大量的游戏(比如说,10000),但是我尝试过的每一种方法(例如,在for循环中,在while循环中,使用repeat函数等)都只会玩完全相同的游戏10000次。游戏的结果取决于牌组中的牌(这些牌是在不同的函数中随机产生的),但在每次重复时,它使用完全相同的牌组,并以完全相同的方式处理牌,因此每次的结果都是相同的。你知道吗

我想做的是让脚本“玩”10000个不同的游戏,这样我就可以从这些游戏中收集数据,而不是同一个游戏的10000次重复(因为这是无用的信息)。你知道吗

有没有办法重复一个你自己定义的函数,但是每次使用不同的值?你知道吗

我的职责是:

def playgame():
    i=0
    a=0
    b=0
    while len(Player_0_Deck) and len(Player_1_Deck) >= 1:
        if len(Player_0_Deck) and len(Player_1_Deck) >= 1:
            Round_P0()
            a = a + 1
        if len(Player_0_Deck) and len(Player_1_Deck) >= 1:
            Round_P1()
            b = b + 1
        i = i + 1
        if i >= 100:
            break
    print a + b, "rounds have been played in this game."

Round\u P0()和Round\u P1()定义如下:

def Round_P0():
a=1
Chosen0 = max(Player_0_Deck[0])
if Chosen0 is Player_0_Deck[0][0]:
    Matched1 = Player_1_Deck[0][0]
else:
    Matched1 = Player_1_Deck[0][1]
print "Player 0's chosen value:", Chosen0
print "Player 1's corresponding value:", Matched1
print "         "
if Matched1 <= Chosen0:
    Player_0_Deck.insert(len(Player_0_Deck)-1, Player_0_Deck.pop(0))
    Player_0_Deck.append(Player_1_Deck[0])
    Player_1_Deck.remove(Player_1_Deck[0])
    a = a + 1
if Matched1 > Chosen0:
    Player_1_Deck.insert(len(Player_1_Deck)-1, Player_1_Deck.pop(0))
    Player_1_Deck.append(Player_0_Deck[0])
    Player_0_Deck.remove(Player_0_Deck[0])
    a = a + 1
print Player_0_Deck
print Player_1_Deck

def Round_P1():
b=0
Chosen1 = max(Player_1_Deck[0])
if Chosen1 is Player_1_Deck[0][0]:
    Matched0 = Player_0_Deck[0][0]
else:
    Matched0 = Player_0_Deck[0][1]
print "Player 1's chosen value:", Chosen1
print "Player 0's corresponding value:", Matched0
print "             "
if Matched0 <= Chosen1:
    Player_1_Deck.insert(len(Player_1_Deck)-1, Player_1_Deck.pop(0))
    Player_1_Deck.append(Player_0_Deck[0])
    Player_0_Deck.remove(Player_0_Deck[0])
    b = b + 1
if Matched0 > Chosen1:
    Player_0_Deck.insert(len(Player_0_Deck)-1, Player_0_Deck.pop(0))
    Player_0_Deck.append(Player_1_Deck[0])
    Player_1_Deck.remove(Player_1_Deck[0])
    b = b + 1
print Player_0_Deck
print Player_1_Deck

如果需要的话,我就是这样做的:

N = int(raw_input("Choose the number of total cards you would like to play \
with. (It must be even.) "))

def MakeCard():
    A = random.randint(1,N)
    Yin = A
    Yang = N+1-A
    return (Yin, Yang)

def MakeDeck():
    return [MakeCard() for i in range(1,N+1)]

Deck = MakeDeck()

#Deal cards

random.shuffle(Deck)
print "This is the complete deck:", Deck
Player_0_Deck = Deck[0:N/2]
Player_1_Deck = Deck[N/2:N+1]
print "This is Player 0's hand:", Player_0_Deck
print "This is Player 1's hand:", Player_1_Deck

我希望这是有意义的,任何帮助将不胜感激!你知道吗


Tags: 函数游戏lenifisvaluedefplayer
1条回答
网友
1楼 · 发布于 2024-09-24 02:24:51

deck对象在定义时传递给函数。它没有前后链接。传递deck n作为参数,并为循环的每个迭代创建一个新的deck

for _ in range(10000):
    theDeck = MakeDeck()
    playgame(theDeck)

相关问题 更多 >