【问题标题】:go back to a for loop from an if loop in python从python中的if循环返回for循环
【发布时间】:2019-07-31 12:52:08
【问题描述】:

该函数应该加载一个列表并打印列表中第一个和最后一个素数的总和。我已经写了它,以便创建一个新列表,并且我的想法是只附加素数 - 如果它不是素数,它应该回到那个 for 循环的开头。 我希望我的函数在

之后回到 for 循环的开头
if L[i] % j == 0:

因为我只希望将素数附加到 y,但我不认为在这里做'break'是正确的事情,因为当我调用该函数时,我一直在打印整个列表。我试过“break”、“pass”、“continue”和无限循环(尽管我可能没有正确地做到这一点)。请帮忙???

def first_plus_last_prime(L):
    y = []
    for i in range(len(L)):

        if L[i] < 2:
            break
        for j in range(2, L[i]):
            if L[i] % j == 0:
                break
        y.append(L[i])

    print(y)
    print(y[0])
    print(y[-1])
    t = y[0] + y[-1]
    return t

【问题讨论】:

  • 只是一个建议:有codereview.stackexchange.com。修复代码后,考虑将其发布到那里。除了实现本身的问题外,还有很多其他方面可以改进。

标签: python for-loop if-statement infinite-loop break


【解决方案1】:

你可以使用 else 语句:

def first_plus_last_prime(L):
    y = []
    for i in range(len(L)):

        if L[i] < 2:
            break

        # Look for prime
        for j in range(2, L[i]):
            if L[i] % j == 0:
                break
        else:
            y.append(L[i])

    print(y)
    print(y[0])
    print(y[-1])
    t = y[0] + y[-1]
    return t

感谢@UlrichEckhardt 提供信息。 https://docs.python.org/3/tutorial/controlflow.html#break-and-continue-statements-and-else-clauses-on-loops

【讨论】:

  • 我只是回答你的问题,如果数字不是素数,该怎么办。但是为什么当你找到一个 0 或 1 时你会打破循环呢?如果这样做,您将不会查看整个列表。
  • Python 允许在 for 循环后使用 else。更优雅和完全是为这种情况发明的。 docs.python.org/3/tutorial/…
  • @UlrichEckhardt 感谢您提供的信息,我编辑答案以显示这种方式。
猜你喜欢
  • 2015-12-30
  • 2011-07-05
  • 2015-02-24
  • 2021-12-17
  • 1970-01-01
  • 2021-07-30
  • 1970-01-01
  • 2013-10-13
  • 2013-05-10
相关资源
最近更新 更多