如何从矩阵Python中的列表中删除元素?

问题描述 投票:0回答:2

我正在尝试在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中删除多少元素时,我得到这样的事情: 来自:

enter image description here

当我输入StackNum=1,Matches=2时,我得到:

enter image description here

不知怎的,我从每个矩阵行中删除2个点,我在代码中看不到问题。

python matrix pop
2个回答
0
投票

行中的回报:

for i in range(Matches):
    Stacks[StackNum].pop()
    return True

位于错误的位置。你必须在for之后移动它。否则,在第一次迭代之后它将退出并且不运行所有迭代:

for i in range(Matches):
    Stacks[StackNum].pop()
return True

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)  

当我想弹出一个元素时,我减去匹配数。

© www.soinside.com 2019 - 2024. All rights reserved.