|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
import random
counts = int(input("请输入抛硬币的次数:"))
# 利用 ignore 变量来判断是否打印每次的结果
if counts > 100:
ignore = True
else:
ignore = False
heads = 0 # 统计正面的次数
tails = 0 # 统计反面的次数
last = 0 # 记录上一次的状态,如果是正面设置为1, 反面则设置为2
c_heads = 0 # 统计连续正面的次数
c_tails = 0 # 统计连续反面的次数
max_heads = 0 # 统计连续正面的最多次数
max_tails = 0 # 统计连续反面的最多次数
i = 0
print("开始抛硬币实验……")
while i < counts:
num = random.randint(1, 10)
if num % 2:
heads += 1
c_heads += 1
if not ignore:
print("正面", end=" ")
# 如果上一次是反面:将连续正面的次数设置为1
if last == 2:
c_heads = 1
# 判断连续正面的次数是否比max_heads大,如果是,取而代之
if c_heads > max_heads:
max_heads = c_heads
# 将上一次的状态设置为正面
last = 1
else:
tails += 1
c_tails += 1
if not ignore:
print("反面", end=" ")
# 如果上一次是正面:连续反面的次数设置为1
if last == 1:
c_tails = 1
# 判断连续反面的次数是否比max_tails大,如果是,取而代之
if c_tails > max_tails:
max_tails = c_tails
# 将上一次的状态设置为反面
last = 2
i += 1
print("")
print("一共模拟了", counts, "次抛硬币,结果如下:")
print("正面:", heads, "次", sep="")
print("反面:", tails, "次", sep="")
print("最多连续正面:", max_heads, "次", sep="")
print("最多连续反面:", max_tails, "次", sep="")
最后一题要求计算出连续出现正反面最多次数,脑子实在愚钝,解不出来,于是查看了答案,但是看了以上答案的代码后,依然无法理解,
其他变量还能理解,但是唯独这个变量last,前面声明了last是=数字0的,(虽然前面一开始声明last=0的时候井号后面的中文告诉我正面是1反面是2,但这是解释给我们看的,python并不读懂这句话啊,代码此时肯定认为last是0啊)
可后面突然无中生有就来一句if last == 2: 我不明白为啥last会等于2,他为何不能是3或者4或者其他数字。
因为在last==2前面的代码中并没有出现last的计算。我认为他目前还是=0的。像其他的变量比如heads和c_heads,他们一开始声明=0,但是当num%2==0也就是偶数的时候,
heads和c_heads就会各加上1,这个很好理解,他们因为被声明+1了,此时他们就是1,这没啥好说的,但是last这个值又没有声明是怎么计算出来的。就突然来一句如果last == 2
实在是无法理解,不知道我的疑惑表达大伙能感同身受不,我怕我叙述了你们还听不懂....
统计正反面次数不难理解 import random
counts = int(input("请输入抛硬币的次数:"))
# 利用 ignore 变量来判断是否打印每次的结果
if counts > 100:
ignore = True
else:
ignore = False
heads = 0 # 统计正面的次数
tails = 0 # 统计反面的次数
last = 0 # 记录上一次的状态,如果是正面设置为1, 反面则设置为2
c_heads = 0 # 统计连续正面的次数
c_tails = 0 # 统计连续反面的次数
max_heads = 0 # 统计连续正面的最多次数
max_tails = 0 # 统计连续反面的最多次数
i = 0#用于确定循环次数
print("开始抛硬币实验……")
while i < counts:
num = random.randint(1, 10)
if num % 2:#num%2表示的是num/2的余数,如果为一就是奇数(用奇数表示正反之亦然)
heads += 1#表示正面次数加一
c_heads += 1#表示连续次数加一
if not ignore:
print("正面", end=" ")
# 如果上一次是反面:将连续正面的次数设置为1
if last == 2:
c_heads = 1
# 判断连续正面的次数是否比max_heads大,如果是,取而代之
if c_heads > max_heads:
max_heads = c_heads
# 将上一次的状态设置为正面
last = 1
else:
tails += 1
c_tails += 1
if not ignore:
print("反面", end=" ")
# 如果上一次是正面:连续反面的次数设置为1
if last == 1:
c_tails = 1
# 判断连续反面的次数是否比max_tails大,如果是,取而代之
if c_tails > max_tails:
max_tails = c_tails
# 将上一次的状态设置为反面
last = 2
i += 1
print("")
print("一共模拟了", counts, "次抛硬币,结果如下:")
print("正面:", heads, "次", sep="")
print("反面:", tails, "次", sep="")
print("最多连续正面:", max_heads, "次", sep="")
print("最多连续反面:", max_tails, "次", sep="")
这个程序要理解他是怎么去统计连续次数的
就是用记录上一次的面,来和现在的面所对比,相等则不作改动(—因为连续的一直在记录)
不等则把当前面数设为一(不然连续次数就会一直累加)
|
|