背景信息,如果您只是想用下面的代码查看问题,请不要阅读
我希望每个人都熟悉棍棒或“尼姆”游戏。如果没有,你设置一个起始量的棍子(10到50之间)和绘制(1-3支),直到没有任何棍子留下,宣告那个将最后一根棍子拉到输家的人。在我的编程课中,我们还包括了与AI对战的选项。但是,人工智能不再是随机选择数字1-3的假人。现在他从他的每个回合中学习。
实施:
AI为剩下的每根木棒都有一个水桶。有一个桶用于1棒 左,2支,3支等
在游戏开始时,每个桶中都有3个球。每个都标有选择 这些代表了AI选择1,2或3根棍子的选择。
这是我正在使用的代码。
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])
我要拿出球的铲斗基本上就是剩下的杆数,我只是在铲斗列表中找到一个特定的铲斗然后取出球。现在我收到一条错误消息,说dbnum.pop(pullnum) - 'int'对象没有'pop'的属性?这是存储桶代码(列表中的列表):
bucket=[]
for j in range(51):
bucket.append([1,2,3])
我可能会感到困惑,但如果有人有任何建议甚至是澄清问题,请回复。谢谢大家。
修改 这里有一些代码,对不起,我愚蠢的是不要添加变量的定义等。
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是Player 1 vs. Player 2.显然我对AI智能的实现并没有太远,这有点棘手。
- - - - &GT;弗雷德S.,我刚刚开始,并有问题让心轮旋转。摘录的不是所有代码。我不是在问这个问题如何完成任务,虽然有关执行这个新的智能AI代码的提示会有所帮助,但在这种情况下,它更侧重于计算列表索引。
答案 0 :(得分:2)
看起来你正在将内部for循环中的变量分配给'bucket [bucketnum]'。让我感到惊讶的是,这不是语法错误,但我认为这不是你想要实际做的事情。
如果您正在处理嵌套列表,并且列表中的位置对应于剩余的数量,那么您希望按位置索引该列表以获取该存储桶,而不是迭代该列表找到它。
如果您这样想:
buckets = [[1,2,3], ..., ..., ...]
然后,bucketnum是桶列表中存储桶的位置。因此,在您的情况下,如果您想抓住“26”支桶,您可以通过使用该数字索引存储桶来访问它。
buckets[25] # 25 since you're counting from 0+
此时,你有问题的存储桶,可以从中弹出选择。
bucket = buckets[25]
bucket.pop(pullnum)