【问题标题】:How to write a compressed alphanumeric program如何编写压缩的字母数字程序
【发布时间】:2020-06-17 12:54:32
【问题描述】:

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

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

  • aaaa3
  • bbbbb4
  • cc1

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

返回压缩后的字符串乘以相加的整数。

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。谁能告诉我哪里出错了?

【问题讨论】:

标签: python string run-length-encoding


【解决方案1】:

我相信您在该功能中存在多个问题:

  • 你在循环内部返回并离开函数而不遍历整个字符串

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

  • 如果你循环 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

【讨论】:

  • 你能解释一下你认为原始代码中的问题是什么,以及在你显示的代码中这个问题是如何解决的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-24
相关资源
最近更新 更多