如何修复具有多个返回错误的条件的while循环
Posted
技术标签:
【中文标题】如何修复具有多个返回错误的条件的while循环【英文标题】:How to fix a while loop with multiple conditions returning an error 【发布时间】:2013-04-04 04:32:28 【问题描述】:我编写了代码,要求用户输入“2012”或“2013”。然后我有一个while
循环检查,看看用户输入的是 2012 还是 2013。
输入有效年份的请求应该一直持续到用户输入有效数字为止。但是,我不断收到一个错误,即发生意外的“”。我找不到为什么会在我的代码中产生这样的错误。
代码如下:
yr_function <-function()
year_of_data <- as.numeric(readline("Is the year of concern 2012 or 2013? >>> "))
year_of_data = 0
While((year_of_data != 2012) | (year_of_data != 2013))
yr_function
if(year_of_data != (2012 | 2013),print("You must type either 2012 or 2013")
有错误生成读取:
Error: unexpected '' in "While((year_of_data != 2012) | (year_of_data != 2013))"
任何帮助将不胜感激。
【问题讨论】:
您的代码中填充了不正确的 R 代码,例如year_of_data != (2012 | 2013)
和 if(), print()
。还要计算你的左括号和右括号。不要听起来刻薄,但我建议您阅读一些 R 教程以了解正确的 R 语法是什么。
我可以帮助调试,但是这段代码看起来只是 R 代码,而实际上它不是正确的 R 代码。
我知道你们俩都是相当敏感的人,所以我希望我没有用一个问题伤害你的感情。具体来说,我觉得代码是正确的,特别是基于我在 R 中阅读的书籍。显然不是,所以我的误解是与问题中的 while 构造有关。为什么会在这里出错?因为就我的 if 而言,我可以在 if(condition, resultant) 中得到条件的结果,或者我可以写 if(condition)resultant。我确实明白,也许条件在 if 条件中写得不好。
恕我直言,这个问题得到的回应与它的质量不成比例,在游说让它不被删除后,我刚刚写了一个相当冗长的答案,当第 5 次接近投票时。我将不胜感激一些重新开放的投票。谢谢!
【参考方案1】:
您已经大致了解了这里的总体思路,但是您在几个地方都被简单的错误绊倒了。这是一个按照您的描述工作的带注释的版本:
yr_function <-function()
res <- as.numeric(readline("Is the year of concern 2012 or 2013? >>> "))
if (is.na(res))
res <- -1
res
您的第一个问题与范围有关。您在此函数内和 while
循环之前定义了 year_of_data
。但是在函数内部创建的变量不会引用while
循环之前的变量。它们存在于不同的环境中。所以我修改了这个函数,改为 return 用户输入的值。
您没有过多地讨论验证,这是一个很大的话题。我在这里添加了一个非常小的验证。基本上,如果用户输入的东西不能被合理地强制转换为数字,那么你会得到一个 NA 值,这将是一个令人头疼的问题。所以我只是检查它并在这种情况下返回 -1。这不是验证问题的完整解决方案。
year_of_data <- 0
while((year_of_data != 2012) & (year_of_data != 2013))
year_of_data <- yr_function()
if (!year_of_data %in% c(2012,2013))
print("You must type either 2012 or 2013")
else
break
这是固定的while
循环。首先,我修复了一些简单的语法错误(它是 while
而不是 While
等)。然后我将yr_function()
的结果分配给year_of_data
,这样我们就可以检查结果值并采取相应措施。
您对 if
条件 (year_of_data != (2012 | 2013)
) 的尝试在语法上不正确,因此我转而检查该值是否包含在向量 c(2012,2013)
中。
最后,if
后面是逗号,然后是 print 语句。逗号是另一个语法错误。因此,我在print
语句周围添加了大括号,并添加了一个else
子句,如果用户输入正确,则该子句会跳出while
循环。
更一般地说,您可能希望针对此类任务调查函数 menu
。它可能会使验证问题更容易处理。
【讨论】:
+1 以获得精心设计的答案,并花时间帮助别人。 谢谢乔兰。我真的很感谢你这样做。这很有帮助,可以帮助我稍微看下路。以上是关于如何修复具有多个返回错误的条件的while循环的主要内容,如果未能解决你的问题,请参考以下文章