[英]Why are both variable counts increasing on my 'isValidChessBoard' code from Ch5 of 'Automate The Boring Stuff with Python'?
我正在使用 Python 自動化無聊的東西的第 5 章,並在本章末尾嘗試棋盤挑戰,您的程序應該收到一個描述棋盤的字典值,並檢查它是否有效。
我的代碼的第一部分檢查沒有一方有超過一個國王的作品,但是我遇到了第二部分的問題,它應該檢查沒有一方有超過 16 件。
當我運行代碼時,bPieceCount 和 wPieceCount 似乎都在串聯增加,所以如果代碼看到黑色塊,它會將 bPieceCount 和 wPieceCount 加 1。 第 28 行之后的代碼只是為了檢查它是否正常工作,一旦我完成了它的 rest,將在最終版本中取出。
謝謝你的幫助。
def isValidChessBoard(board):
#Check kings
bKingCount = 0
wKingCount = 0
for v in board.values():
if v == 'bking':
bKingCount = bKingCount + 1
if v == 'wking':
wKingCount = wKingCount + 1
if bKingCount != 1:
print('False')
elif wKingCount != 1:
print ('False')
else:
#Check nobody has more than 16 pieces
bPieceCount = 0
wPieceCount = 0
for v in board.values():
if v == 'bking' or 'bqueen' or 'brook' or 'bknight' or 'bbishop' or 'bpawn':
bPieceCount = bPieceCount + 1
if v == 'wking' or 'wqueen' or 'wrook' or 'wknight' or 'wbishop' or 'wpawn':
wPieceCount = wPieceCount + 1
if bPieceCount > 16 or wPieceCount > 16:
print('False')
print(wPieceCount)
print(bPieceCount)
else:
print ('Continue')
print(wPieceCount)
print(bPieceCount)
這些行:
if v == 'bking' or 'bqueen' or 'brook' or 'bknight' or 'bbishop' or 'bpawn':
bPieceCount = bPieceCount + 1
if v == 'wking' or 'wqueen' or 'wrook' or 'wknight' or 'wbishop' or 'wpawn':
wPieceCount = wPieceCount + 1
不要按預期工作,因為在這種情況下實現or
語句將始終為True
。
讓我們舉一個更簡單的例子:
example_num = 1
example_bool = a == 1 or 2 # Evaluates to True!
原因是example_num == 1
和2
各自評估為它們自己的 boolean 語句。 由於 python 中的任何非空值的計算結果為 True,因此您的 if 語句也是如此。
要解決您的問題,您可以使用in
關鍵字:
if v in ('bking', 'bqueen', 'brook', 'bknight', 'bbishop', 'bpawn'):
bPieceCount = bPieceCount + 1
if v in ('wking', 'wqueen', 'wrook', 'wknight', 'wbishop', 'wpawn'):
wPieceCount = wPieceCount + 1
它將檢查 v 是否是這些值中的任何一個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.