как перестать перезаписывать номер индекса в списке python, который уже записан один раз? - PullRequest
0 голосов
/ 29 мая 2020

У меня есть list с порядковым номером от 0 до 5. Я говорю пользователю вводить позицию, где они хотят отметить ('X') в списке, а затем распечатывать список каждый раз, когда пользователь вводит порядковый номер. Я хочу, чтобы пользователь вводил только один раз в индексный номер списка, и если пользователь попытается перезаписать записанное значение в списке, я хочу дать пользователю сообщение в качестве ввода 'вы не можете go там, попробуйте еще раз в другом положении ». Я хочу продолжать вводить данные до тех пор, пока пользователь не введет значение в незаписанной позиции в списке.

Я пытался сделать это в OOP, поскольку я практикую OOP. Я делаю доску, а затем отображаю доску с помощью метода print_Board (). В методе input_Value () я попытался запустить его в течение некоторого времени l oop и разбить l oop, когда все позиции заполнены ... также использовал ошибку try catch ... которая проверяет, должно ли входное значение имеют только порядковые номера от 1 до 6.

class Overwrite:

    list = ['.', '.', '.', '.', '.', '.']

    def print_Board(self):
        print(self.list[0:3])
        print(self.list[3:6])

    def input_Value(self):
        while True:
            try:
                self.position = input('enter a number between 1 to 6:')     # input a value
                if self.position not in ['1', '2', '3', '4', '5', '6']: # checking if the number is in range(1 to 6) or not
                    print('please try again a number between 1 to 6')
                    continue
                self.position = int(self.position) - 1  # putting -1 so that user input is different than
                self.list[self.position] = 'X'
                self.print_Board()
            except IndexError:
                print('please try again a number between 1 to 6:')
            except ValueError:
                print('please try again a number between 1 to 6:')
            else:
                if '.' not in self.list:  # it will stop the program when all the positions are filled
                    break

    def gameplay(self):
        self.print_Board()
        self.input_Value()

Ответы [ 3 ]

1 голос
/ 29 мая 2020

Самый простой способ, который я могу придумать, - это включить другой оператор выбора:

if self.list[self.position] == 'X':
    print("you can't go there please try again in different position")
    continue

Это проверит, был ли выбранный индекс уже изменен на 'X', если да, он будет перезапустите в то время как l oop. В противном случае он будет продолжать через ваш код, чтобы изменить позицию на 'X'

Хотя для общей практики будьте осторожны с использованием ключевых слов pythons в качестве имен переменных (self.list)

1 голос
/ 29 мая 2020

Вы можете определить новый класс списка с помощью другого метода __setitem__.

class ListNoOverwrite(list):

    def __setitem__(self, key, value):
        if super().__getitem__(key) == 'X':
            print("Sorry, you can't do that")
            return 1
        else:
            super().__setitem__(key, value)
            return 0
1 голос
/ 29 мая 2020

Проверьте, равен ли этот элемент списка X, и если да, распечатайте сообщение и продолжите ввод l oop.

self.position = int(self.position) - 1
if self.list[self.position] == 'X':
    print('you already entered that position, please try again')
    continue
else:
    self.list[self.position] = 'X'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...