从Python到R的Ifelse函数

2024-05-07 14:00:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我看了this video并写下了代码。 代码应在以除法出现的重复小数周围加括号。 今天我试着把它从Python翻译成R,但是我对ifelsewhilefunction的知识并没有我所希望的那么好。 下面你可以看到我已经尝试过的步骤以及我已经走了多远,但是我现在需要帮助来完成下面的“while命令”部分。你知道吗

rep_dec = function(num,den){
  neg = FALSE
  if (den == 0){
    return("Undefined")
  } else if (num == 0){
    return("0")
  } else if (num*den < 0){
    neg = TRUE
  } else if (num%%den == 0){
    return(as.character(num/den))
  } 
numerator = abs(num)
denominator = abs(den)
paste("",(numerator%/%denominator),".")

results = list(0)
while (TRUE){
 remainder = numerator %% denominator
 numerator = remainder * 10
 quotient  = numerator %/% denominator
 if ([numerator,quotient]%!in% results){

 }

[视频中的Python代码:]

def repeating_decimals(num,den):

    if den == 0:
        "Undefined"
    if num == 0:
        "0"
    neg = False    
    if num*den < 0:
        neg = True
    if num % den == 0:
        return str(num / den)

    numerator = abs(num)
    denominator = abs(den)

    output = ""
    output += str(numerator // denominator)
    output += "."
    print(output)

    num_q = []
    while True:
        rem = numerator % denominator
        if rem == 0:
            for element in num_q:
                output+= str(element[-1])
            break
        numerator = rem * 10
        q = numerator // denominator
        if [numerator, q] not in num_q:
            num_q.append([numerator, q])
        elif [numerator, q] in num_q:
            ind = num_q.index([numerator, q])
            for element in num_q[:ind]:
                output+=str(element[-1])
            output+= "("
            for element in num_q[ind:]:
                output+= str(element[-1])
            output+=")"
            break
    print(output)

repeating_decimals(1,7)

如果有人能帮我把这段Python代码翻译成R代码,我会对更复杂的函数和下一步有更多的了解 我想找到一个解决方案,在数字前面加一个“-”,看看我是否正确地得到了ifelse语句的加法。你知道吗


Tags: 代码inoutputreturnifabselementelse
1条回答
网友
1楼 · 发布于 2024-05-07 14:00:40

在R中,模采用%%的形式,这样代码就可以工作了。你知道吗

rep_dec = function(num,den){
  neg = FALSE
  if (den == 0){
    return("Undefined")
  } else if (num == 0){
    return("0")
  } else if (num*den < 0){
    neg = TRUE
  } else if (num%%den == 0){
    return(as.character(num/den))
  } 
  numerator = abs(num)
  denominator = abs(den)
  output=paste0("",(numerator%/%denominator),".")

  num_vect=c()
  quo_vect=c()

  while (TRUE){
    remainder = numerator %% denominator
    numerator = remainder * 10
    quotient  = numerator %/% denominator

    if(remainder==0)
    {
      for(q in quo_vect)
      {
        output=paste0(output,q)
      }
      break
    }
    position <- which(num_vect==numerator & quo_vect==quotient)
    if ( length(position)==0 ){
      num_vect=c(num_vect,numerator)
      quo_vect=c(quo_vect,quotient)
    }
    else
    { 
      position=position[1]
      for (element in quo_vect[1:position])
      {
        output=paste0(output,element)
        output=paste0(output,"(")
        for (element in quo_vect[position:length(quo_vect)]){
          output=paste0(output,element)
        }
        output=paste0(output,")")
      }
      break
    }
  }
  return(output)
}

rep_dec(33,4) #"8.25"

rep_dec(20,4) #"5"

rep_dec(10,3) #"3.3(3)"

这应该或多或少做你需要的,因为我不能测试,可能有一些打字错误。为了学习R,我鼓励您查看我使用的函数的文档。与python的主要区别在于我使用了thwo向量num_vectquo_vect,而不是python中的数组。实际上,array的数组在R中不存在(我可以使用数据框而不是矩阵)。你知道吗

相关问题 更多 >