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