如何返回包含替换字符串元素的列表?Python



我在下面的任务中遇到了一些问题:用户输入一些单元格,比如"XXXOO__O_";。我把它打印出来,然后像这样(有点像矩阵/板(:

---------
| X X X |
| O O _ |
| _ O _ |
---------

则用户输入从1到3的两个坐标(例如2 3(。之后我做一些检查,如果cell是"0"_"我用";X〃;然后用更换的元件再次印刷电路板。

print("Enter cells:")
cells = input()
print("---------")
print("|", cells[0], cells[1], cells[2], "|")
print("|", cells[3], cells[4], cells[5], "|")
print("|", cells[6], cells[7], cells[8], "|")
print("---------")
while True:
coord = input("Enter the coordinates:").split()
strng = "".join(coord)
is_0_3 = 0
if strng.isdigit() == True:
for c in coord:
if int(c) > 3 or int(c) <= 0:
is_0_3 = 1
if strng.isdigit() == True and len("".join(coord)) == 2:
index = (((int(coord[0]) - 1) * 3) + (int(coord[1]) + 2)) - 3 #turning usser`s coordinates #into list index
print("index", index)
mtrx = []
for y in range(len(cells)):
mtrx.append(cells[y])
is_occupied = 0
for i, cell in enumerate(mtrx):
if i == index:
print("i==index", i)
if mtrx[index] == "X" or mtrx[index] == "O":
is_occupied = 1

if strng.isdigit() == False:
print("You should enter numbers!")
elif len("".join(coord)) != 2:
print("You should enter 2 numbers!")
elif is_0_3 == 1:
print("Coordinates should be from 1 to 3!")
elif is_occupied == 1:
print("This cell is occupied! Choose another one!")
else:
print("ma[i] before", mtrx[index])
mtrx[i] = mtrx[index].replace("_", "X")
print(mtrx[i])
print("i", i)
new_mtrx = []
print("---------")
for i in range(0, 8, 3):
row = [mtrx[i], mtrx[i + 1], mtrx[i + 2]]
new_mtrx.append(row)
print(f"| {mtrx[i]} {mtrx[i + 1]} {mtrx[i + 2]} |")
print("---------")
break 

问题是最后一个else中的i总是8,并且无论用户输入什么坐标,具有坐标3 3的元素总是被替换。我不明白为什么。。。你能解释一下我该怎么修吗?对于用户输入的2 3索引=5,单元格为'_',但在最后一个for中,坐标为3 3的元素被替换,而不是坐标为2 3的元素。我需要用用户输入的坐标替换元素

在上一个else语句中,您需要再次枚举矩阵。这对我有效。

else:
for i, cell in enumerate(mtrx):
index == i
print("ma[i] before", mtrx[i])
mtrx[index] = mtrx[index].replace("_", "X")
print(mtrx[i])
print("i", i)
new_mtrx = []
print("---------")
for i in range(0, 8, 3):
row = [mtrx[i], mtrx[i + 1], mtrx[i + 2]]
new_mtrx.append(row)
print(f"| {mtrx[i]} {mtrx[i + 1]} {mtrx[i + 2]} |")
print("---------")
break 

我会保持简单,并在这里使用基本的字符串操作:

def print_board(inp):
print("---------")
lines = re.findall(r'.{3}', inp)
lines_out = ["| " + x[0] + " " + x[1] + " " + x[2] + " |" for x in lines]
for line_out in lines_out:
print(line_out)
print("---------")
inp = "XXXOO__O_"
print_board(inp)

此打印:

---------
| X X X |
| O O _ |
| _ O _ |
---------

最新更新