循环只打印最后一个值

Posted

技术标签:

【中文标题】循环只打印最后一个值【英文标题】:Loop only prints last value 【发布时间】:2022-01-23 17:36:02 【问题描述】:

我有一些在 Abaqus 中使用的工作 python 代码,但我没有设法从中创建一个循环。有人可以帮我解决这个相当简单的问题吗?我想为不同的 SetsScrews 打印 x、y、z 坐标(称为 partxcord 等)。它只打印最后一个 SetsScrews。我错过了什么?提前谢谢你。

SetsScrews = ["Screw['T6_R']", "Screw['T7_R']", "Screw['T8_R']"]

for i in range(len(SetsScrews)):
   # Select nodeset
   PartLevel = mdb.models[modelname].rootAssembly.sets[SetsScrews[i]]
   print('ParTLEVEL=', PartLevel)

   # Calculate the amount of nodes in nodeset
   numNodes = len(PartLevel.nodes)

  # Create lists to write data to
  partlabel=[]
  partxcord=[]
  partycord=[]
  partzcord=[]

  for curNode in PartLevel.nodes:
        partlabel.append(curNode.label)
        partxcord.append(curNode.coordinates[0])
        partycord.append(curNode.coordinates[1])
        partzcord.append(curNode.coordinates[2])
        print('numNodes=', numNodes)

【问题讨论】:

第 5 行的 mdb 是什么?请确保您也有正确的缩进 【参考方案1】:
partlabel=[]
partxcord=[]
partycord=[]
partzcord=[]

这些应该在循环之外初始化,也许用螺丝名制作一个字典,然后在那里添加这些列表

或者你的缩进也可能是个问题

【讨论】:

【参考方案2】:

如果你只想打印坐标,那么你只需要在内循环结束后打印。此外,您可以存储所有零件的坐标。请参考以下代码:

SetsScrews = ["Screw['T6_R']", "Screw['T7_R']", "Screw['T8_R']"]
# create the list to save all coordinates
aLabels,axcoords,aycoords,azcoords = [],[],[],[]
for i in range(len(SetsScrews)):
    # Select nodeset
    PartLevel = mdb.models[modelname].rootAssembly.sets[SetsScrews[i]]
    print('ParTLEVEL=', PartLevel)
    
    # Calculate the amount of nodes in nodeset
    numNodes = len(PartLevel.nodes)

    # Create lists to write data to
    partlabel,partxcord,partycord,partzcord=[],[],[],[]
    print('Screw= ', SetsScrews[i])
    for curNode in PartLevel.nodes:
        partlabel.append(curNode.label)
        partxcord.append(curNode.coordinates[0])
        partycord.append(curNode.coordinates[1])
        partzcord.append(curNode.coordinates[2])
        # you can print it here...
        print(curNode.label,curNode.coordinates[0],curNode.coordinates[1],curNode.coordinates[2])
    
    # or you can print all data here and save it
    print('partlabel= ', partlabel)
    print('partxcord= ', partxcord)
    print('partycord= ', partycord)
    print('partzcord= ', partzcord)
    aLabels.append(partlabel)
    axcoords.append(partxcord)
    aycoords.append(partycord)
    azcoords.append(partzcord)

现在在for 循环的末尾,您拥有aLabels, axcoords, aycoords, azcoords 这些列表中的所有坐标。

【讨论】:

以上是关于循环只打印最后一个值的主要内容,如果未能解决你的问题,请参考以下文章

Python循环只打印数据帧的最后一个循环作为输出到Excel中

使循环一次只打印一个值[重复]

使用 for 循环找到最小值

For 循环只给出数组的最后一个值

Python for 循环仅将最后一个列表作为值附加

如果条件满足,则递减数组并打印一个值