在python中交换2D数组中的两个字符?

时间:2014-11-20 08:05:57

标签: python 2d swap

所以,我对编程很陌生,这让我感到很沮丧!我想要做的是能够导入4x8文本文件,并将文本转换为2D列表,以便我可以交换两个字符。例如,如果导入的文本文件如下所示:

OOOOOOOO
OOOXOOOO
OOOOOOOO
OOOOOOOO

然后我希望能够在输入用户输入时更改X的位置(行/列位置),这样O就会放在其位置以保留格式。因此,对于exapmle,程序将提示用户输入,如果用户输入“up”,则X将向上移动一个空格。

OOOXOOOO
OOOOOOOO
OOOOOOOO
OOOOOOOO

我希望它在每次制作之后反复提示新动作,并且每次都显示新网格(这样每次进入动作时都可以看到X在新位置)。

到目前为止,这就是我所拥有的一切。我知道我需要先找到X,但我真的不知道怎么做。我被困在这里任何帮助表示赞赏。

#Global variables for the movements
UP = 8
DOWN = 2
RIGHT = 6
LEFT = 4

#Dimensions of grid
ROWS = 4
COLUMNS = 8

def start():        
    filename = input("Enter the name of the Start Positions file: ")
    textFile = open(filename)
    aMaze = [line.strip() for line in textFile]
    for r in range(ROWS):
        for c in range(COLUMNS):
            print(aMaze[r][c], end="")
        print()

def moveType():
    while (True):
        try:
            move = input("ENTER YOUR MOVE: ") 
        except ValueError:
            print("unimportant error message")
            continue
        if ((int(move)) in (DOWN, LEFT, RIGHT, UP)):
            playerMove(move)
            continue
        else:
            print("unimportant error message")
            continue            
    return(move)

def playerMove(move):
    move = (int(move))
    if (move == DOWN):
        #need help here
    elif (move == UP):
        #and here
    elif (move == LEFT):
        #don't know what i'm doing
    elif (move == RIGHT):
        #also here

start()
moveType()

1 个答案:

答案 0 :(得分:0)

这是了解抽象的绝佳机会。要解决您的问题,请考虑您可以解决的子问题(使用函数),这将使您的最终问题更容易。

在您的具体实例中,编写程序以查找X所在的笛卡尔坐标会更容易吗?使用(x,y)坐标,您可以创建一个函数将该坐标(可能存储为元组)转换为二维数组,其中该坐标为X,其他一切为零。

提示1:

x =0
y =0
for row in numrows:
    for col in numcols:
        if array[row][col] == X
            y = row
            x = col

提示2:

for row in numrows:
    for col in numcols:
        if col is x and row is y:
            place X
        else:
            place O

注意:如果这是一个你想要了解每一点性能的应用程序,你肯定不需要每次迭代遍历你的数组来找到X.你可以(并且应该)选择存储X的位置然后在你的数组中使用两次访问来翻转X和O&#39。但是看到这可能是你解决这个问题的第一个问题当然不是问题。

希望这有帮助!祝你好运开始编码!