gpt4 book ai didi

python - 如何检查列表中的错误? [问题未解决]

转载 作者:行者123 更新时间:2023-12-03 08:36:50 24 4
gpt4 key购买 nike

嗨,我有一个允许用户选择坐标的程序,当用户编写一个不存在的坐标或已经采用的坐标时,我在错误检查方面遇到了问题。我的程序是一个Memory tile游戏,坐标和游戏板是在一个名为Board的类中构建的。

class Board:
def __init__(self, A):
self.A = A
self.list_gameboard, self.word_size = words(A) #self.list_gameboard is a list of (A ** 2 / 2) words witch is (* 2) to get pairs
self.matched = []
self.reset()

def convert_coords(self, coord):
alphabet = list("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
c1 = alphabet.index(coord[0])
c2 = int(coord[1]) - 1
return c1, c2

def turn(self, coord):
c1, c2 = self.convert_coords(coord)
self.hidden_gameboard[c1][c2] = self.list_gameboard[c1][c2]
return self.list_gameboard[c1][c2]
...并且继续
直到...
def main():
done = False
board = Board(A)

board.show()
print("=", "====" * A, sep = "")

while not done:
try:
coord1 = input("Choose first coord: ").capitalize()
except(IndexError, ValueError):
print("You did not write a correct coordinate")
if coord1 not in board.list_gameboard[]:
print("You did not choose a coordinate that exists")
if coord1 in board.matched[]:
print("You chose a coordinate that is already taken")

word1 = board.turn(coord1)
board.show()
print("=", "====" * A, sep = "")
try-except部分是我尝试解决此问题的尝试。
需要说明的是:A是电路板的矩阵大小(nxn),看起来像这样:
Choose gameboard size (only even numbers): 4
1 2 3 4
A --- --- --- ---
B --- --- --- ---
C --- --- --- ---
D --- --- --- ---
=================
我目前收到此错误:
if coord1 not in board.list_gameboard[]:
^

SyntaxError: invalid syntax

最佳答案

问题是您正在try编写不会导致异常的东西(或至少不会引起您感兴趣的东西!):您要检查异常的部分是使用已采用或不存在的坐标的部分。
重写该部分的最简单方法可能是:

coord = input("Choose first coord: ").capitalize()
if coord1 not in board.list_gameboard:
print("You did not choose a coordinate that exists")
if coord1 in board.matched:
print("You chose a coordinate that is already taken")
但是您应该真正考虑要在这里实现的目标。例如,我认为将这种健全性检查添加为类的内部方法更有意义(即,当用户调用 board.turn方法时,我将执行内部检查),让外部代码最终捕获异常并进行处理那。
例如,该类可能如下所示:
class Board:
...
def _sanity_check(self, coord):
if coord not in self.list_gameboard:
raise ValueError("Coordinates {} do not exists".format(coord))
if coord in self.matched:
raise ValueError("Coordinates {} already taken".format(coord))

def turn(self, coord):
self._sanity_check(coord)
c1, c2 = self.convert_coords(coord)
self.hidden_gameboard[c1][c2] = self.list_gameboard[c1][c2]
return self.list_gameboard[c1][c2]
然后使用类似于以下内容的方法调用 turn方法
while True:
try:
board.turn(input("Choose first coord: ").capitalize())
except ValueError as e:
print(e)
else:
break
它使用 while循环包装输入法,一旦用户插入有效坐标,该输入法便会中断。
实际上,我对游戏的运行情况有一个更清晰的了解,我认为您可能会想出一种更好的方法来处理此问题,这很可能不是最聪明的方法(并且可以肯定的是,您可以为特定情况定义更好的异常(exception))。

关于python - 如何检查列表中的错误? [问题未解决],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65781593/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com