簡體   English   中英

為什么我的“isValidChessBoard”代碼中的兩個變量計數都在增加,來自“使用 Python 自動化無聊的東西”的第 5 章?

[英]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 == 12各自評估為它們自己的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM