R语言掷硬币循环问题:如何让coin_flip迭代更新且不重复输出
问题解决与代码修正
先给你修正后的可运行代码:
heads <- 0 tails <- 0 while (heads < 3 & tails < 3) { # 每次循环重新生成随机掷硬币结果 coin_flip <- sample(1:2, 1) print(coin_flip) # 使用比较运算符==,且用else if避免重复判断 if (coin_flip == 1) { print('Heads!') heads <- heads + 1 } else if (coin_flip == 2) { print('Tails!') tails <- tails + 1 } }
错误原因与解决说明
问题1:coin_flip值不更新
你仅在循环外初始化了一次随机值,循环内部没有重新调用sample()生成新结果,导致每次迭代都复用初始值。解决方式是把coin_flip <- sample(1:2, 1)移到while循环内部,让每次循环都生成新的随机数。问题2:同时输出Heads!和Tails!
你的if判断误用了赋值运算符<-而非比较运算符==:- 第一个
if (coin_flip <- 1)是将1赋值给coin_flip,表达式结果为真,会执行Heads的代码块; - 第二个
if (coin_flip <- 2)又将2赋值给coin_flip,表达式同样为真,所以Tails的代码块也会触发。
解决方式是把<-替换为比较用的==,同时用else if替代第二个if,确保同一轮循环只会执行其中一个分支。
- 第一个
内容的提问来源于stack exchange,提问作者Stabilo Boss
相关产品推荐
相关产品推荐

