我正在尝试在python中构建Nim“策略的数学游戏”,我有从矩阵中删除特定列表中的元素的问题,我开始从用户获取游戏模式然后开始删除元素,这里是我写的代码;
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
Stacks:是我在main中构建的矩阵。 StackNum:我想从其元素中删除的列表数。 匹配项:我要删除的元素数量。
还有一个名为ManageGame的函数控制用户的输入“如果它是2个玩家或1,获得StackNum / Matches”:
def ManageGame(Stack,gameMode):
if gameMode=='2':
while(lastDot(Stack)):
stackNum,matchesNum=raw_input('select number of the Stack and number of Matches between 1-10. keep a space between two numbers:').split(' ')
check=RemoveMatches(Stack,int(stackNum),int(matchesNum))
if check:
DrawStacks(Stack)
else:
print "try again."
lastDot(Stack):检查矩阵是否有多于1个Dot的函数。
问题是,当我试图从StackNum中删除多少元素时,我得到这样的事情: 来自:
当我输入StackNum=1,Matches=2
时,我得到:
不知怎的,我从每个矩阵行中删除2个点,我在代码中看不到问题。
行中的回报:
for i in range(Matches):
Stacks[StackNum].pop()
return True
位于错误的位置。你必须在for
之后移动它。否则,在第一次迭代之后它将退出并且不运行所有迭代:
for i in range(Matches):
Stacks[StackNum].pop()
return True
列表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)
当我想弹出一个元素时,我减去匹配数。