gpt4 book ai didi

python - 返回函数结果而不更改 if 语句中的列表项

转载 作者:行者123 更新时间:2023-12-04 07:24:25 25 4
gpt4 key购买 nike

预先感谢您的意见。
我今天开始学习 Python,因为我想在 DynamoBIM (Revit) 中定义自定义 Python 节点,以便在 BIM 中没有预定义/适合我的任务的节点时更加灵活。
PythonScript 从输入节点获取输入,输入节点是 IN[i] .
就我而言,我使用 2 bool值 ( IN[0] , IN[3] ), 1x str IN[1] , 1x float IN[2]和 1x list IN[4] .
通过 PythonScript 处理输入后,它返回一个结果 ( OUT ),可用于进一步的任务。
如果 IN[0] = True,我试图在每个列表项前面附加一个前缀并添加一个值 IN[2]到每个列表项,在它改变之前。结果显示在观察节点中。

如果是 IN[3] = False (列表没有被替换)我得到了想要的结果:
enter image description here
如果是 IN[3] = True ,自定义列表,没有得到调整(没有添加前缀,没有添加值):
enter image description here

(集成)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/

预期结果应该是:
enter image description here
我目前不知道为什么在线编译器代码和集成的 PythonScript 之间会有不同的结果。

最佳答案

我以前在使用 dynamo 和 python 时遇到了一些问题,在大多数情况下我发现最好的做法是使用 OUT仅在代码末尾出现一次。
我拿了你的 sample 并修改了它,试试吧。
我添加了一个空列表,它将用作已处理列表的容器,并将其分配给输出

listing = [0,1,2,3,4,5,None,"null", "", "Text"]
#Empty List to use as Output
NewListing =[]
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)

NewListing = listing

else:

for x in range(len(listing)):
listing[x] = listing[x] + add

NewListing = listing

OUT NewListing
并且不要忘记在 Dynamo 内的 Python 节点中查看您的缩进。

关于python - 返回函数结果而不更改 if 语句中的列表项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68298963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com