题目要求:用Python编写一个华容道小游戏。
所遇问题:输入7时不触发反应。且当游戏完成后程序无法识别完成并停止。觉得问题可能出在用**扩住的地方。判断条件和判断所放置的地方都有问题。求高人指点修改。急!!
下面是我的代码:
def main(tiles):
int_tiles = []
for x in tiles.split(","):
if x:
num = int(x)
else:
num = 0
int_tiles.append(num)
n = len(int_tiles)
size = int(n ** 0.5)
first_line = "┌───" + "─┬───" * (size - 1) + "─┐"
print(first_line)
for i in range(size):
row = ""
for j in range(size):
number = int_tiles[i * size + j]
if number == 0:
row_str = " "
elif number < 10:
row_str = " " + str(number) + " "
else:
row_str = " " + str(number) + " "
row += "│" + row_str
row += "│"
print(row)
if i != size - 1:
print("├───" + "─┼───" * (size - 1) + "─┤")
print("└───" + "─┴───" * (size - 1) + "─┘")
counter = 0
game=False
while game is not True:
user_input = input("Your move: ")
if user_input == "quit":
print(f"{user_input} is valid.")
break
elif not user_input.isdigit():
print(f"{user_input} is not valid. Try again.")
else:
user_input = int(user_input)
if user_input not in int_tiles:
print(f"{user_input} is not valid. Try again.")
else:
position_blank = int_tiles.index(0)
position_a = int_tiles.index(user_input)
position_blank_row = position_blank // size
position_blank_column = position_blank % size
position_a_row = position_a // size
position_a_column = position_a % size
if position_blank_row == position_a_row:
if position_blank_column - position_a_column == 1 or position_a_column - position_blank_column == 1:
print(f"{user_input} is valid.")
counter += 1
choice_tile = position_a
empty = 0
int_tiles[position_blank] = int_tiles[position_a]
int_tiles[position_a] = empty
new_board = ",".join([str(tile) for tile in int_tiles])
main(new_board)
**if sorted(int_tiles) == list(range(0, len(int_tiles))):
print(f"You won in {counter} moves. Congratulations!")
game=True**
else:
print(f"{user_input} is not valid. Try again.")
elif position_blank_column == position_a_column:
if position_a_row - position_blank_row == 1 or position_blank_row - position_a_row == 1:
print(f"{user_input} is valid.")
counter += 1
choice_tile = position_a
empty = 0
int_tiles[position_blank] = int_tiles[position_a]
int_tiles[position_a] = empty
new_board = ",".join([str(tile) for tile in int_tiles])
main(new_board)
**if sorted(int_tiles) == list(range(0, len(int_tiles))):
print(f"You won in {counter} moves. Congratulations!")
game=True**
main("1,2,3,4,5,6,7,8,9,10,12,,13,14,11,15")