如何编写压缩的字母数字程序

How to write a compressed alphanumeric program

我需要编写一个将字母数字字符串作为输入的程序。 该字符串将仅包含小写字符和从 0 到 9 的数字。

我必须将字母压缩为字母乘以连续重复的次数,例如:

如果输入字符串中有任何整数,那么我必须添加整数。

Return 压缩字符串乘以整数。

def std(string):
    res =" "
    con =1
    res += string[0]
    for i in range((len(string)-1)):
        if (string[i] == string[i+1]):
            con+=1
        else:
            if (con>1):
                res += str(con)
                res+=string[i+1]
                con =1
            if (con>1):
                res+= str(con)
            return res

print(std('aabbb3cccc2d'))

我写了这个程序并得到了输出 a2b

预期输出为 a2b3c4d1a2b3c4d1a2b3c4d1a2b3c4d1a2b3c4d1。谁能告诉我哪里错了?

我认为您在该功能中存在多个问题:

  • 您 return 进入循环并离开函数而不遍历整个字符串

  • 你只检查下一个字母是否相等,不要继续寻找

  • 如果你循环 len(string) - 1 你永远不会检查最后一个字符

  • 你不检查你所在的字符是否是数字,所以你无法跟踪你的字符串最后会相乘多少次

由于无法纠正您的问题,我遇到了这个解决方案,希望对您有所帮助。

def std(string):
    multiplier = 0
    final_string = ""
    jumper = 0

    for i in range(len(string)):
        if jumper:
            jumper -= 1
            continue

        if string[i].isdigit():
            multiplier += int(string[i])
            continue    

        charMultiplier = 0
        for j in range(i + 1, len(string)):
            if(string[i] == string[j]):
                charMultiplier += 1                    
            else:
                break      

        final_string += string[i]       
        final_string += str(charMultiplier + 1)

        jumper += charMultiplier

    final_string = final_string * multiplier

    return final_string