【问题标题】:Enforcing a condition in a For Loop在 For 循环中强制执行条件
【发布时间】:2020-05-01 13:43:06
【问题描述】:

我正在尝试在 For 循环中强制执行 IF 条件,但它似乎在这里不起作用。我这里有一个 sn-p 代码:

for iterate in range(N):
    for rows in range(rows):
        vector1 = function1(x, rows)
        x = vector1
        vector2 = function2(z, rows)
        z = vector2
        if a <= angle_between(x, z) <= b:    
            break

这里,“function1”、“function2”和“angle_between”都是已经定义好的函数。在每个循环中同时调用“function1”和“function2”,我想要 ForLoop 将在 If 语句处停止的情况。但是,当我运行我的代码并检查“angle_between”的最终输出时,它不在 (a, b) 的范围内。我在这里的实施错了吗?请提供任何指导。

【问题讨论】:

  • 你能显示rowsN包含哪些数据吗?
  • 这些只是随机数据

标签: python-3.x for-loop if-statement


【解决方案1】:

你唯一的突破内循环。试试这个:

done = False
for iterate in range(N):
    for rows in range(rows):
        vector1 = function1(x, rows)
        x = vector1
        vector2 = function2(z, rows)
        z = vector2
        if a <= angle_between(x, z) <= b:    
            done = True
            break
    if done:
        break

【讨论】:

    【解决方案2】:

    要在不使用变量的情况下从内部循环中跳出两个循环,您可以在内部循环之外放置一个 else 子句并继续直到 if 语句为真。

    for iterate in range(N):
        for rows in range(rows):
            vector1 = function1(x, rows)
            x = vector1
            vector2 = function2(z, rows)
            z = vector2
            if a <= angle_between(x, z) <= b:    
                break
        else:
            continue
        break
    

    【讨论】:

    • 感谢 Jab 指出这一点。但是,我仍然没有得到(a,b)之间的“angle_between”值。可能出了什么问题?
    【解决方案3】:

    如果不知道您的任何变量的值、您试图通过循环实现什么或您的函数包含什么,就很难判断出了什么问题。这可能是很多事情。

    可能是您没有跳出第二个 for 循环。可能是你的函数逻辑有缺陷。

    也可能是您正在改变 rows 的值,然后在 for 循环的下一次迭代中重用它。

    例子:

    rows = 5
    N = 5
    for iterate in range(N):
        print(rows)
        for rows in range(rows):
    

    for rows in range(rows): 的第一次迭代将是 5。 在循环 5 次之后,rows 的值将是 4,它会在下次启动你的内部 for 循环时使用它。

    【讨论】:

    • 感谢 Axe319。我的目标基本上是将函数应用于所有行,一个接一个,直到最后一行。但是,这可能不会产生所需的结果(IF 条件),并且需要重新开始该过程。我希望这能更好地解释这些函数只是进行简单计算的简单函数,例如: def function1(x, i): vector = x + (y[i] - A[i, :] @ x)*(A[i] /(norm(A[i])**2)) 返回向量A,y是已经定义好的矩阵和向量
    猜你喜欢
    • 2017-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    相关资源
    最近更新 更多