我正在开发一个N-皇后模拟使用pyplay。
class NQ:
def __init__(self,n):
self.size = n
self.columns = [] * self.size
self.places = 0
self.backtracks = 0
def place(self, startRow=0):
if len(self.columns) == self.size:
return self.columns
else:
for row in range(startRow, self.size):
if self.isSafe(len(self.columns), row) is True:
self.columns.append(row)
self.places += 1
return self.place()
else:
lastRow = self.columns.pop()
self.backtracks += 1
return self.place(startRow=lastRow + 1)
def isSafe(self, col, row):
for threatRow in self.columns:
threatCol = self.columns.index(threatRow)
if row == threatRow or col == self.columns.index(threatRow):
return False
elif threatRow + threatCol == row + col or threatRow - threatCol == row - col:
return False
return True
def process(n):
nqueens = NQ(n)
nqueens.place(0)
return nqueens.columns
另外,我在另一个文件中有一个pygame程序,用于绘制棋盘,该棋盘将列表作为输入,并相应地放置它们。如果我想显示皇后的移动,如何从递归code
过程动态传递列表,以便可以看到确切的回溯过程。非常感谢。
如果同一目录中有两个文件,则可以执行以下操作:
>
文件1。派克
def function1(list):
print(list)
文件2。派克
import file1
file1.function1(['hallo'])
您可以为此使用import
。
如果我理解正确,您只需要将基本python类型的列表传递给另一个python进程,然后从这里调用该进程。您可以使用任何序列化和反序列化的方式。
一个简单的方法是(如果你的列表真的只包含基本类型,如int、浮动、字符串...)使用JSON
import json
import subprocess
list_to_transfer = [1,2,"sdf",5.6]
list_as_string = json.dumps(list_to_transfer)
subprocess.call("other_executable \"%s\"" % list_as_string, shell=True)
在另一个过程中,通过doin反序列化
import json
import sys
list_from_other_process = json.loads(sys.argv[1])
我没有尝试过那段代码,也许它没有运行,但是主要的想法应该很清楚。
若你们想知道递归函数内部发生了什么,你们可以添加外部函数作为参数,然后你们可以在递归内部使用它来打印算法的当前状态或者在棋盘上画皇后。
在示例中,我使用show_colums()
在每次self.place()
运行时打印self.columns
。
档案:nq。派克
class NQ:
def __init__(self,n, callback): # added callback
self.size = n
self.columns = []
self.places = 0
self.backtracks = 0
self.callback = callback # added callback
def place(self, startRow=0):
self.callback(self.columns) # added callback
if len(self.columns) == self.size:
return self.columns
else:
for row in range(startRow, self.size):
if self.isSafe(len(self.columns), row) is True:
self.columns.append(row)
self.places += 1
return self.place()
else:
lastRow = self.columns.pop()
self.backtracks += 1
return self.place(startRow=lastRow + 1)
def isSafe(self, col, row):
for threatRow in self.columns:
threatCol = self.columns.index(threatRow)
if row == threatRow or col == self.columns.index(threatRow):
return False
elif threatRow + threatCol == row + col or threatRow - threatCol == row - col:
return False
return True
文件:main。派克
from nq inport NQ
def show_columns(x):
print "columns:", x
def process(n):
nqueens = NQ(n, show_columns)
nqueens.place(0)
return nqueens.columns
process(8)
部分结果
columns: []
columns: [0]
columns: [0, 2]
columns: [0, 2, 4]
columns: [0, 2, 4, 1]
columns: [0, 2, 4, 1, 3]
columns: [0, 2, 4, 1]
columns: [0, 2, 4, 1, 7]
columns: [0, 2, 4, 1]
我试图找出如何通知另一个组件状态更改。假设我有3个组件——pp.jsx、Header.jsx和SidebarPush.jsx我只是想用onclicka切换一个类。 因此,标题。jsx文件将有2个按钮,点击时将切换状态为真或假。另外两个组件是应用程序。jsx和Header。jsx需要了解这些状态的变化,以便在这些状态发生变化时可以切换类。
我是selenium初学者,只是想把webDriver传递给另一个类,但没有成功。程序应该打开浏览器(“Google”)并在主类中键入一些单词,在第二个类中应该按下“Google”按钮。 以下是我的主要课程: 这是我想从主驱动程序中使用的类。 当我运行它时,它对我说: 传递:main失败:printOnScreen java.lang.NullPointerException 我做错了什么?谢谢高
问题内容: 我正在使用python flask框架。我编写了一个需要一个参数的装饰器,该参数是动态的。 我的装饰器如下所示,将获得一个密钥,并使用该密钥从redis获取数据。 而且我有一个使用这种装饰器的类,像这样的代码 如您所见,我的装饰器需要一个名为的参数,然后像这样传递密钥 将获得城市的ID,如果一切正常,密钥将如下所示 但我得到了错误: 我很困惑,在烧瓶中,如何将动态参数传递给装饰器? 谢
问题内容: 当提供一些参数时,我想使我的python脚本从命令行运行。但是,参数之一应该是特定于脚本一个片段的选项列表。字符串解析是在逗号分隔“命令行列表”字符串之后实际构造列表的唯一方法吗?如果是这样,您将如何处理? 示例:-details = [‘name’,’title’,’address’] 问题答案: 程序: 命令行: 输出: 此代码段将执行短或长命令切换(例如或),并在切换到Pytho
就像标题一样,如果我按下列表视图中的按钮,我希望将按钮的位置发送到另一个活动 我不知道你想检查我做了什么。 我把按钮按下时的方法,这个方法在list适配器里面
问题内容: [‘a’,’a’,’b’,’c’,’c’,’c’] 至 和 问题答案: x=[‘a’,’a’,’b’,’c’,’c’,’c’] >>> map(x.count,x) [2, 2, 1, 3, 3, 3] >>> dict(zip(x,map(x.count,x))) {‘a’: 2, ‘c’: 3, ‘b’: 1} >>>