Python while循环,掷硬币3次

时间:2014-09-11 21:42:49

标签: python

我正在尝试使用while循环创建三次​​抛硬币,但是    这里有各种各样的问题,而且还不专业。

我的代码没有按照我希望它运行的方式运行它只是一个测试代码    现在......这是问题:

  • 由于某种原因它没有循环,只运行一次。

  • 它只打印尾巴,绝不打印头。

  • 我必须放置其他人 每次在行的开头声明为了 程序运行时没有给我一个无效的语法消息...为什么??

  • 如何让它完全循环3次?

任何帮助将不胜感激。代码如下

import random

heads_counter=0 tails_counter=0

while heads_counter and tail_counter <= 3:
    a= random.randint (1,2)
    if a==1:
        print ("heads",heads_counter)
        heads_counter+=1

else:
    print ("tails",tails_counter)
    tails_counter+=1

5 个答案:

答案 0 :(得分:1)

您需要在while条件中更明确:

while heads_counter <=3 and tail_counter <= 3:

您的代码始终为false,因为初始化为0的head_counter为false。这足以使整个and条件为假。

(更新:正如kachingy123指出的那样,你实际上想要将两个变量的 sum 比较为3.Python比英语更精确,可以使用&#34;和&#34;作为同义词 for&#34; plus&#34;。

while head_counter + tail_counter <= 3:

您还需要缩进else子句以匹配if,因为while循环采用else子句(当循环由于条件为假而退出时执行,而不是显式中断。

最后,您需要将两个变量赋值放在不同的行上。 (你可以用分号将它们分开,但这不是一种好的做法。)

import random

heads_counter=0
tails_counter=0

# With update from kachingy123
while heads_counter + tail_counter <= 3:
    a = random.randint (1,2)
    if a==1:
        heads_counter += 1
        print ("heads",heads_counter) 
    else:
        tails_counter += 1
        print ("tails",tails_counter)

答案 1 :(得分:1)

您的'while'子句不正确。声明

while a and b <= c

未评估为

while (a and b) <= c

评估为:

while (a) and (b <= c)

在这种情况下,a是你的heads_counter变量,它被初始化为0,因此它的计算结果为false,你的循环永远不会运行

此外,正如khelwood所述,您的缩进级别不正确。您的else子句需要缩进到与相应的if子句相同的级别

答案 2 :(得分:1)

你的主要问题是:

while heads_counter and tail_counter <= 3:

我假设你想要更多的东西:

while heads_counter + tail_counter <= 3:
    a= random.randint (1,2)
    if a==1:
        print ("heads",heads_counter)
        heads_counter+=1

    else:
        print ("tails",tails_counter)
        tails_counter+=1

print ("heads total",heads_counter)
print ("tails total",tails_counter)

请记住:缩进在Python中非常重要。

while循环规范:https://docs.python.org/3/reference/compound_stmts.html#the-while-statement

答案 3 :(得分:1)

关于风格的说明:

Python具有非凡的冗长,很少有其他语言匹配。用它!不要做while a + b < 3,做for coinflip in range(3)。不要result = random.randint(1,2)然后将random解析为正面或反面,执行result = random.choice("heads","tails")。哎呀,马上把它全部放在一个大清单中,然后再排序!

我的建议:

import random
results = {'heads':0, 'tails':0}
for coinflip in range(3):
    results[random.choice('heads','tails')] += 1

更简单

import random
results = dict()
for coinflip in range(3):
    results.setdefault(random.choice('heads','tails'), 0) += 1

甚至更简单:

from collections import Counter
import random

Counter(random.choice('heads','tails') for flip in range(3))

答案 4 :(得分:0)

看起来像是缩进问题。如果您的else子句与您的if相对应,那么它应该与它的缩进级别相同。

同样条件需要检查heads_counter <=3 and tail_counter <= 3,并且你的计数器变量的初始化应该分开,正如chepner指出的那样。

heads_counter = 0
tails_counter = 0

while heads_counter <= 3 and tail_counter <= 3:
    a= random.randint (1,2)
    if a==1:
        print ("heads",heads_counter)
        heads_counter+=1
    else:
        print ("tails",tails_counter)
        tails_counter+=1