Перемещение элемента в элементе списка только на один пробел на основе пользовательского ввода

#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