鱼C论坛

 找回密码
 立即注册
查看: 1823|回复: 19

[已解决]第16课作业求教

[复制链接]
发表于 2021-3-11 20:42:16 | 显示全部楼层 |阅读模式

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

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

x
import random
a = input("请输次数:")
a = int(a)
b = 0
c = 0
d = "正面"
e = "反面"
f = d,e
h = a

while a != 0:
    g = random.choice(f)
    if h < 100:
        print(g,end=" ")
        a = a - 1
        if g == "正面":
            b = b + 1           
        elif g == "反面":
            c = c + 1         
    if h >= 100:      
        a = a - 1
        if g == "正面":
            b = b + 1            
        elif g == "反面":
            c = c + 1      
print("一共进行了",h,"次实验,如果如下:")            
print("正面:",b,"次")
print("反面:",c ,"次")
要计算连续出现正反面的次数,我上面这个应该用什么办法,请指教下思路,不要直接告诉我怎么写

        
        

最佳答案
2021-3-13 16:51:18
import random
a = input("请输次数:")
a = int(a)
b = 0
c = 0
d = "正面"
e = "反面"
f = d,e
h = a
sum_zm=0        #连续正面计数
sum_fm=0        #连续反面计数
result=[['正面',0],['反面',0]]  #记录正面和反面最多连续出现多少次

record=''       #初始化记录上一次抛硬币的结果
while a != 0:
    g = random.choice(f)
    if record != g:     #判断本次抛硬币结果是否和上次相同
        record = g      #更新抛硬币记录
        sum_zm=sum_fm=1     #将正面和反面连续出现记录归1
    elif record == '正面':      #如果和上次记录相同
        sum_zm += 1             #连续出现次数+1
        if sum_zm>result[0][1]: #如果连续出现次数>result里的记录,就把result里的记录更新为最大值
            result[0][1]=sum_zm
    else:
        sum_fm += 1             #同上,这是记录连续记录为反面的情况
        if sum_fm>result[1][1]:
            result[1][1]=sum_fm


    if h < 100:
        print(g,end=" ")
        a = a - 1
        if g == "正面":
            b = b + 1           
        elif g == "反面":
            c = c + 1       
    if h >= 100:      
        a = a - 1
        if g == "正面":
            b = b + 1            
        elif g == "反面":
            c = c + 1      
print("一共进行了",h,"次实验,如果如下:")            
print("正面:",b,"次",'连续出现最多',result[0][1],'次')
print("反面:",c ,"次",'连续出现最多',result[1][1],'次')

楼主可以看看这个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-11 21:29:22 | 显示全部楼层
暂时想到的就是加入一个变量用以判断是否连续与记录连续次数,大概就是图上的这样,不知道你能不能看懂

                               
登录/注册后可看大图

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-11 21:31:54 | 显示全部楼层
首先对于上边代码我做了点修改,因为你if h> 100或者小于
对于你接下来的操作没有什么影响,所以是多余的
import random
a = input("请输次数:")
a = int(a)
b = 0
c = 0
d = "正面"
e = "反面"
f = d,e
h = a

while a != 0:
    g = random.choice(f)
    
    print(g,end=" ")
    a = a - 1
    if g == "正面":
        b = b + 1           
    elif g == "反面":
        c = c + 1         
        
print("一共进行了",h,"次实验,如果如下:")            
print("正面:",b,"次")
print("反面:",c ,"次")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-11 21:35:50 | 显示全部楼层
yuedong 发表于 2021-3-11 21:31
首先对于上边代码我做了点修改,因为你if h> 100或者小于
对于你接下来的操作没有什么影响,所以是多余的
...

我不是对这个进行修改,我是想第16课的作业后面有个记录正面或反面连续多少次,我想请大神给个指导可以用什么方法来写,只要给个思路
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-11 21:38:49 | 显示全部楼层
如何统计连续出现的次数,
可以考虑再设置一个标记k
当是正面的时候k+=1
如果接下来还是正面就继续加
如果不是就将它现在的值保存在一个列表中,[(正面,k)]
这样的形式,然后清零
对于反面也同法炮制
也可以只保存k,但这样应该就需要两个列表(正反各一个)
最后输出查看列表

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-11 22:06:14 | 显示全部楼层
yuedong 发表于 2021-3-11 21:38
如何统计连续出现的次数,
可以考虑再设置一个标记k
当是正面的时候k+=1

谢谢大神,我大概明白了,就是运行一次就把正面或反正记录到一个列表中,然后去计列表的长度,但是出现反面的时候怎么清零咧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-11 22:14:40 | 显示全部楼层
湘潭小五 发表于 2021-3-11 22:06
谢谢大神,我大概明白了,就是运行一次就把正面或反正记录到一个列表中,然后去计列表的长度,但是出现反 ...

我原本想的是就像你记录正反面总次数一样,用一个变量记录,在出现反面的时候记录并变量=0
在出现反面的那里添加一个 if k>0: list1.append(k),k=0 ,这个用来记正面
反面用另一个列表与变量记录
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-11 22:29:55 | 显示全部楼层
yuedong 发表于 2021-3-11 22:14
我原本想的是就像你记录正反面总次数一样,用一个变量记录,在出现反面的时候记录并变量=0
在出现反面的 ...

那能不能正面和反面出现的情况都存在一个列表中,再去计算这个列表中,正面和反面出现的最大连续次数!我感觉我钻进这个牛角尖里了,就是想不通怎么出现反面的时候清空正面的记录!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-11 22:54:04 | 显示全部楼层
湘潭小五 发表于 2021-3-11 22:29
那能不能正面和反面出现的情况都存在一个列表中,再去计算这个列表中,正面和反面出现的最大连续次数!我 ...

存一个也是可以的不过就要[(正面,1),(反面,3)]这种吧,然后再去匹配比较找出最大的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-11 22:58:03 | 显示全部楼层
我想的就是这样的,只写了正面的情况,其实很简单的,可能只是你绕晕了
import random
a = input("请输次数:")
a = int(a)
b = 0
c = 0
d = "正面"
e = "反面"
f = d,e
h = a
k = 0
list1 = []
list2 = []
while a != 0:
    g = random.choice(f)
    
    print(g,end=" ")
    a = a - 1
    if g == "正面":
        b = b + 1
        k +=1
    elif g == "反面":
        c = c + 1
        if k > 0:
            list1.append(k)
            k = 0
        
print("一共进行了",h,"次实验,如果如下:")            
print("正面:",b,"次")
print("反面:",c ,"次")
print(list1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-13 13:16:49 | 显示全部楼层
yuedong 发表于 2021-3-11 22:58
我想的就是这样的,只写了正面的情况,其实很简单的,可能只是你绕晕了

谢谢,但是我测试了一下记录的数不对啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-13 15:03:52 | 显示全部楼层
请输次数:10
正面 反面 正面 正面 正面 反面 反面 反面 正面 反面 一共进行了 10 次实验,如果如下:
正面: 5 次
反面: 5 次
[1, 3, 1]
>>>
不对吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-13 15:16:40 | 显示全部楼层
yuedong 发表于 2021-3-13 15:03
请输次数:10
正面 反面 正面 正面 正面 反面 反面 反面 正面 反面 一共进行了 10 次实验,如果如下:
正 ...

不对,我之前也试过,应该只出现正面和反面的最大连续次数,你多试两下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-13 15:57:58 From FishC Mobile | 显示全部楼层
。。。我这个只是记录了正面的连续次数到了列表
,没说出现正面和反面最大呀。。
反面同理写,然后找列表里最大的输出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-13 16:26:35 | 显示全部楼层
本帖最后由 喜欢欢 于 2021-3-13 16:30 编辑

可以在定义三个变量 l = 0  z = 0  w = 0 一个列表q
在if (f =="正面")
       b+=1
       l = 1
        w=0
          if l==1#判断是否为连续
            z+=1
             for  q in z
          else
             z=0
     else
        c+=1
         w-=1
         l = 0
         
         for w in q
     print(“正面最大连续数字:”+max(q))
     print(“负面最大连续数字:”+min(q))
大佬勿喷,我也是刚学 在英语课上瞎写的 ,不好 老师来了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-13 16:37:23 | 显示全部楼层
求 我这猜想可以不 ,我在上课..学校电脑没有python的运行环境
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-13 16:51:18 | 显示全部楼层    本楼为最佳答案   
import random
a = input("请输次数:")
a = int(a)
b = 0
c = 0
d = "正面"
e = "反面"
f = d,e
h = a
sum_zm=0        #连续正面计数
sum_fm=0        #连续反面计数
result=[['正面',0],['反面',0]]  #记录正面和反面最多连续出现多少次

record=''       #初始化记录上一次抛硬币的结果
while a != 0:
    g = random.choice(f)
    if record != g:     #判断本次抛硬币结果是否和上次相同
        record = g      #更新抛硬币记录
        sum_zm=sum_fm=1     #将正面和反面连续出现记录归1
    elif record == '正面':      #如果和上次记录相同
        sum_zm += 1             #连续出现次数+1
        if sum_zm>result[0][1]: #如果连续出现次数>result里的记录,就把result里的记录更新为最大值
            result[0][1]=sum_zm
    else:
        sum_fm += 1             #同上,这是记录连续记录为反面的情况
        if sum_fm>result[1][1]:
            result[1][1]=sum_fm


    if h < 100:
        print(g,end=" ")
        a = a - 1
        if g == "正面":
            b = b + 1           
        elif g == "反面":
            c = c + 1       
    if h >= 100:      
        a = a - 1
        if g == "正面":
            b = b + 1            
        elif g == "反面":
            c = c + 1      
print("一共进行了",h,"次实验,如果如下:")            
print("正面:",b,"次",'连续出现最多',result[0][1],'次')
print("反面:",c ,"次",'连续出现最多',result[1][1],'次')

楼主可以看看这个

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
湘潭小五 + 1 + 1 + 1 感谢感谢,我好好理解一下

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-13 16:52:09 | 显示全部楼层
我把增加的部分加了注释,应该是挺清楚的了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 06:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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