循环时随机翻转硬币

问题描述 投票:0回答:2

我正在尝试制作一个简单的抛硬币程序。 一旦“正面”或“反面”达到 3,抛硬币 while 循环就会关闭。 使用sample()中的随机整数生成1或2以添加到正面或反面的计数中是有意义的。

问题是 coin_flip 在 while 循环的后续迭代中似乎没有改变。 所以我的问题是:我怎样才能做到:

  1. coin_flip 实际上在 while 循环的后续迭代中发生变化
  2. 我没有收到两个“正面”!和 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}
} 
r random coin-flipping
2个回答
0
投票

您有 2 个问题:

  1. 仅当您为其分配新值

    coin_flip
    时,
    coin_flip <- ...
    的值才会更改。唯一一次分配随机值是在循环之前。如果您想每次通过循环获得一个新的随机值,则需要在循环内部进行。 相关,我们使用

    <-
  2. 来赋值,使用
  3. ==

    来测试相等性。您在

    <-
    语句中使用
    if()
    ,因此您正在分配一个值。我们需要在那里使用
    ==
    来测试是否相等。
    您的代码,
    if (coin_flip <- 1)

    coin_flip <- 1; if(coin_flip)

    相同,并且

    if()
    会将任何非零数字视为
    TRUE
    
    
    解决这些问题,我们得到这个:

  4. heads <- 0 tails <- 0 while (heads < 3 & tails < 3) { coin_flip <- sample(1:2, 1) print(coin_flip) if (coin_flip == 1) { print ('Heads!') heads = heads + 1 } if (coin_flip == 2) { print ('Tails!') tails = tails + 1} } # [1] 2 # [1] "Tails!" # [1] 1 # [1] "Heads!" # [1] 2 # [1] "Tails!" # [1] 1 # [1] "Heads!" # [1] 1 # [1] "Heads!"

如果我们想简化一点,我会说当我们可以直接从“正面”和“反面”中采样时,没有理由对数字进行采样。对于有关代码如何运行的单行注释,我通常也更喜欢

message()
 而不是 
print()

。这将使我们删除一些不必要的部分,如下所示:

heads <- 0
tails <- 0
while (heads < 3 & tails < 3) {
  coin_flip <- sample(c("Heads", "Tails"), 1)
  message(coin_flip)
  if (coin_flip == "Heads") {
    heads = heads + 1
  }
  if (coin_flip == "Tails") {
    tails = tails + 1
  }
} 
# Heads
# Tails
# Heads
# Heads
这里更简洁一点,使用命名向量作为结果而不是两个单独的对象。这让我们完全跳过 

if()
 语句,使用结果作为名称来增加正确的值。

results = c("Heads" = 0, "Tails" = 0) while (all(results < 3)) { coin_flip <- sample(c("Heads", "Tails"), 1) message(coin_flip) results[coin_flip] <- results[coin_flip] + 1 }

    

这是一个用 Python 编写的虚拟硬币翻转的简单代码:

0
投票

© www.soinside.com 2019 - 2024. All rights reserved.