提前感谢您的意见。
我今天开始学习 Python,因为我想在 DynamoBIM (Revit) 中定义自定义 Python 节点,以便在 BIM 中没有预定义/适合我的任务的节点时更加灵活。
PythonScript 从输入节点获取输入,这些节点是IN[i]
.
在我的例子中,我使用 2 个bool
值 ( IN[0]
, IN[3]
)、 1x str
IN[1]
、 1xfloat
IN[2]
和 1x list
IN[4]
。
通过 PythonScript 处理输入后,它会返回一个结果 ( OUT
),该结果可用于进一步的任务。
我试图在每个列表项之前附加一个前缀,如果并在每个列表项更改之前IN[0] = True
添加一个值。IN[2]
结果显示在观察节点中。
如果IN[3] = False
(列表未被替换)我得到了想要的结果:
在 的情况下IN[3] = True
,自定义列表不会得到调整(不添加前缀,不添加值):
(集成)PythonScript 的代码:
listing = [0,1,2,3,4,5,None,"null", "", "Text"]
praefix = IN[1]
add = IN[2]
if IN[3]:
listing = IN[4]
if IN[0]:
for x in range(len(listing)):
if isinstance(listing[x], int):
listing[x] = praefix + str(listing[x] + add)
OUT = listing
else:
for x in range(len(listing)):
listing[x] = listing[x] + add
OUT = listing
Python 代码(可在在线编译器中编译)
listing = [0,1,2,3,4,5,None,"null", "", "Text"]
replacingList = [2,2,3,"Test",4] #IN[4]
boolPraefix = True #IN[0]
praefix = "Indexwert: " #IN[1]
add = 7 #IN[2]
customList = True #IN[3]
replacingList = [2,2,3,"Test",4] #IN[4]
if customList:
listing = replacingList
if boolPraefix:
for x in range(len(listing)):
if isinstance(listing[x], int):
listing[x] = praefix + str(listing[x] + add)
print(listing)
else:
for x in range(len(listing)):
listing[x] = listing[x] + add
print(listing)
我尝试使用 python 代码从在线编译器中的集成脚本重现该问题,但在这种情况下,计算出预期的结果:
['Indexwert: 9', 'Indexwert: 9', 'Indexwert: 10', 'Test', 'Indexwert: 11']
使用https://www.programiz.com/python-programming/online-compiler/编译
预期结果应该是:
我目前完全不知道为什么在线编译器代码和集成的 PythonScript 之间会有不同的结果。