一定有更好的方法

时间:2016-10-17 22:22:10

标签: python modulo

在Python3中有更多惯用的方法来完成以下内容吗?

if i%1 == 0 and i%2 == 0 and i%3 == 0 and i%4 == 0 and i%5 == 0 and i%6 == 0 and i%7 == 0 and i%8 == 0 and i%9 == 0 and i%10 == 0 and i%11 == 0 and i%12 == 0 and i%13 == 0 and i%14 == 0 and i%15 == 0 and i%16 == 0 and i%17 == 0 and i%18 == 0 and i%19 == 0 and i%20 == 0:

我正在尝试找到可以被1到20之间的所有数字整除的最小正数。我不是在寻找新的解决方案。我正在寻找一种更简洁的方式来表达我正在做的事情。

3 个答案:

答案 0 :(得分:6)

allrange

一起使用any
if all(i % j == 0 for j in range(1, 21)): # python2 -> xrange(2, 21) 
   # do whatever

如果全部i % j == 0,它将返回 True 否则它将短路并返回 False 如果有剩余的i % j。此外,检查if i % 1是多余的,因此您可以从2开始。

或者说对话,检查 {{3}} i % j是否有余数。

if not any(i % j for j in range(2, 21)):

或者,如果您更喜欢功能

if not any(map(i.__mod__, range(2, 21)))

答案 1 :(得分:0)

你可以使用all函数结合列表推导 - 或者更好 - 生成器表达式:

if all(i%(1 + j) == 0 for j in range(20)):

答案 2 :(得分:0)

在while循环中使用for循环。

output$distPlot <- renderPlot({
if (input$predictor == "bin") {matrix(0,ncol=1, nrow=input$n) -> predictor; predictor[1:input$pos] <- 1}
if (input$predictor == "norm") {predictor <- matrix(rnorm(input$n,input$pred_mean, input$pred_sd),ncol=1,nrow=input$n)}
if (input$predictor == "user") {inFile <- input$predictor2; predictor <- as.matrix(read.delim2(inFile$datapath, header=F), ncol=1)}
....
data <- sim(input$n,input$coverage[1], input$coverage[2], predictor)
....
})