gpt4 book ai didi

r - 如何在运行时向用户询问一个整数,如果没有得到则再次递归询问?

转载 作者:行者123 更新时间:2023-12-04 13:35:52 25 4
gpt4 key购买 nike

我正在尝试编写一些执行以下所有操作的代码:

  • 在运行时,通过一个实际问题(例如“你有多少台 PC?”)询问用户输入一个整数。
  • 检查用户是否给出了整数类型的对象或可以无误地强制转换为该对象的对象。此步骤必须不需要任何类型的 grep (例如,这会使 this solution 无效)。
  • 如果输入不是整数,不要给出任何警告或错误,而是提出一个重复的新问题,直到他们确实给出一个整数(例如,问“再试一次?”直到给出一个整数)。
  • 输出这个整数。

  • similar的解决方案 questions似乎是使用 scanreadlines .我已经排除了 scan因为喜欢抛出自己的错误信息,需要 print的帮助提出问题,如果给出一个无效的输入,即使你告诉它只尝试一个输入,也会要求另一个输入(例如,如果你给它一堆字母, scan(n = 1,quiet = TRUE) 会要求另一个输入)。我发现 readlines基本令人满意,但因为 readlines将其输入视为字符串,我一直无法写出 trycatch满足要求 #3 的块。

    我有哪些选择?看起来我错过了一个简单的解决方案。

    最佳答案

    我们可以使用递归函数或 whilerepeat循环检查答案是否为数字

    f1 <- function(question){


    flag <- TRUE
    while(flag) {
    out <- readline(paste0(question, "\n"))
    out1 <- type.convert(out, as.is = TRUE)
    if(is.numeric(out1)) flag <- FALSE
    }


    out1
    }


    v1 <- f1('how many PCs')
    how many PCs
    not sure
    how many PCs
    you asked the wrong person
    how many PCs
    #2432
    how many PCs
    20


    v1
    #[1] 20

    或者另一种选择是使用 as.integer 转换为整数.如果有任何不是整数/数字的值,它将返回 NA。使用 is.na作为逻辑条件,我们可以更改 if在上面的代码行

    关于r - 如何在运行时向用户询问一个整数,如果没有得到则再次递归询问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62107959/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com