[英]Python debugging simple script
因此,作為我正在編寫的井字游戲腳本的一部分,我有一個“ win checker”作為其輸入:
這對於我遇到的問題並不是很重要,但是我認為某些背景可能會有所幫助。 這是代碼:
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.