我正在尝试使用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
答案 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