拾起棍子/智能AI/Python

拾起棍子/智能AI/Python,python,Python,背景信息,如果您只想查看下面代码的问题,无需阅读: 我希望每个人都熟悉棍棒或“尼姆”的游戏。如果不熟悉,你可以设定一个开始的棍棒数量(在10到50之间)并抽签(1-3根棍棒),直到没有任何棍棒剩下,宣布最后拔出棍棒的人是输家。在我的编程课上,我们还包括了与人工智能对抗的选项。但是,人工智能不再是一个随机选择数字1-3的假人。现在他从每一轮中学习 实施: 人工智能有一个桶来存储每一根剩余的棍子。有一个斗装一根棍子 左、2支、3支等 在比赛开始时,每个桶里有3个球。每个都有选择的标记 1、2或3。

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

我希望每个人都熟悉棍棒或“尼姆”的游戏。如果不熟悉,你可以设定一个开始的棍棒数量(在10到50之间)并抽签(1-3根棍棒),直到没有任何棍棒剩下,宣布最后拔出棍棒的人是输家。在我的编程课上,我们还包括了与人工智能对抗的选项。但是,人工智能不再是一个随机选择数字1-3的假人。现在他从每一轮中学习

实施

  • 人工智能有一个桶来存储每一根剩余的棍子。有一个斗装一根棍子 左、2支、3支等

  • 在比赛开始时,每个桶里有3个球。每个都有选择的标记 1、2或3。这些代表人工智能选择拾取1、2或3根棍子

  • 在AI的回合中,它从桶中取出一个随机球,表示每个球的数量 向左拐。它读取球并从堆中移除该数量的棍子。那么 将球放在铲斗前面
  • 如果AI赢了这场比赛,那么它将通过所有的选择,并将两个球投回 它所做的每个选择所选的数字。增加它选择那个球的机会 下一次,当它面对一个给定数量的棍子的选择时
  • 如果AI输了,它会把球扔到桶旁边。但是,如果选择 球是最后的选择,然后它把它放回桶里。桶必须至少包含一个容器 每个数字中至少有一个。因此,如果用户选择了一个有许多棍子的球 从桶中拾取,这是选择的最后一个球,如果AI输了,它必须放 把球打回来。它永远无法从桶中完全删除任何选择
  • 随着更多的游戏被玩,人工智能将通过额外的球来加强获胜的选择 棍子捡起来了。”
这是我现在正在使用的代码

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'属性?这是桶代码(列表中的列表):

我可能会完全困惑,但如果有任何人有任何建议或问题需要澄清,请回答。谢谢大家

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

            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:
棍棒=“”
尽管如此:
尝试:
sticks=int(输入(“输入以“.”开头的棍棒数”)
如果sticks>=10且sticks为0:
最大选择=最小值(3个,杆)
选择=-1
countbucket=0
如果播放者1:
而choicemaxchoice:
尝试:
choice=int(输入(“玩家1,你想要拿多少根棍子?(1-3):”)

如果choice>=1和choice Fred S.,我只是刚刚开始,并遇到了让思维车轮旋转的问题。摘录的并不是所有的代码。我不是在问如何在这一点上完成作业,尽管关于执行这一新智能AI代码的提示会有所帮助,但在这种情况下,更多的是关注列表索引。

看起来您正在将内部for循环中的变量指定给“bucket[bucketnum]”。这让我感到惊讶的是,这不是语法错误,但我认为这不是您实际要做的

如果您正在处理一个嵌套列表,并且列表中的位置对应于剩余的棍棒数,那么您希望通过位置为该列表编制索引以获取该桶,而不是迭代该列表以找到它

如果你这样想:

buckets = [[1,2,3], ..., ..., ...]
bucketnum是bucket在bucket列表中的位置。因此,在您的例子中,如果您想要抓取bucket以获取“26”个棍棒,您可以通过按该数字索引bucket来访问它

buckets[25] # 25 since you're counting from 0+
在这一点上,你有问题的桶,并可以弹出选择从它

bucket = buckets[25]
bucket.pop(pullnum)

您可以再添加一点代码吗?我们需要能够看到您在何处以及如何定义棍棒和选择。正如错误所提示的,请检查
bucketnum
,这是一个整数吗?这就是为什么它没有
pop
属性的原因。您的描述非常清楚您希望它如何工作,但您的代码甚至不接近与描述相符。问题太多了,很难知道从哪里开始。
bucket = buckets[25]
bucket.pop(pullnum)