簡體   English   中英

Python調試簡單腳本

[英]Python debugging simple script

因此,作為我正在編寫的井字游戲腳本的一部分,我有一個“ win checker”作為其輸入:

  1. 代表位置的數字列表
  2. 誰開始了游戲

這對於我遇到的問題並不是很重要,但是我認為某些背景可能會有所幫助。 這是代碼:

import matplotlib.pyplot as plt
import math
import numpy as np
import random
import pdb
def win_checker(position_list, turn2):
    win_list1 = []
    win_list2 = []
    for bud in xrange(len(position_list)):
        if bud % 2 == 0:
            win_list1.append(position_list[bud])
            print win_list1
            if 1 and 2 and 3 in win_list1:
                return True
            if 4 and 5 and 6 in win_list1:
                return True
            if 7 and 8 and 9 in win_list1:
                return True
            if 1 and 4 and 7 in win_list1:
                return True
            if 2 and 5 and 8 in win_list1:
                return True
            if 3 and 6 and 9 in win_list1:  
                return True
            if 1 and 5 and 9 in win_list1:
                return True
            if 3 and 5 and 7 in win_list1:               
                return True
        elif bud % 1 == 0:
            win_list2.append(position_list[bud])
            print win_list2

            if 1 and 2 and 3 in win_list2:
                return True
            if 4 and 5 and 6 in win_list2:
                return True
            if 7 and 8 and 9 in win_list2:
                return True
            if 1 and 4 and 7 in win_list2:
                return True
            if 2 and 5 and 8 in win_list2:
                return True
            if 3 and 6 and 9 in win_list2:
                return True
            if 1 and 5 and 9 in win_list2:
                return True
            if 3 and 5 and 7 in win_list2:
                return True
    else:
        return False

然后,當我嘗試將腳本定位到某個位置時:

win_checker([5,1,3,2], 1)
[5]
[1]
[5, 3]
Out[57]: True

我不明白為什么輸出為True,如果有人可以解釋我所缺少的內容,那將對我非常有幫助

問題的細節:

and運算符僅適用於布爾值。 分配在操作 (記住乘法比加法的分配律?)。 你的表情

1 and 2 and 3 in win_list1

變成

bool(1) and bool(2) and bool (3 in win_list1)

對於n = 0,bool(n)為False ,其他所有條件均為True


立即修復:

亞歷克斯·霍爾已經給你了

更好地解決(也許):

將選擇的數組重新編號為魔術方塊:

6 7 2
1 5 9
8 3 4

現在,您要做的就是檢查三個所選職位的任何組合的總和是否為15。 您可以使用

itertools.combinations(win_list1, 3)

這會將檢查從18行減少到1行(如果您更喜歡這種可讀性,則減少為2-4行)。


額外問題:

萌芽的邏輯有點奇怪。 我確實了解轉數的奇/偶檢查:

if bud % 2 == 0:

但是,第二個

elif bud % 1 == 0:

對於任何整數均為True 百分號是模量運算符:除以mod並保留余數。 簡而言之,第二個總是正確的。 換個角度

另一個...

為什么不將win_list設為二維列表? 使用win_list [0]和win_list [1],因此您可以將它們的代碼折疊在一起。 你可以簡單地擁有

player = bud % 2
win_list[player].append(position_list[bud])
if any(sum(itertools.combinations(win_list[player], 3)) == 15):
    ...
if 1 and 5 and 9 in win_list2:

應該:

if 1 in win_list2 and 5 in win_list2 and 9 in win_list2:

在python中

>> 1 and 2 and 3 in win_list1

被評估為

>> 3 in win_list1

這是真的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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