【问题标题】:Include upper bound in range()在 range() 中包含上限
【发布时间】:2010-05-07 08:21:14
【问题描述】:

如何在 range() 函数中包含上限?我不能加 1,因为我的 for 循环看起来像:

for x in range(1,math.floor(math.sqrt(x))):
    y = math.sqrt(n - x * x)

但据我了解,它实际上是1 < x < M 我需要1 < x <= M 添加1 将完全改变结果。 我正在尝试将我的旧程序从 C# 重写为 Python。这就是它在 C# 中的样子:

for (int x = 1; x <= Math.Floor(Math.Sqrt(n)); x++)
    double y = Math.Sqrt(n - x * x);
  • 两者都不。 range 给你1 &lt;= x &lt; M
  • math.ceil 呢?

标签: python


【解决方案1】:

只需在 range 函数的第二个参数中添加一个:

range(1,math.floor(math.sqrt(x))+1)

你也可以使用这个:

range(math.floor(math.sqrt(x)))

然后在循环中添加一个。然而,前者会更快。

作为附加说明,除非您使用的是 Python 3,否则您应该使用 xrange 而不是 range,以提高习惯用法/效率。更惯用的是,您也可以调用int 而不是math.floor

【讨论】:

  • 尝试 (1 in range(math.floor(math.sqrt(1))) 或 (2 in range(math.floor(math.sqrt(2)))) 的真值在这两种情况下都会返回 false。1 和2 不被视为这些范围的一部分
【解决方案2】:

为什么你不能简单地在range 调用的上限上加一个?

此外,您似乎想在第一行引用n,即:

for x in range(1,math.floor(math.sqrt(n)) + 1):

...假设您希望具有与 C# sn-p 相同的行为。

【讨论】:

    猜你喜欢
    • 2017-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多