请参阅查找给定两个数字下限和上限之间的素数的 Python 代码:
\nlower = 3\nupper = 15\n\nprint("Prime numbers between", lower, "and", upper, "are:")\n\nfor num in range(lower, upper + 1):\n\n for i in range(2, num):\n if (num % i) == 0:\n break\n else:\n print(num)\nRun Code Online (Sandbox Code Playgroud)\nPython输出:
\nlower = 3\nupper = 15\n\nprint("Prime numbers between", lower, "and", upper, "are:")\n\nfor num in range(lower, upper + 1):\n\n for i in range(2, num):\n if (num % i) == 0:\n break\n else:\n print(num)\nRun Code Online (Sandbox Code Playgroud)\nJulia 中几乎类似的代码给出了错误的输出。请参阅下面的 Julia 代码:
\nlower = 3\nupper = 15\nprintln("Prime numbers between ", lower, " and \xe2\x80\x9c, upper, " are:\xe2\x80\x9d)\nfor num in lower:upper \n for i in 2: num-1\n if (num % i) == 0\n break \n else\n println(num)\n break\n end\n end\nend\nRun Code Online (Sandbox Code Playgroud)\n朱莉娅输出:
\nPrime numbers between 3 and 15 are:\n3\n5\n7\n11\n13\nRun Code Online (Sandbox Code Playgroud)\n显然,9 和 15 不是素数。为什么 Python 代码给出正确的输出而 Julia 代码却不能。有什么方法可以使用相同的算法逻辑来修复它吗?
\nBog*_*ski 15
这是我将使用的代码,它根据您的请求保持相同的算法逻辑(我以这种方式编写此代码,因为循环内的条件不仅有效而且读取自然:“范围中的任何数字除以2:num-1或num打印num”):
julia> lower = 3
3
julia> upper = 15
15
julia> println("Prime numbers between $lower and $upper are:")
Prime numbers between 3 and 15 are:
julia> for num in lower:upper
any(i -> num % i == 0, 2:num-1) || println(num)
end
3
5
7
11
13
Run Code Online (Sandbox Code Playgroud)
根据 Julia 对您问题的评论,您没有循环else子句for。然而,使用该any函数与您的代码保持相同的逻辑,因为它是一个短路函数(达到与breakfor 循环相同的效果)。
如果我的代码中有任何不清楚的地方,请告诉我。
编辑:
我将重写代码来解释它是如何工作的。
首先是||部分。它利用了算子的短路||行为。所以在第一层,这可以重写为:
julia> lower = 3
3
julia> upper = 15
15
julia> println("Prime numbers between $lower and $upper are:")
Prime numbers between 3 and 15 are:
julia> for num in lower:upper
iscomposite = any(i -> num % i == 0, 2:num-1)
if !iscomposite
println(num)
end
end
3
5
7
11
13
Run Code Online (Sandbox Code Playgroud)
现在,正如所评论的那样,any也进行了短路,因此它相当于编写:
julia> lower = 3
3
julia> upper = 15
15
julia> println("Prime numbers between $lower and $upper are:")
Prime numbers between 3 and 15 are:
julia> for num in lower:upper
iscomposite = false
for i in 2:num-1
if num % i == 0
iscomposite = true
break
end
end
if !iscomposite
println(num)
end
end
3
5
7
11
13
Run Code Online (Sandbox Code Playgroud)