#python
#python
Вопрос:
приведенный ниже код был реализацией игры между буквой «a» может перемещаться только вправо, а буква b «b» может перемещаться влево
list1=[‘a’,’a’,’a’, ‘ ‘,’b’,’b’,’b’]
fr=int(input("Start Position"))
to=int(input("End Position"))
if list1[fr-1]=='a' and list1[to-1]==' ':
if list1[fr-1]=='b'and list[to-1]==' '
#swap code
list1[fr-1],list1[to-1]=list1[to-1],list1[fr-1]
Правила игры
- нельзя поменять местами более одного пробела
одним пробелом я имею в виду: исходный список: list1=[‘a’,’a’,’a’, ‘ ‘,’b’,’b’,’b’]
если пользователь вводит from:1
to:4
, преобразование будет выглядеть следующим образом, однако это не должно выполняться, и должно появиться сообщение об ошибке
[‘ ‘,’a’,’a’,’a’,’b’,’b’,’b’]
-> # этот код не должен выполняться, поскольку он не является одноразовым
это то, что может произойти
Таким образом, он может либо в этом формате :
[‘a’,’a’,’a’, ‘ ‘,’b’,’b’,’b’]
# исходный список
пользователь вводит
from:3
to:4
Для этого
[‘a’,’a’,’ ‘,‘a’,’b’,’b’,’b’]
то же правило применяется для frog ‘b’
другой сценарий, который может произойти, — это [‘a’,’a’,’a’, ‘ ‘,’b’,’b’,’b’]
# original list
пользователь вводит from:6
to:4
[‘a’,’a’,’a’, ‘b‘,’b’,’ ’,’b’]
Итак, может кто-нибудь, пожалуйста, помочь в том, как это сделать
Комментарии:
1. что вы подразумеваете под «ограничением перемещения мест, которых не может быть больше одного»? также ваш второй пример неясен, пожалуйста, уточните
2. Я обновил свои рассуждения, надеюсь, вы понимаете это лучше
3. Ваша проблема не ясна (по крайней мере, для меня). если у вас есть ссылка на вашу проблему, было бы лучше указать это вместо этого описания.
4. @Maaddy Я обновил столько деталей, сколько смог, надеюсь, теперь вы понимаете это лучше
5. Пожалуйста, не вандализируйте свои собственные сообщения. Когда вы публикуете здесь, вы предоставляете SO право распространять контент в соответствии с CC-by SA 4.0. Любой вандализм будет отменен.
Ответ №1:
Я дал ответ на это в предыдущем вопросе, который вы задали.Вы не прилагаете никаких усилий и не следите за ответами на вопросы, которые вы задаете.Вероятно, это ваше домашнее задание или часть домашнего задания, и вы просто ждете решения.Я надеюсь, что вы поделитесь своими работами, а затем зададите вопросы, это может быть лучше для вашего улучшения.
Я снова делюсь своим ответом, потому что, возможно, это может помочь другим, и предыдущий вопрос был удален.Я надеюсь, что этот ответ сработает.
Пожалуйста, поделитесь своей работой, прежде чем задавать вопросы в следующий раз, и следуйте своему вопросу и их ответам, иначе вы не сможете решить свою проблему.
puzzle =["a","a","a"," ","b","b","b"]
## dont forget your input will start 0
## because you will pick an index
def move(puzzle):
move_index = int(input("enter an index for move right"))
for i in puzzle:
if move_index < len(puzzle):
if puzzle[move_index 1] == " " and puzzle[move_index] == "a":
puzzle[move_index],puzzle[move_index 1] = puzzle[move_index 1 ],puzzle[move_index] ## if right index is free,move
return puzzle
if puzzle[move_index - 1] == " " and puzzle[move_index] == "b" :
puzzle[move_index], puzzle[move_index - 1] = puzzle[move_index - 1], puzzle[move_index]
return puzzle
if puzzle[move_index - 2] == " " and puzzle[move_index-1] == "a" and puzzle[move_index] == "b":
puzzle[move_index], puzzle[move_index - 2] = puzzle[move_index - 2], puzzle[move_index]
return puzzle
if puzzle[move_index 2] == " " and puzzle[move_index 1 ] == "b" and puzzle[move_index] == "a" :
puzzle[move_index], puzzle[move_index 2] = puzzle[move_index 2], puzzle[move_index]
return puzzle
if move_index == len(puzzle): ## you can move last element only for your conditons
puzzle.append(puzzle.pop(move_index-1)) ## switch for last and first
puzzle.insert(0, puzzle.pop())
return puzzle ## updated puzzle
else:
return puzzle
def game():
is_game_continue = int(input("Do you want continue ? (1) Yes (2) No")) ## for enter new moves
return is_game_continue
while game() == 1: ## if user want continue
## you can add other options like return value != 1
current_puzzle = move(puzzle)
print(current_puzzle)
Комментарии:
1. в решении, которое вы предоставили, только целевые буквы перемещаются вправо, а не влево
2. Вы можете перемещаться влево только с помощью «B». Если условия в порядке.
Ответ №2:
У вас есть все идеи о правилах, поэтому я думаю, что вы можете закончить игру самостоятельно. Этот ответ может послужить вам ссылкой для объединения идей.
start_puzzle = ['a', 'a', 'a', ' ', 'b', 'b', 'b']
end_puzzle = ['b', 'b', 'b', ' ', 'a', 'a', 'a']
print(start_puzzle)
while start_puzzle != end_puzzle:
# -1 to get index
from_idx = int(input("Move from position: ")) - 1
to_idx = int(input("Move to position: ")) - 1
# positive step from left to right and negative step from right to left
step = to_idx - from_idx
if 0 <= from_idx < len(start_puzzle) and 0 <= to_idx < len(start_puzzle):
if start_puzzle[from_idx] == "a" and step < 0 or start_puzzle[from_idx] == "b" and step > 0:
print(f"'{start_puzzle[from_idx]}' cannot move backwards.")
elif start_puzzle[to_idx] != ' ':
print("Can only move to empty space.")
elif step > 2 or step < -2:
print("Cannot swap more than one space.")
else:
start_puzzle[from_idx], start_puzzle[to_idx] = start_puzzle[to_idx], start_puzzle[from_idx]
else:
print("Position out of range.")
print(start_puzzle)
if start_puzzle == end_puzzle:
print("You Won!!")
Результат теста:
['a', 'a', 'a', ' ', 'b', 'b', 'b']
Move from position: 1
Move to position: 8
Position out of range.
['a', 'a', 'a', ' ', 'b', 'b', 'b']
Move from position: 1
Move to position: 4
Cannot swap more than one space.
['a', 'a', 'a', ' ', 'b', 'b', 'b']
Move from position: 3
Move to position: 5
Can only move to empty space.
['a', 'a', 'a', ' ', 'b', 'b', 'b']
Move from position: 3
Move to position: 4
['a', 'a', ' ', 'a', 'b', 'b', 'b']
Move from position: 4
Move to position: 3
'a' cannot move backwards.
['a', 'a', ' ', 'a', 'b', 'b', 'b']
Move from position: 5
Move to position: 3
['a', 'a', 'b', 'a', ' ', 'b', 'b']
Move from position: 3
Move to position: 5
'b' cannot move backwards.
.
.
.
['b', 'b', 'b', 'a', ' ', 'a', 'a']
Move from position: 4
Move to position: 5
['b', 'b', 'b', ' ', 'a', 'a', 'a']
You Won!!
Ответ №3:
Вы не должны использовать from
в качестве переменной, поскольку это зарезервированное ключевое слово в python.
Возможно, это и является причиной вашей проблемы.
Комментарии:
1. но хорошо, допустим, я меняю его на
fr
то, что по-прежнему не соответствует условию once space