|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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
- [color=Red]# 将上一次的状态设置为正面
- last = 1[/color]
- 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="")
复制代码
这个程序要理解他是怎么去统计连续次数的
就是用记录上一次的面,来和现在的面所对比,相等则不作改动(—因为连续的一直在记录)
不等则把当前面数设为一(不然连续次数就会一直累加)
|
|