鱼C论坛

 找回密码
 立即注册
查看: 3668|回复: 4

[已解决]关于抛硬币实验,要求出连续正面和连续反面的次数

[复制链接]
发表于 2020-12-15 14:58:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
下面是我写的代码,能跑起来,但是连续正面和连续反面的次数总是不对,求教是什么原因?
-----------------------------------------------------------------------------------------------

import random

number = int(input("请输入抛硬币的次数:"))


while True:
    i = 0
    sum1 = 0
    sum2 = 0
    last = 0
    c_head = 0
    c_tail = 0
    max_head = 0
    max_tail = 0
    print("开始抛硬币实验......")
    while i < number:
        a = random.randint(1,10)
        if a % 2 == 0:
            sum1 += 1
            c_head += 1
            if number < 100:
                print("正面",end = " ")
            if c_head >= max_head:
                max_head = c_head
            if last == 2:
                c_head = 1           
            last = 1
            
            
        if a % 2 != 0:
            sum2 += 1
            c_tail += 1
            if number < 100:               
                print("反面",end = " ")
            if c_tail >= max_tail:
                max_tail = c_tail
            if last == 1:
                c_tail = 1
            last = 2
        i += 1
    print("一共模拟了",sum1 + sum2,"次抛硬币,结果如下:","\n正面:",sum1,"\n反面:",sum2)
    print("最多连续正面:",max_head,"次")
    print("最多连续反面:",max_tail,"次")
    number = int(input("\n请输入抛硬币的次数:"))

最佳答案
2020-12-15 15:48:04
先判断if last == 2:
                c_head = 1
然后再 c_head += 1
不然明明上次是背面,你却c_head再加1,导致最后c_head最大值--》反面---》c-head增加1--》c-head以比最大值大1的数值赋值给max_head,然后你才把c_head变成1.最终导致max_head比最大值大1.
反面同理


另外你最上边的while循环没有设置break语句,导致整个代码一直循环,停住也只是因为等待你输入。最好最后设置一下break结束循环
import random

number = int(input("请输入抛硬币的次数:"))


while True:
    i = 0
    sum1 = 0
    sum2 = 0
    last = 0
    c_head = 0
    c_tail = 0
    max_head = 0
    max_tail = 0
    print("开始抛硬币实验......")
    while i < number:
        a = random.randint(1,10)
        if a % 2 == 0:
            if last == 2:
                c_head = 1
            sum1 += 1
            c_head += 1
            if number < 100:
                print("正面",end = " ")
            if c_head >= max_head:
                max_head = c_head
                       
            last = 1
            
            
        if a % 2 != 0:
            if last == 1:
                c_tail = 1
            sum2 += 1
            c_tail += 1
            if number < 100:                
                print("反面",end = " ")
            if c_tail >= max_tail:
                max_tail = c_tail
            
            last = 2
        i += 1
    print("一共模拟了",sum1 + sum2,"次抛硬币,结果如下:","\n正面:",sum1,"\n反面:",sum2)
    print("最多连续正面:",max_head,"次")
    print("最多连续反面:",max_tail,"次")
    s=input('还继续吗(Y/N):')
    if s == 'Y':
        number = int(input("\n请输入抛硬币的次数:"))
    else:
        break
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-15 15:48:04 | 显示全部楼层    本楼为最佳答案   
先判断if last == 2:
                c_head = 1
然后再 c_head += 1
不然明明上次是背面,你却c_head再加1,导致最后c_head最大值--》反面---》c-head增加1--》c-head以比最大值大1的数值赋值给max_head,然后你才把c_head变成1.最终导致max_head比最大值大1.
反面同理


另外你最上边的while循环没有设置break语句,导致整个代码一直循环,停住也只是因为等待你输入。最好最后设置一下break结束循环
import random

number = int(input("请输入抛硬币的次数:"))


while True:
    i = 0
    sum1 = 0
    sum2 = 0
    last = 0
    c_head = 0
    c_tail = 0
    max_head = 0
    max_tail = 0
    print("开始抛硬币实验......")
    while i < number:
        a = random.randint(1,10)
        if a % 2 == 0:
            if last == 2:
                c_head = 1
            sum1 += 1
            c_head += 1
            if number < 100:
                print("正面",end = " ")
            if c_head >= max_head:
                max_head = c_head
                       
            last = 1
            
            
        if a % 2 != 0:
            if last == 1:
                c_tail = 1
            sum2 += 1
            c_tail += 1
            if number < 100:                
                print("反面",end = " ")
            if c_tail >= max_tail:
                max_tail = c_tail
            
            last = 2
        i += 1
    print("一共模拟了",sum1 + sum2,"次抛硬币,结果如下:","\n正面:",sum1,"\n反面:",sum2)
    print("最多连续正面:",max_head,"次")
    print("最多连续反面:",max_tail,"次")
    s=input('还继续吗(Y/N):')
    if s == 'Y':
        number = int(input("\n请输入抛硬币的次数:"))
    else:
        break
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-12-15 16:16:28 | 显示全部楼层
本帖最后由 jackz007 于 2020-12-15 16:24 编辑
import random

maxa , maxb = 0 , 0
number = int(input("请输入抛硬币的次数:"))
print("开始抛硬币实验......")

# 由于正反面计数需要连续,为了避免循环中的条件判断过于复杂,
# 在循环开始前,先抛一次开个头,循环中的判断条件就单一化了。

x = random . randint(1,10)
if x % 2:
    a , b = 1 , 0
else:
    a , b = 0 , 1
for _ in range(number - 1):
    x = random . randint(1,10)
    if x % 2:
        if a :
            a += 1
        else:
            if b > maxb:
                maxb = b
            a , b = 1 , 0
    else:
        if b:
            b += 1
        else:
            if a > maxa:
                maxa = a
            a , b = 0 , 1

print("最多连续正面:", maxa ,"次")
print("最多连续反面:", maxb ,"次")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-12 20:49:04 | 显示全部楼层

  # 导入随机模块 #
import random
# 接收用户输入并将数值赋值给 counts 变量 #
counts=int(input("请输入抛硬币次数:"))
i = 0
sum1=0
sum2=0
a=0
sum3=0
sum4=0
b=0
c=0
print("开始抛硬币实验:")
while i < counts:
        # 生成一个随机数num #
    num=random.randrange(0, 100, 1)
    if num % 2:
            # 打印结果 #
        if counts<100:
            print("正面",end=" ")
        sum1+=1
    else:
        if counts<100:
            print("反面",end=" ")
        sum2+=1
    if num%2 and a%2:
      
        sum3+=1#统计连续正面次数#
        if b<=sum3:
            b=sum3
    else:
        sum3=0
    if num%2==0 and a%2==0:
        
        sum4+=1#统计连续反面次数#
        if c<=sum4:
            c=sum4
    else:
        sum4=0
    i = i + 1
    a=num#记录前一次随机数值#

print("\n一共模拟了",counts,"次抛硬币,结果如下:")      
print("正面:",sum1,"次")
print("反面:",sum2,"次")
print("正面最多连续出现:",b+1)
print("反面最多连续出现:",c+1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-16 16:42:37 | 显示全部楼层
你们发的好复杂我压根看不懂。。是我智商不够么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-14 01:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表