【问题标题】:Is there a way to increase the cyclomatic capacity of an input variable有没有办法增加输入变量的圈容量
【发布时间】:2019-04-09 11:49:29
【问题描述】:

我正在制作一个井字游戏,我的代码比我的输入语句可以处理的更复杂。

这是针对我班上的一个项目,我已经做了一些研究。对我来说没有任何意义,所以我来到了这里。我试图让它变得不那么复杂,但没有什么能绕过我的头脑。下面的代码只是结果的一小部分。

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 输入语句中的错误。

【问题讨论】:

  • 圈复杂度与输入变量无关
  • 我从输入变量中得到它。这就是问题所在。它来自那里没有其他东西,所以如果我可以增加它,我可以继续其他结果。
  • 如果要清理代码。创建一个表示游戏状态的类(此处为游戏变量)并在该类上定义__str__,该类返回表示可打印游戏视图的字符串
  • 圈复杂度:它是通过程序源代码的线性独立路径数量的定量度量。你能解释一下你到底想在这里增加什么吗?
  • 查看答案

标签: python cyclomatic-complexity


【解决方案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)

【讨论】:

  • 到底发生了什么。我不明白我尝试了什么。我对什么是类板有点困惑。
  • 不能这样复制粘贴。 Board 代表一个游戏,最后 4 行执行您的 while 循环所做的事情 Board 是井字棋棋盘。关键是您不需要为每个索引都有 if 语句
  • 你可以创建一个 Board 实例,比如 board = Board(5) 并尝试 board.place(1,2) 等并尝试打印板
  • 好的,谢谢。我怎么说这个回答了??我对这个景象有点陌生。
  • 您可以通过单击左侧答案附近的勾号来接受我的答案作为正确答案。谢谢
猜你喜欢
  • 1970-01-01
  • 2020-03-31
  • 1970-01-01
  • 2020-08-07
  • 2021-01-18
  • 1970-01-01
  • 1970-01-01
  • 2020-03-18
  • 2022-07-01
相关资源
最近更新 更多