检查3D numpy数组中的索引

时间:2014-10-09 14:36:07

标签: python arrays numpy indexing

我试图编写代码,通过命令行与一个人对着计算机玩Pig骰子游戏

对于计算机的播放器,我使用3D numpy阵列来存储基于信息当前得分 AI_1_current ,存储分数 AI_1_bank 的游戏策略对手的分数 human_bank

这个想法是,每转一圈,计算机都会检查策略数组,如果索引[AI_1_current,AI_1_bank,human_bank]的值等于0,它将继续滚动,如果它等于1 ,它将保留目前的分数。

现在,我遇到的问题是,计算机轮流的功能是不正确地读取阵列,而不是在应该的时候进行存储。

我有这个代码来设置数组:

AI_1_strategy = numpy.zeroes((100,100,100))

for i in range(10, 100):
    for j in range(10, 100):
        for k in range(10, 100):
            AI_1_strategy[i, j, k] = 1

理想情况下,如果i,j或k大于或等于10,计算机将每转一圈

然后我有了这个代码来检查数组:

if AI_1_strategy[AI_1_bank, AI_1_current, human_bank] == 1: 
    AI_1_bank += AI_1_current # add current points to the bank
    AI_1_current = 0
    time.sleep(3) # 3 second delay

   if AI_1_bank >= 100: # win condition
        print "AI_1 WINS!"
    else:   
        AI_current = 0 # sets current points to 0
        print "AI has banked"
        pig_human() # moves to the player's turn

else:
    time.sleep(3) # 3 second delay
    print "AI_1 chose to keep rolling"
    pig_AI_1() # AI takes another roll

尽管有这段代码,但计算机仍然无法一直保存。

如果我这样做,也会出现问题:

AI_1_strategy = numpy.ones((100,100,100))

for i in range(10, 100):
    for j in range(10, 100):
        for k in range(10, 100):
            AI_1_strategy[i, j, k] = 0

除非是这种情况,否则无论得分如何,它都会在每次转弯时存入,当i,j或k达到10时,它应该真正停止存储。

如果有人能帮助我,我非常感激,我不知道我做错了什么。

感谢。

1 个答案:

答案 0 :(得分:0)

看起来你正在犯一个小的逻辑错误。

  

我有这个代码来设置数组:

AI_1_strategy = numpy.zeroes((100,100,100))

for i in range(10, 100):
    for j in range(10, 100):
        for k in range(10, 100):
            AI_1_strategy[i, j, k] = 1
     

理想情况下,如果i,j或k大于或等于10,计算机将每转一圈

这是不正确的:i,j和k中的每一个都必须> = 10才能从此数组中读取1。