要在循环内使用的更改变量(Python)

要在循环内使用的更改变量(Python),python,arrays,variables,python-3.x,Python,Arrays,Variables,Python 3.x,所以我正在编写一个跳棋游戏,我遇到的问题是在一个循环中创建几个棋子。我有代码中的类创建部分,我将不在这里发布,其余部分我正在发布,但我不知道如何更改循环将要使用的变量。如果你能帮我解决这个问题,我将不胜感激 很抱歉以图片的形式发布我的代码,我是这个网站(和编程)的新手,无法设置格式以便网站接受我的帖子。我真的希望你们能帮我 谢谢你的帮助 进一步澄清:每次循环运行时,我都需要使用不同的“片段”创建。这意味着第一个循环必须创建分段1,然后是分段2,然后是分段3。。。等等 编辑:发布整个代码。我知道格

所以我正在编写一个跳棋游戏,我遇到的问题是在一个循环中创建几个棋子。我有代码中的类创建部分,我将不在这里发布,其余部分我正在发布,但我不知道如何更改循环将要使用的变量。如果你能帮我解决这个问题,我将不胜感激

很抱歉以图片的形式发布我的代码,我是这个网站(和编程)的新手,无法设置格式以便网站接受我的帖子。我真的希望你们能帮我

谢谢你的帮助

进一步澄清:每次循环运行时,我都需要使用不同的“片段”创建。这意味着第一个循环必须创建分段1,然后是分段2,然后是分段3。。。等等

编辑:发布整个代码。我知道格式错了,情不自禁。所以,希望有人能把它修好

class Piece:
    def __init__(self, kind, yposition, xposition):
        self.color = kind
        self.ypos = xposition
        self.xpos = yposition

    def getColor(self):
        return self.getColor

    def adjustY(self, change):
        self.ypos = self.ypos + change

    def adjustX(self, change):
        self.xpos = self.xpos + change

    def getY(self):
        return self.ypos

    def getX(self):
        return self.xpos

    def mover(self, direction):
        self.direc = direction
        if self.direc == "right" and self.color == "white":
            for n in alist:
                if n.getY == (self.getY - 1) and n.getX == (self.getX + 1):
                    pass
                    # NOT YET IMPLEMENTED

                else:
                    self.adjustY(-1)
                    self.adjustX(+1)

        elif self.direc == "left" and self.color == "white":
            for n in alist:
                if n.getY == (self.getY - 1) and n.getX == (self.getX - 1):
                    pass
                    # NOT YET IMPLEMENTED

                else:
                    self.adjustY(-1)
                    self.adjustX(-1)
        elif self.direc == "right" and self.color == "black":
            for n in alist:
                if n.getY == (self.getY + 1) and n.getX == (self.getX + 1):
                    pass
                    # NOT YET IMPLEMENTED

                else:
                    self.adjustY(+1)
                    self.adjustX(+1)

        else:
            for n in alist:
                if n.getY == (self.getY + 1) and n.getX == (self.getX - 1):
                    pass
                    # NOT YET IMPLEMENTED

                else:
                    self.adjustY(+1)
                    self.adjustX(-1)


piece1 = 0
piece2 = 0
piece3 = 0
piece4 = 0
piece5 = 0
piece6 = 0
piece7 = 0
piece8 = 0
piece9 = 0
piece10 = 0
piece11 = 0
piece12 = 0

alistb1 = [piece1,piece2,piece3,piece4,piece5,piece6,piece7,piece8,piece9,piece10,piece11,piece12]

k = 2

for i in range(0,11):
    if i >= 0 and i <5:
        j = 8
        m = 0

    elif i >= 5 and i < 9:
        j = 7
        m = 1

    else:
        j = 6
        m = 0
    alistb1[i] = Piece("white",j,(m + 1 + i * k))
    print(alistb1[i].getY())

# print(piece7.getY()) test reasons
类块:
定义初始(自我、种类、位置、位置):
self.color=善良
self.ypos=xposition
self.xpos=yposition
def getColor(自身):
return self.getColor
def调整(自我、更换):
self.ypos=self.ypos+更改
def adjustX(自身、更改):
self.xpos=self.xpos+change
def getY(自我):
返回self.ypos
def getX(自我):
return self.xpos
def移动器(自身、方向):
self.direc=方向
如果self.direc==“right”和self.color==“white”:
对于列表中的n:
如果n.getY==(self.getY-1)和n.getX==(self.getX+1):
通过
#尚未实施
其他:
自我调节(-1)
自调整X(+1)
elif self.direc==“左”和self.color==“白”:
对于列表中的n:
如果n.getY==(self.getY-1)和n.getX==(self.getX-1):
通过
#尚未实施
其他:
自我调节(-1)
自调整X(-1)
elif self.direc==“right”和self.color==“black”:
对于列表中的n:
如果n.getY==(self.getY+1)和n.getX==(self.getX+1):
通过
#尚未实施
其他:
自我调节(+1)
自调整X(+1)
其他:
对于列表中的n:
如果n.getY==(self.getY+1)和n.getX==(self.getX-1):
通过
#尚未实施
其他:
自我调节(+1)
自调整X(-1)
分段1=0
分段2=0
计件3=0
计件4=0
计件5=0
计件6=0
分段7=0
计件8=0
计件9=0
计件10=0
分段11=0
第12段=0
alistb1=[piece1、piece2、piece3、piece4、piece5、piece6、piece7、piece8、piece9、piece10、piece11、piece12]
k=2
对于范围(0,11)内的i:
如果i>=0且i=5且i<9:
j=7
m=1
其他:
j=6
m=0
alistb1[i]=工件(“白色”,j,(m+1+i*k))
打印(alistb1[i].getY())
#打印(piece7.getY())测试原因

备注:def移动器尚未准备就绪。

使用
字典和for
循环:

pieces = {}
# I'm assuming you want 12 pieces since your list has 12 pieces      
for i in range(1,13):  # range starts at m so, range(m,n) iterates from m up to n-1
    # I would suggest using more descriptive variable names if you can, row or column for example
    if i >= 0 and i <5:
        j = 8
        m = 0

    elif i >= 5 and i < 9:
       j = 7
       m = 1

    else:
       j = 6
       m = 0
    pieces['piece{}'.format(i)] = Piece("white",j,(m + 1 + i * k))
输出:

>>> pieces['piece1'].color
'white'
>>> pieces['piece3'].color
'white'
>>> pieces['piece3'].xpos
8
>>> for key in pieces:
    print(key, pieces[key])


piece8 <__main__.Piece object at 0x000000000329A4E0>
piece9 <__main__.Piece object at 0x000000000329A550>
piece6 <__main__.Piece object at 0x000000000329A400>
piece7 <__main__.Piece object at 0x000000000329A470>
piece4 <__main__.Piece object at 0x000000000329A320>
piece5 <__main__.Piece object at 0x000000000329A390>
piece2 <__main__.Piece object at 0x0000000003287DA0>
piece3 <__main__.Piece object at 0x000000000329A2B0>
piece1 <__main__.Piece object at 0x00000000031D9CF8>
piece10 <__main__.Piece object at 0x000000000329A5C0>
piece11 <__main__.Piece object at 0x000000000329A630>
piece12 <__main__.Piece object at 0x000000000329A6A0>
>>> pieces['piece3'].mover('right')
Traceback (most recent call last):
  File "<pyshell#13>", line 1, in <module>
    pieces['piece3'].mover('right')
  File "C:/Users/Hannah/Documents/thing.py", line 25, in mover
    for n in alist:
NameError: global name 'alist' is not defined
>>> pieces['piece3'].xpos
8
>>> pieces['piece3'].adjustX(1)
>>> pieces['piece3'].xpos
9

您不需要为每个工件指定变量。您已经在为您的作品使用列表。您可以只编写
片段[0]
,而不是编写
片段1
。(您确实需要注意,列表以索引0开头。)

范围
具有独占权限。这意味着它不包括在内,您的范围以小于该值的1结束。您想使用
范围(0,12)

在python中,可以动态添加到列表中。你不需要分配足够的空间来容纳你的作品。您可以使用列表的
.append()
方法

现在编写代码的一种方法是:

pieces = []
for i in range(0, 12):      # 0-11
    if i < 5:
        pieces.append(Piece("white", 8, 1 + i*2))
    elif i < 9:
        pieces.append(Piece("white", 7, 2 + i*2))
    else:
        pieces.append(Piece("white", 6, 1 + i*2))

你能修好你的柱子吗?将代码缩进4个空格,它将呈现为代码块。此外,请发布所有代码。如有疑问,请单击橙色问号以查看标记编辑帮助工具栏。或者,读一下。我想我已经把你的密码完全修好了。还有一件事:。谢谢,希望有人能回答我:D@farmerjoe请回滚您的编辑,它的语法不正确。您的方法没有给我错误,但是,我无法访问我创建的任何作品。例如,print(piece4.getY())不起作用。我该怎么做?另外:如果可能的话,你能解释一下你刚才做了什么吗?这样我就不用再问了:顺便说一句,谢谢你的帮助!我确信OP是为一个班级做这件事的,他们总是会告诉你使用getter和setter@2rs2ts实际上我是为自己做的,还是一个高中生:/@user3258512干得好@2rs2ts不知道讽刺与否,也不意味着粗鲁,我非常感谢你们两位试图帮助我。谢谢!这最终适用于大多数作品。只有一件事是这样的。如果我使用print(pieces[0].getY()),它将返回一个空行(但是适用于pieces[1]和forward)。你知道为什么吗@2rs2ts@user3258512编辑你的原始帖子以显示你现在使用的代码,这样我就可以看到你是否复制了错误的东西。它现在正在工作,我发誓它只是奇迹般地发生了。谢谢你的帮助@user3258512当您继续实现移动器时,还有一些建议:确保您正在调用方法(使用括号),因为您在条件块中反复引用方法本身。我还建议您添加
alist
作为
mover
的参数。您可以将
片段
作为此参数传入。
>>> for n in pieces.values():  # iterates over the values in a dict
        n.color


'white'
'white'
'white'
'white'
'white'
'white'
'white'
'white'
'white'
'white'
'white'
'white'

>>> for n in pieces.keys():  # iterates over the keys
        print(n)


piece8
piece9
piece6
piece7
piece4
piece5
piece2
piece3
piece1
piece10
piece11
piece12
pieces = []
for i in range(0, 12):      # 0-11
    if i < 5:
        pieces.append(Piece("white", 8, 1 + i*2))
    elif i < 9:
        pieces.append(Piece("white", 7, 2 + i*2))
    else:
        pieces.append(Piece("white", 6, 1 + i*2))
def getColor():
    return self.color