python-3.x 我怎样才能使递归在循环之间切换?

mwkjh3gx  于 2023-01-22  发布在  Python
关注(0)|答案(2)|浏览(110)

我正在尝试做一个Connect 4 AI,它包含7个嵌套的循环,这些循环共同迭代每一个可能的计数器位置。除了最后一个循环之外,所有循环都做完全相同的事情。循环包含中断,以便迭代可以后退一步。递归的唯一问题是我还没有弄清楚如何让它后退一个循环,所以现在这是不可能的。(我正在寻找一个更快的程序和更少的代码行。)我的问题的基本重现如下:

for loop1 in range(7):
    breakChance = random.randint(1,5)
    if breakChance > 3:
        break

    for loop2 in range(7):
        breakChance = random.randint(1,5)
        if breakChance > 3:
            break
        
        for loop3 in range(7):...

我试过把循环的主要部分放在一个函数中,然后发送消息来打破循环,这并没有降低速度,但确实减少了行数,我试过使用递归,但我不能让它做我喜欢做的事情:当我想要的时候,它从来没有中断过,我觉得这是可读性的牺牲,至少对我来说是这样。

fgw7neuy

fgw7neuy1#

如果你想模拟走2d棋盘,你可以通过一对for循环来完成,你也可以 checkout itertools在一个循环中完成,当你找到一个有效的逆棋时,你就用它退出这个方法。

import random

def get_counter_position():
    for x in range(7):
        for y in range(7):
            if random.randint(1,5) > 4:
                return (x, y)
    raise Exception("No Counter Move")

print(f"Found counter move at: { get_counter_position() } ")
print(f"Found counter move at: { get_counter_position() } ")
tsm1rwdh

tsm1rwdh2#

这就是你想要的吗?

def my_loop(i):                                                                                                                                              
    if i==7:                                                                                                                                                 
        return                                                                                                                                               
    else:                                                                                                                                                    
        my_loop(i+1)                                                                                                                                         
                                                                                                                                                             
    for j in range(7):                                                                                                                                       
        print(f"index {j} in loop {i}")                                                                                                                      
                                                                                                                                                             

# Run it!                                                                                                                                                             
my_loop(0)

相关问题