为啥我无法在 python 中正确使用 str.replace() 方法 [关闭]

Posted

技术标签:

【中文标题】为啥我无法在 python 中正确使用 str.replace() 方法 [关闭]【英文标题】:Why am I not able to properly use str.replace() method in python [closed]为什么我无法在 python 中正确使用 str.replace() 方法 [关闭] 【发布时间】:2015-05-12 14:23:49 【问题描述】:

这是我第一次在这里发帖,如果我发错了请告诉我。我在这里阅读了很多主题以及其他网站上的信息。他们都说字符串是不可变的,我理解这一点,但我试图在我的自动填充功能中使用str.replace() 方法,但我似乎无法正确地把它放下。根本不可能吗?这是我的代码:

def main():

    fileName = input("Please enter a filename: ") 

    file = open(fileName, 'r')  # opens the file
    content = file.readlines()  # reads in the contents as a list

    x=0                         # x is a random variable used for while loop   
    while x < (len(content)-1): # while loop is used to remove the "\n" at the end
        content[x] = content[x].strip() #strip method is used to remove \n
        x=x+1                   # adds 1 to x to help stop the loop

    printBoard(content)

    move = selection()

    while move != "q" :
        row = (int(move[0]))-1
        column = (int(move[3])) -1

        content = autoFill(content, row, column)

        printBoard(content)

        move = selection()

def autoFill(board, rows, columns):

    if (board[rows][columns]) == 'X' :
        return (board)
    board[rows][columns] = ((board[rows][columns]).replace('O', 'X'))
    print(board)

    return (board)

这里是应该发生的事情的示例:

Please enter a filename: input.txt
OOOOOOXOOOO
OOOOOXOOOOO
OOOOXOOOOOO
XXOOXOOOOOO
XXXXOOOOOOO
OOOOOOOOOOO
Please enter a square to fill, or q to exit: 1, 1
XXXXXXXOOOO
XXXXXXOOOOO
XXXXXOOOOOO
XXXXXOOOOOO
XXXXOOOOOOO
OOOOOOOOOOO

但是当我运行它时。由于我的递归函数永远持续下去(直到运行时崩溃)

【问题讨论】:

您希望替换做什么?反而发生了什么?您为autoFill 函数提供了哪些输入? 你将board反弹到str.replace()返回值;一个新的字符串对象。您是否希望该函数返回整个棋盘? 所以这是一个充满 Os 和 Xs 的板,我希望替换功能将 O 更改为 X。 抱歉,我错误地提交了我的测试代码。但我只是想从列表中替换那个 1 索引。 那么仍然不清楚发生了什么以及您期望发生什么。如果可以,请向我们展示一个示例板(让它变小)以及调用函数时它会发生什么。 【参考方案1】:

我不确定您要做什么,但是,只有几个 cmets:

要从字符串末尾删除 任何\n 字符,您可以使用

string = string.rstrip('\n')

在您使用 replace 的行中,您尝试对矩阵的单个单元格 (board[rows][columns]) 执行替换,并且您正在将该单个单元格的替换结果分配给整个矩阵。我想你的意思实际上是:

board[rows][columns] = board[rows][columns].replace('O', 'X'))

编辑:既然你的单元格总是包含'O''X',为什么不简单地写:

board[rows][columns] = 'X'

board[rows][columns] = 'O'

取决于您希望它们包含的新角色?

编辑2: 顺便说一句,执行剥离部分的更 Pythonic 方式是:

content = [line.rstrip('\n') for line in content]

EDIT3:据我所知,您的问题是字符串是不可变的,我错误地认为您正在使用字符列表。要将您的板子转换为字符列表(因此是可变的),只需执行以下操作:

new_board = []
for line in board:
    new_line = [c for c in line]
    new_board.append(new_line)

【讨论】:

是的,我用那个更新了我的代码:),但我仍然无法替换那个特定的单元格。当我运行它时,单元格实际上并没有被替换:( 我编辑了我的答案,我不确定你为什么要replace() 而不是仅仅覆盖新字符。 我试过你说的,它给了我错误:'str'对象不支持项目分配。这就是我尝试替换的原因,因为 python 有一个内置的 str.replace() 方法 再次编辑,这应该可以解决它。此时replace 不应该工作,因为它是一种字符串方法,而您正在使用字符列表,但您应该能够按照board[i][j] = 'X' 的方式做一些事情。 我试图变得懒惰,只是在不创建列表的情况下工作。但我会尝试的。我认为这将使使用代码变得更加容易。

以上是关于为啥我无法在 python 中正确使用 str.replace() 方法 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

为啥此命令无法打印 Python 命令的正确退出代码?

为啥我的 python/pygame 应用程序没有正确弹出

为啥我的 SVG 在 IE1 或 /Edge 中无法正确显示?

为啥 NVM 使用不正确的 Python 版本?

为啥我无法在画布上正确绘制 [重复]

为啥我无法正确获取图像数据或无法将数据发送到服务器?