Есть ли способ увеличить цикломатическую емкость входной переменной

#python #cyclomatic-complexity

#python #цикломатическая сложность

Вопрос:

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

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

 while while_statement == 3:
  X_variables = input('where do you place your X player1. {use (X , Y)}. ')
  if X_variables == '(1 , 1)':
    game = [[1 , 0 , 0],
      [0 , 0 , 0],
      [0 , 0 , 0]]
    print('|' , 'X' , '|' , ' ' , '|' , ' ' , '|')
    print('-------------')
    print('|' , ' ' , '|' , ' ' , '|' , ' ' , '|')
    print('-------------')
    print('|' , ' ' , '|' , ' ' , '|' , ' ' , '|')
  elif X_variables == '(1 , 2)':
    game = [[0 , 0 , 0],
      [1 , 0 , 0],
      [0 , 0 , 0]]
    print('|' , ' ' , '|' , ' ' , '|' , ' ' , '|')
    print('-------------')
    print('|' , 'X' , '|' , ' ' , '|' , ' ' , '|')
    print('-------------')
    print('|' , ' ' , '|' , ' ' , '|' , ' ' , '|')
  

Я ожидаю, что этот код продолжит работу с игрой, но фактическими результатами будет ошибка в инструкции ввода X_variables.

Комментарии:

1. цикломатическая сложность не связана с входной переменной

2. Я получаю это из входной переменной. вот в чем проблема. больше ничего не происходит, и поэтому, если бы я мог увеличить его, я мог бы продолжить работу с остальными результатами.

3. Если вы хотите очистить код. Создайте класс для представления состояния игры (здесь переменная game ) и определите __str__ для этого класса, который возвращает строку, представляющую вид игры для печати

4. цикломатическая сложность: это количественная мера количества линейно независимых путей в исходном коде программы. Можете ли вы объяснить, что именно вы хотите здесь увеличить?

5. проверьте ответ

Ответ №1:

Ваш код может быть очищен до следующего для гибкости с точки зрения ввода. Код предполагает, что входные данные являются действительными, возможно, вы захотите обработать исключения позже

 class Board:
  def __init__(self,count):
    self.count = count
    self.game = [[0 for _ in range(count)] for _ in range(count)]

  def __repr__(self):
    line = "n" "- "*self.count "n"
    return line.join(["|".join([ 'X' if y == 1 else ' ' for y in x ]) for x in self.game])

  def place(self,x,y):
    self.game[x][y] = 1


.
.
.
board = Board(5)
.
.
.
while while_statement == 3:
  row,col = map(int,tuple(input("Input here:(format row,col)").split(',')))
  board.place(row,col)
  print(board)
  

Комментарии:

1. что именно происходит. Я не вижу, что я пробовал. Я немного запутался в том, что такое class board.

2. Вы не можете скопировать вставить ее как таковую. Доска представляет игру, последние 4 строки делают то, что делает ваш цикл while Доска — это доска для крестиков-ноликов. Дело в том, что вам не нужно иметь оператор if для каждого индекса

3. вы можете создать экземпляр Board , скажем, board = Board(5) и попробовать board.place(1,2) и т.д. И попробовать распечатать board

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

5. вы можете принять мой ответ как правильный, нажав на галочку рядом с ответом слева. Спасибо