2

我写了我的第一行(在 SO 的帮助下):

import rhinoscriptsyntax as rs

obj = rs.GetObject("Select a curve", rs.filter.curve)
maxd = input("max offset: ")
a = input("first offset: ")
b = input("next offset: ")


if rs.IsCurve(obj):
    i=0
    while i < maxd:
        rs.OffsetCurve( obj, [0,0,0], -i )
        i += a
        rs.OffsetCurve( obj, [0,0,0], -i )
        i += b

现在,我尝试通过插入偏移输入列表来更进一步。但似乎我最后得到了一个无限循环。此外,第一个rs.OffsetCurve()似乎运行了两次,或者i没有随着第二个rs.OffserCurve()while 循环的第一次运行而更新。

import rhinoscriptsyntax as rs

obj = rs.GetObject("Select a curve", rs.filter.curve)
maxd = input("max offset: ")
a = input("first offset: ")

offlist = []

while True:
    b = input("next offset or 0 for exit: ")
    offlist.append(b)
    if b == 0:
        break

if rs.IsCurve(obj):
    i=0
    while i < maxd:
        rs.OffsetCurve( obj, [0,0,0], -i )
        i = a
        c = len(offlist)
        k = 0
        while k != c:
            rs.OffsetCurve( obj, [0,0,0], -i )
            i = offlist[k]
            k += 1
4

2 回答 2

2

while i < maxd:i = a循环的每个步骤一起,maxd并且a在两个循环中都没有改变,可能会导致这种行为。

顺便说一句,我会考虑以这样一种方式命名您的变量,以便您或任何其他开发人员只需看一眼就可以理解这里发生了什么。while此外,您可以考虑在这种情况下使用嵌套循环是否是一个好主意。

于 2018-05-04T15:00:46.183 回答
0

您忘记更新变量 a 的值,因此忘记了外部 while 循环的计数器 i 。我通常做的是手动跟踪循环内每个计数器的值进行几次迭代以调试我的代码。

于 2018-05-04T15:15:28.103 回答