Мне нужна помощь в Python, чтобы проверить границы списка - PullRequest
2 голосов
/ 14 февраля 2012

Поэтому я пытаюсь написать код, который определяет, где фигуры размещаются на доске, и если на доске уже есть фигуры, она будет знать, перекрываются ли они.

Итак, теперь у меня есть код, который принимает пользовательский ввод, чтобы получить длину и длину платы.

Затем, предполагая, что пользователь знает размер доски, он предлагает ввести любые фигуры, уже имеющиеся на доске.

Так что, если бы доска была 5 х 4 и имела форму L, она бы выглядела так:

 [1,1,0,0,0,
  1,0,0,0,0,
  1,0,0,0,0,
  0,0,0,0,0]

Но вы бы ввели в [1,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0]

Затем вам будет предложено ввести форму, начиная с позиции по умолчанию, которая будет в верхнем правом углу.

При вводе фигур доска будет выглядеть так:

 [1, 2, 3, 4, 5,
  6, 7, 8, 9, 10,
  11,12,13,14,15,
  16,17,18,19,20]

Таким образом, форма L будет иметь координаты по умолчанию:

[1,2,6,11]

Затем он спрашивает, где находится следующее доступное место, так что, если вы собираетесь добавить L на доску, где L уже существует. Следующее доступное место будет 3 следующим образом:

 [1,1,X,0,0,
  1,0,0,0,0,
  1,0,0,0,0,
  0,0,0,0,0]

Таким образом, программа выводит новые координаты фигуры, которые будут:

[3,4,8,13]

Но мне нужна помощь в проверке ошибок на переполнение. Другими словами, если кусок сходит с доски, программа напечатает ошибку.

Например: если я хочу поместить L-образную часть в 5, координаты выведут [5,6,11,16], и это неправильно.

Как это должно выглядеть:

 [0,0,0,0,X,X
  0,0,0,0,X,
  0,0,0,0,X,
  0,0,0,0,0]

Но что происходит:

 [0,0,0,0,X,
  X,0,0,0,0,
  X,0,0,0,0,
  X,0,0,0,0]

Как я могу сделать так, чтобы печать не удалась, если кусок сходит с доски? Я уже сделал так, чтобы вы не могли вводить отрицательные координаты и чтобы вы не могли сделать кусок дальше, чем самая большая координата.

Вот мой код:

user1 = input ('Enter the length of the board: ')
#Length of the board

user2 = input ('Enter the width of the board: ')
#Width of the board

user3 = user1 * user2
#Area of the board

board = input ('Enter in the contenets of the board, as a list (i.e. [0,1,....,0,0]): ')
#Use list to enter in contents of board if any

listA = input ('Enter the shape, in terms of default coordinates (i.e. [1,2,6,11]): ')
#Enter in shape of piece you are placing on board

if listA[-1] > user3:
    print ('Failed!')
    #Piece fails if end goes off board

else:
    if listA[0] < 1:
        print ('Failed!')
        #Piece fails if begining goes off board

    else:
        c = int(input ('Enter the next free slot: '))
        #Enter where the piece fits next

        a = int(listA[0])
        #First coordinate of piece

        b = [((x + c) - a) for x in listA]
        #Finds location of moved piece

        overlap = False
        #Boolean to check for piece overlap

        for y in b:
            if board[y - 1] == 1:
                overlap = True
                #Overlap is true if piece ovelaps
                #another piece already on the board

            else:
                overlap = overlap
                #If no overlapping occurs then continue

        if overlap == True:
            print ('Failed!')
            #Fails if piece overlaps

        else:
            print b
            #prints the coordinates of the moved piece

Ответы [ 2 ]

0 голосов
/ 14 февраля 2012

Я согласен с другими, что это пахнет домашней работой.Так вот подсказка.Подумайте о том, что заставляет фигуру исчезать с доски.Пользователь вводит значения по умолчанию, которые вы проверяете;Вы знаете, что они на доске.Но затем часть сдвигается на некоторое количество пробелов (x) вправо, а на некоторое количество пробелов (y) вниз.Если ширина фигуры по умолчанию (w) плюс x больше ширины доски, то вы знаете, что она ушла с доски вправо.И если высота фигуры по умолчанию (h) плюс y больше высоты доски, то вы знаете, что она снизилась с доски внизу.

Таким образом, вы должны сделать три вещи: определить x и y, определить w и h, а затем сравнить x + w с user2 и y + h с user1,

0 голосов
/ 14 февраля 2012

Невозможно сделать только со списком новых координат;Вы также должны знать, как эти координаты связаны .Как только вы это сделаете, вы можете увидеть, проходит ли край по краю доски, проверив переход pos % WIDTH с 0 на 1 или наоборот.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...