Python:字符串无法识别达到一定数量的两位数字

问题描述 投票:1回答:2

我有一个功能,用户输入一个可以编码或解码的字符串。这必须遵循游程。我很难专注于解码。如果我输入“a7bc3”,该功能完全正常,但如果它有两位数字,如“b2hm11”则不起作用。输出应该是“bbhmmmmmmmmmmm”(如果算上有11米)。

如何使此功能识别两位数字或将数字设置为特定范围?我通过设置条件语句在注释中尝试了以下代码。它不起作用。我想在这个函数中维护我的递归逻辑。

代码如下:

def decode(user_input):
    if len(user_input) < 2:
        return user_input

    char = user_input[0]
    num = user_input[1]

    # if user_input in range(0, 9):
    #     num = user_input[1]
    # else:
    #     break

    if num.isdigit():
        return char * int(num) + decode(user_input[2:])
    else:
        return char + decode(user_input[1:])

print(decode("b2hm11"))
print(decode("abu6"))
python python-3.x string output run-length-encoding
2个回答
0
投票

这是我想出来的,但要警告我这样做是深夜,所以它可能不是最好的。

def decode(user_input):
    if len(user_input) < 2:
        return user_input

    char = user_input[0]

    if user_input[1].isdigit():
        endNumber = False
        index = 1
        while not endNumber:

            if not user_input[index].isdigit():
                endNumber = True
            else:
                if index == len(user_input) - 1:
                    index += 1
                    endNumber = True
                else:
                    index += 1

        return char * int(user_input[1:index]) + decode(user_input[index:])
    else:
        return char + decode(user_input[1:])

print(decode("b2hm11")) #outputs bbhmmmmmmmmmmm
print(decode("abu6")) #outputs abuuuuuu

0
投票

使用此操作:

import re
Str = "3b42hm5a67"
re.findall(r'[A-Za-z]|-?\d+\.\d+|\d+',Str)
#output: ['3', 'b', '42', 'h', 'm', '5', 'a', '67']

这是一种方法,没有递归的func调用:

import re
def decode(inString):
    result=""
    String=re.findall(r'[A-Za-z]|-?\d+\.\d+|\d+',inString)
    if len(String)<2:
        return String[0]
    else:
        for i in range(len(String)):
            if String[i].isdigit():
                result +=  String[i-1] * (int(String[i])-1)
                i+=1
            else:
                result += String[i]
                i+=1            
    return result

print(decode("M"))      #M  <== output
print(decode("abu6"))   #abuuuuuu
print(decode("b2hp11")) #bbhppppppppppp
© www.soinside.com 2019 - 2024. All rights reserved.