我正在尝试在python中构建Nim“策略的数学游戏”,我有从矩阵中删除特定列表中的元素的问题,我开始从用户获取游戏模式然后开始删除元素,这里代码我写道;
ubuntu:17.10
Stacks :是我在main中构建的矩阵 StackNum :我要从中删除的列表数量。
匹配:我要删除的元素数量。
还有另一个名为 ManageGame 的功能,它控制用户的输入“如果它是2个玩家或1,获得StackNum / Matches”:
ubuntu:17.04
lastDot(Stack):检查矩阵是否有多于1个Dot的函数。
问题是当我试图从StackNum中删除多少元素时,我得到的结果如下:
来自:
当我输入def RemoveMatches(Stacks,StackNum,Matches):
if not_empty(Stacks[StackNum]):
lenStack=len(Stacks[StackNum])
try:
val=int(Matches)
except ValueError:
print ("Wrong input,try only with numbers")
return False
if val>lenStack:
print "try again with smaller number"
return False
else :
for i in range(Matches):
Stacks[StackNum].pop()
return True
else:
print "Stack that you have chose is already empty,try other satck"
return False
时,我得到:
不知怎的,我从每个矩阵行中删除了2个点,我在代码中看不到问题。
答案 0 :(得分:0)
行中的回报:
for i in range(Matches):
Stacks[StackNum].pop()
return True
位于错误的位置。你必须在for
之后移动它。
否则,在第一次迭代之后它将退出并且不运行所有迭代:
for i in range(Matches):
Stacks[StackNum].pop()
return True
答案 1 :(得分:0)
此处列表l=[]
的问题,这里是我如何构建矩阵:
l=[]
tmp=[]
for i in range(10):
l.append('*')
for i in range(5):
tmp.append(l)
python使用指针,所以我为tmp添加了相同的指针,当我对其中一个进行更改时,其余部分将相同。
我在这里是如何解决的:
for i in range(5):
tmp.append(10)
当我想要弹出元素时,我会减去匹配数字。