这是我第一次在这里发帖,如果发布错误,请告诉我。我在这里阅读了很多主题和其他网站上的信息。他们都说字符串是不可变的,我理解但是我试图在自动填充功能中使用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
但是当我跑的时候。因为我的递归函数永远存在(直到运行时崩溃),所以没有一个Os改为X.
答案 0 :(得分:1)
我不确定你要做什么,但是,只是几条评论:
要从字符串末尾删除任意个\n
个字符,您可以使用
string = string.rstrip('\n')
在您使用替换的行上,您尝试在矩阵的单个单元格(board[rows][columns]
)上执行替换,并将该单个单元格上的替换结果分配给整个矩阵。我认为你的意思实际上是:
board[rows][columns] = board[rows][columns].replace('O', 'X'))
编辑:由于您的单元格始终包含'O'
或'X'
,为什么不简单地写:
board[rows][columns] = 'X'
和
board[rows][columns] = 'O'
取决于您希望它们包含的新字符?
EDIT2: 正如旁注所示,更多的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)