創建一個國際象棋騎士移動驗證器函式,為提供的協調確定騎士是否可以這樣移動,即
Knight_validator('b1', 'a3') -> 真
Knight_validator('b1', 'b3') -> False
我的代碼看起來像這樣
def knight_validator(x1, x2, y1, y2):
x1 = {'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5, 'F': 6, 'G': 7, 'H': 8}
x2 = {'1', '2', '3', '4', '5', '6', '7', '8'}
y1 = {'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5, 'F': 6, 'G': 7, 'H': 8}
y2 = {'1', '2', '3', '4', '5', '6', '7', '8'}
dx = abs(x1- x2)
dy = abs(y1 - y2)
if abs(x1 - x2) == 2 and abs(y1 - y2) == 1 or abs(y1 - y2) == 2 and abs(x1 - x2) == 1:
print('True')
else:
print('False')
knight_validator('B', '1', 'A', '3')
如何解決?
uj5u.com熱心網友回復:
檢查這個:
def check_coord(a) -> bool:
if isinstance(a, int):
if 1 <= a <= 8:
return True
else:
if ord("A") <= ord(a) <= ord("H"):
return True
return False
def knight_validator(x1, y1, x2, y2) -> bool:
for a in (x1, y1, x2, y2):
if not check_coord(a):
return False
if abs(ord(x1) - ord(x2)) == 1 and abs(y1 - y2) == 2:
return True
if abs(ord(x1) - ord(x2)) == 2 and abs(y1 - y2) == 1:
return True
return False
print(knight_validator("B", 1, "A", 3))
print(knight_validator("B", 1, "B", 3))
print(knight_validator("U", 5, "H", 10))
此解決方案還檢查輸入資料的正確性。
uj5u.com熱心網友回復:
用這個:
x1=0
x2=0
y1=0
y2=0
def knight_validator(x1, x2, y1, y2):
x1 = {'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5, 'F': 6, 'G': 7, 'H': 8}
x2 = {'1', '2', '3', '4', '5', '6', '7', '8'}
y1 = {'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5, 'F': 6, 'G': 7, 'H': 8}
y2 = {'1', '2', '3', '4', '5', '6', '7', '8'}
dx = abs(x1- x2)
dy = abs(y1 - y2)
if abs(x1 - x2) == 2 and abs(y1 - y2) == 1 or abs(y1 - y2) == 2 and abs(x1 - x2) == 1:
print('True')
else:
print('False')
knight_validator('B', '1', 'A', '3')
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/368310.html
標籤:Python
上一篇:我無法從while回圈中退出
