Python 需要在骰子卷中打印最常见的长度5,s和6,s

Python 需要在骰子卷中打印最常见的长度5,s和6,s,python,Python,我实际上有三个任务,其中两个已经完成,现在我真的被最后一个任务困住了 检查两个连续的66(工作) 6辊最长顺序(工作) 要检查5和6的最频繁长度的数字。例如,在5533661656中,656是最长的,但只有一个长度为3的序列,但答案应该是2,因为55,66在那里。同样,45611613656124566的长度为2和3,两次出现。现在程序应该打印最长的长度,答案应该是3 这是代码 trial = int(randint(1, 500)) print(trial) result = '' for

我实际上有三个任务,其中两个已经完成,现在我真的被最后一个任务困住了

  • 检查两个连续的66(工作)
  • 6辊最长顺序(工作)
  • 要检查5和6的最频繁长度的数字。例如,在5533661656中,656是最长的,但只有一个长度为3的序列,但答案应该是2,因为55,66在那里。同样,45611613656124566的长度为2和3,两次出现。现在程序应该打印最长的长度,答案应该是3
  • 这是代码

    
    trial = int(randint(1, 500))
    print(trial)
    result = ''
    for i in range(trial):
        init_num = str(randint(1, 6))
        result += init_num
    print(result)
    
    
    def double_six(result):
        last_dice = '0'
        counter = 0
        for i in range(trial):
            if result[i] == '6' and last_dice == '6':
                counter += 1
                last_dice = '0'
            else:
                last_dice = result[i]
        return counter
    print(double_six(result))
    
    def no_six(result):
        s = str(result).split('6')
        l = 0
        for i in s:
            if l < len(i):
                l = len(i)
            if len(i) > l:
                l = i
        return (l)
    print(no_six(result))
    #
    # def lucky_series(result)
    
    
    试用期=int(randint(1500))
    印刷品(试用版)
    结果=“”
    对于范围内的i(试验):
    init_num=str(randint(1,6))
    结果+=init_num
    打印(结果)
    def双_六(结果):
    最后一个骰子='0'
    计数器=0
    对于范围内的i(试验):
    如果结果[i]=“6”和最后一个骰子==“6”:
    计数器+=1
    最后一个骰子='0'
    其他:
    最后一个骰子=结果[i]
    返回计数器
    打印(双_六(结果))
    def no_六(结果):
    s=str(结果)。拆分('6')
    l=0
    对于s中的i:
    如果ll:
    l=i
    返回(l)
    打印(第六号(结果))
    #
    #def lucky_系列(结果)
    
    这可能可以用正则表达式简化,但我不知道如何:
    这是我的解决办法

    result = str(322226555453442214634442111625423563466312534536531251541656625421252464254536351661534211622365625514522561513611151366313122241413512123614521)
    
    将数字1到4替换为空格,然后将其拆分为一个列表

    result = result.replace('1',' ').replace('2',' ').replace('3',' ').replace('4',' ').split()  
    #['6555', '5', '6', '6', '5', '56', '66', '5', '5', '65', '5', '5', '6566', '5', '5', '6', '5', '5', '6', '5', '66', '5', '6', '656', '55', '5', '56', '5', '6', '5', '66', '5', '6', '5']  
    
    然后找到该列表中每个5-6项的长度,然后将其存储到另一个列表中:

    lengths = [len(a) for a in result] #list-comprehension
    #[4, 1, 1, 1, 1, 2, 2, 1, 1, 2, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 3, 2, 1, 2, 1, 1, 1, 2, 1, 1, 1]
    
    使用list.Count从2开始计算相似长度的项目及其频率

    total = [[i , lengths.count(i)] for i in range(1000)[2:] if lengths.count(i) != 0]
    #[[2, 7], [3, 1], [4, 2]]
    
    然后使用max()查找频率最高的长度(根据第二项获取max)

    功能:

    def most56(result):
        result = result.replace('1',' ').replace('2',' ').replace('3',' ').replace('4',' ').split()
        lengths = [len(a) for a in result]
        total = [ [i, lengths.count(i)] for i in range(1000)[2:] if lengths.count(i) != 0]
        if total:
            most = max(total, key = lambda x: x[1])
            return most[0]
        return 'no long numbers'
    

    上面的函数不工作“max()arg是一个空序列”是错误。我修复了错误,包括结尾缺少的字符串。split()。现在应该可以用了,谢谢你,伙计。。。请解释“范围(1000)[2:]”。感谢[2:]是一种切片表示法。它告诉范围从2开始,直到结束。对于这个“355452134111343663236636”数字,结果是3。这是不对的
    def most56(result):
        result = result.replace('1',' ').replace('2',' ').replace('3',' ').replace('4',' ').split()
        lengths = [len(a) for a in result]
        total = [ [i, lengths.count(i)] for i in range(1000)[2:] if lengths.count(i) != 0]
        if total:
            most = max(total, key = lambda x: x[1])
            return most[0]
        return 'no long numbers'