【问题标题】:In a For Loop in Python 3, is the right boundary inclusive or exclusive?在 Python 3 的 For 循环中,右边界是包含还是排除?
【发布时间】:2018-12-25 04:26:31
【问题描述】:

我在 Python 中运行这段代码:

#Finding prime numbers
for n in range(2, 10):
   for x in range(2, n):
      if n % x == 0:
        print(n, 'equals', x, '*', n//x)
        break
# loop fell through without finding a factor
   else:
        print(n, 'is a prime number')

输出如下:

2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3

让我们假设以下迭代正在进行:

n=3, x=n

n%x 的值是多少?

如果是== 0那为什么我们没有得到

print(n, 'equals', x, '*', n//x)

【问题讨论】:

  • 你试过了吗?而你确实似乎明白这一点。这不就是9 equals 3 * 3 吗?
  • 我要的是 n=3 而不是 n=9。整个问题是我不知道括号排除了最后一个数字。现已解决。

标签: python python-3.x jupyter-notebook modulo


【解决方案1】:

% 运算符获取余数。所以如果你做 5%2,结果相当于如果你把 5 除以 2 得到 2,剩下 1,所以 5%2 => 1。

【讨论】:

    【解决方案2】:

    如果你的意思是n%n 的值是多少,它是零,因为 n 总是可以被 n 整除,而 % 是除法余数运算符。这就是为什么您的代码中的循环将 x 从 2 变为 n - 1(这就是 range(2, n) 所做的 - 它的最后一个参数不包含在内)。

    【讨论】:

      【解决方案3】:

      n % n 的值为 0。在您给定的示例中,n=3x=n,声明

      print(n, 'equals', x, '*', n//x)
      

      会打印

      3 equals 3*1
      

      您的代码的问题在于它从未将n 与自身进行比较。看看你的循环:

      for n in range(2, 10):
          for x in range(2, n):
              ...
      

      第一个循环是从 2 到 10,独占,即 2 到 9。第二个循环是从 2 到 n独占。如果n == 2,则意味着第二个循环根本没有运行。如果n == 3,则第二个循环仅在x = 2 上运行一次。等等。

      【讨论】:

      • 谢谢!需要研究排他和包含括号。
      猜你喜欢
      • 2020-09-01
      • 2018-06-26
      • 2013-08-07
      • 2021-04-08
      • 1970-01-01
      • 2016-06-20
      • 2013-10-24
      • 2012-09-21
      • 1970-01-01
      相关资源
      最近更新 更多