我在做一个简单的抛硬币程序。一旦“正面”或“反面”达到3,则抛硬币while循环关闭。使用sample()中的随机整数生成1或2来添加到正面或反面的计数中是有意义的。
问题是,在while循环的后续迭代中,coin_flip似乎没有改变。所以我的问题是我怎样才能做到:
- coin_flip实际上在while循环的后续迭代中改变
1.我没有收到两个“头”!'和'Tails'在while循环的每次迭代中
感谢罗汉
这是我的代码
heads <- 0
tails <- 0
coin_flip <- sample(1:2, 1)
print(coin_flip)
while (heads < 3 & tails < 3) {
coin_flip
print(coin_flip)
if (coin_flip <- 1) {
print ('Heads!')
heads = heads + 1 }
if (coin_flip <- 2) {
print ('Tails!')
tails = tails + 1}
}
1条答案
按热度按时间6yt4nkrj1#
你有两个问题
coin_flip
的值只有在您为其分配新值coin_flip <- ...
时才会更改。唯一一次你分配一个随机值是在**循环之前。如果你想在每次循环中得到一个新的随机值,那就需要在循环中发生。1.相关的,我们使用
<-
赋值,==
测试相等性。您在if()
语句中使用了<-
,因此您正在赋值。我们需要使用==
来测试是否相等。您的代码
if (coin_flip <- 1)
与coin_flip <- 1; if(coin_flip)
相同,if()
将把任何非零数字视为TRUE
。修复这些,我们得到这个:
如果我们想简化一点,我会说,当我们可以直接从“头”和“尾”中采样时,没有理由对数字进行采样。对于有关代码如何运行的单行注解,我通常更喜欢
message()
而不是print()
。这将允许我们删除一些不必要的位,如下所示:这里更简洁一点,使用一个命名向量作为结果,而不是两个单独的对象。这使我们可以完全跳过
if()
语句,使用结果作为名称来递增正确的值。