首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >捡起棍子/智能AI / Python

捡起棍子/智能AI / Python
EN

Stack Overflow用户
提问于 2014-10-31 21:56:25
回答 2查看 3.1K关注 0票数 0

背景信息,如果您只想查看下面的代码问题,就不必阅读:

我希望每个人都熟悉棍棒或“尼姆”的游戏。如果没有,你设置一个开始数量的棍子( 10到50之间)和抽签(1-3支),直到没有任何棍子,宣布谁拉了最后一根棍子输家。在我的编程课中,我们还包括了对抗人工智能的选项。但是,人工智能不再是一个随机选择一个数字1-3的虚拟人.现在他从他的每一个回合中吸取教训。

Implementation

  • 人工智能有一个桶,每一根棍子剩下的数目。剩下一根棍子、两根棍子、三根棍子等都有一个水桶。
  • 在游戏开始时,每个桶里有3个球。每一个标记的选择1,2或3。这些代表人工智能的选择捡起1,2或3棍子。
  • 在AI的回合中,它从桶中拿出一个随机的球,表示剩下的棍子数。它读取球并从堆中移除那几根棍子。然后它把球放在桶的前面。
  • 如果AI赢了这场比赛,那么它就会进行所有的选择,并为它所做的每一个选择将两个球放回所选的数字。增加它的机会选择的球,当它下一次面对一个选择与给定数目的棍子。
  • 如果AI输了,它就把球扔到水桶旁边。然而,如果选择的球是最后的选择,那么它会把它放回桶里。桶必须至少包含每个数字中的一个。因此,如果用户选择了一个有许多棍子从桶中挑选的球,而这是最后一个球,那么如果AI输了,它必须把球放回去。它永远不能完全从桶中移除任何选择。
  • 随着更多的游戏的发挥,AI将加强更好的选择,额外的球,以赢得棍子捡起来。“

这是我现在正在处理的代码。

代码语言:javascript
复制
choice=random.randint(1,maxchoice) #computer picks a random number
bucketnum=sticks #bucket to take ball from
pullnum=choice #ball to take 
for i in bucket:
    for bucket[bucketnum] in i:
        bucketnum.pop(pullnum)
    print(bucket[bucketnum])

我要把球拿出来的水桶,本质上就是剩下的棍子数,我只是在找一个特定的桶,在清单上找不到,然后把球拿出来。现在我收到一条错误消息,上面说bucketnum.pop(pullnum) - 'int‘对象没有'pop’的属性?这是桶代码(列表中的列表):

代码语言:javascript
复制
bucket=[]
for j in range(51):
    bucket.append([1,2,3])

我可能会完全混淆,但如果有人有任何意见,甚至有任何问题需要澄清,请回答。谢谢大家。

编辑:这里还有一些代码,对不起,我不想添加变量的定义,等等。

代码语言:javascript
复制
            if option==2:
            sticks=""
            while True:
                    try:
                        sticks=int(input("Enter the number of sticks to begin with: "))
                        if sticks>=10 and sticks<=50:
                            print("Alright, there are",sticks,"sticks in the pile.")
                            break
                        else:
                            print("You mut enter an integer. (10-50)")
                    except ValueError:
                        print("You must enter an integer.")
            player1=True
            while sticks>0:
                maxchoice=min(3,sticks)
                choice=-1
                countbucket=0
                if player1:
                    while choice<1 or choice>maxchoice:                           
                        try:
                            choice=int(input("Player 1, how many sticks would you like to take? (1-3): "))
                            if choice>=1 and choice<=3:
                                sticks-=choice
                                print("There are",sticks,"sticks remaining.")
                            else:
                                print("You must enter an integer from 1-3.")
                        except ValueError:
                            print("You must enter an integer.")
                    player1=not player1
                else:
                    choice=random.randint(1,maxchoice)
                    bucketnum=sticks
                    pullnum=choice
                    for i in bucket:
                        for bucket[bucketnum] in i:
                            bucketnum.pop(pullnum)
                        print(bucket[bucketnum])
                    sticks-=1
                    print("Computer drew",choice,"stick(s). There are",sticks,"sticks remaining.")
                    player1=not player1
            if player1==False:
                print("Player 1 took the last stick.\nComputer wins!")
            else:
                print("Player 1 wins!")

这是我的程序中的选项2,因为选项1是玩家1与玩家2。很明显,在AI智能的实现上我并没有走多远,这有点棘手。

摘录的不是所有的代码。我不是在问如何在这一点上完成这个任务,虽然执行这个新的智能AI代码的技巧会很有帮助,但在这种情况下,它更多的是一个重点是找出列表索引。

EN

回答 2

Stack Overflow用户

发布于 2014-10-31 22:14:49

看起来,您将内部for循环中的变量赋值为“bucketbucketnum”。令我惊讶的是,这并不是语法错误,但我认为这并不是你真正想要做的。

如果您正在处理一个嵌套列表,并且列表中的位置对应于剩下的枝数,那么您希望按位置对该列表进行索引,以获得存储桶,而不是迭代该列表以找到它。

如果你这样想的话

代码语言:javascript
复制
buckets = [[1,2,3], ..., ..., ...]

然后桶是桶在桶列表中的位置。因此,在您的情况下,如果您想抓取桶'26‘棒,您可以访问它通过索引桶的数字。

代码语言:javascript
复制
buckets[25] # 25 since you're counting from 0+

在这一点上,您有问题的桶,并可以弹出选择。

代码语言:javascript
复制
bucket = buckets[25]
bucket.pop(pullnum)
票数 2
EN

Stack Overflow用户

发布于 2022-01-17 08:52:15

您没有定义选项,也没有导入随机库。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26683992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档