【问题标题】:Starting out in Python Development: Coin-Tossing Loops从 Python 开发开始:抛硬币循环
【发布时间】:2023-04-11 11:22:01
【问题描述】:

下午好,

作为一个想要自学编程的人,我遇到了你。因此,我开始使用 Python。作为免责声明,我已经在该问题中搜索了一些 Python 掷硬币的示例,但我并没有真正理解以前的提问者提出的任何代码。

我的任务 我的教材要求我设计一个应用程序,可以将虚拟硬币翻转 100 次,然后打印结果。我的想法是使用一个无限循环,当抛硬币达到 100 时爆发,然后打印结果。

我还没有完全做到这一点,而且我没有发现我所写内容中的错误。它似乎实现了 100 次翻转,但随后只打印出 50 次正面/反面;因此我的错误在计数逻辑的某个地方?

任何解释(记住我是初学者,而不是白痴!)都会得到我的感谢和支持

感谢阅读

# Exercise 3.2
# Heads and Tails coin flip

#import random
import random

#declare variables
heads = 0
tails = 0
cointoss = 0
coinresult = random.randint(1,2)

#start the loop
while True:
    cointoss +=1

    #end the loop if cointoss is greater than 100
    if cointoss > 100:
        break
    if coinresult == 1:
        heads +=1
        cointoss +=1
    elif coinresult == 2:
        tails +=1
        cointoss +=1

  print("Heads came up", heads, "times")
  print("Tails came up", tails, "times")

【问题讨论】:

  • 您的缩进需要修正。
  • 一个固定迭代次数的循环写入for i in xrange(100): -- 不需要break
  • @Paul:缩进看起来只是因为我不得不在论坛软件中使用它。它似乎在 IDLE 中运行良好。
  • 我编辑了您的缩进以避免读者混淆。
  • 由于只有两种可能的结果,您可以使用else: 而不是elif coinresult == 2

标签: python coin-flipping


【解决方案1】:

您将在每个循环中增加 cointoss 两次。

while True:
    cointoss +=1      # You already incremented here, therefore...
    if cointoss > 100:
        break
    if coinresult == 1:
        heads +=1
        cointoss +=1  # ...get rid of this...
    elif coinresult == 2:
        tails +=1
        cointoss +=1  # ...and this.

此外,正如所指出的,您应该在循环内的某处获得一个新的coinresult

【讨论】:

  • 啊,是的。好地方;非常感谢。点赞,我就去试试这个。
  • 好的,这可以帮助我数 100 次,但它仍然只返回 100 个正面或反面。你让我更近了一步!
  • @Steven D Andrews 我想你只需要整合上面提到的this suggestion
【解决方案2】:

把这一行:

coinresult = random.randint(1,2)

在while循环中。否则,您会获得一次价值,然后在循环内一遍又一遍地使用它,并且您在每个循环的两个地方添加了硬币。

【讨论】:

  • 虽然这是对的,但并没有回答他原来的问题。
【解决方案3】:

使用range 方法可能会更轻松地编写循环,如下所示:

for i in range(0, 100):
    coinresult = random.randint(1, 2)
    if coinresult == 1:
        heads += 1
    else:
        tails += 1
print("Heads came up", heads, "times")
print("Tails came up", tails, "times")

【讨论】:

    【解决方案4】:
    # Exercise 3.2
    # Heads and Tails coin flip
    
    #import random
    import random
    
    #declare variables
    heads = 0
    tails = 0
    cointoss = 0
    coinresult = random.randint(1,2)
    
    #start the loop
    while True:
       cointoss +=1
    
    #end the loop if cointoss is greater than 100
       if cointoss > 100:
           break
       if coinresult == 1:
           heads +=1
       elif coinresult == 2:
           tails +=1
       coinresult = random.randint(1,2)
    
    print("Heads came up", heads, "times")
    print("Tails came up", tails, "times")
    

    您从未回忆起您的随机化,因此数字从未改变,并且您在每个循环的两个地方添加硬币。

    【讨论】:

      【解决方案5】:

      如果您想冒险,请查看 generator expressions 和内置的 sum 以及 random.randint

      heads = sum(random.randint(0,1) for _ in range(100))
      print("Heads came up {} times".format(heads))
      print("Tails came up {} times".format(100 - heads))
      

      【讨论】:

      • 啊打败我了。不过,这一种错过了本质。在所有翻转之后,您才真正知道翻转是什么。这有点像抛硬币的乐趣!
      • 欣赏这个;但我会保存这个以备后用。我想先了解一下这个。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-29
      • 2019-03-30
      • 2017-06-23
      • 1970-01-01
      相关资源
      最近更新 更多