Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:不能识别两位数的字符串_Python_Python 3.x_String_Output_Run Length Encoding - Fatal编程技术网

Python:不能识别两位数的字符串

Python:不能识别两位数的字符串,python,python-3.x,string,output,run-length-encoding,Python,Python 3.x,String,Output,Run Length Encoding,我有一个函数,用户输入一个可以被编码或解码的字符串。这必须遵循运行长度。我无法专注于解码。如果我输入“a7bc3”,这个函数工作得非常好,但是如果它有一个像“b2hm11”这样的两位数,它就不工作了。输出应该是“bbhmmmmm”(如果你计算有11m) 如何使此函数识别两位数字或将数字设置为特定范围?我已经在下面的注释代码中设置了一个条件语句。它不起作用。我想在这个函数中维护我的递归逻辑 代码如下: def decode(user_input): if len(user_input) &

我有一个函数,用户输入一个可以被编码或解码的字符串。这必须遵循运行长度。我无法专注于解码。如果我输入“a7bc3”,这个函数工作得非常好,但是如果它有一个像“b2hm11”这样的两位数,它就不工作了。输出应该是“bbhmmmmm”(如果你计算有11m)

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

代码如下:

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"))
def解码(用户输入):
如果len(用户输入)<2:
返回用户输入
char=用户输入[0]
num=用户输入[1]
#如果用户输入在范围(0,9)内:
#num=用户输入[1]
#其他:
#中断
如果num.isdigit():
返回字符*int(num)+解码(用户输入[2:])
其他:
返回字符+解码(用户输入[1:])
打印(解码(“b2hm11”))
打印(解码(“abu6”))

这是我想到的,但请注意,我是在深夜这么做的,所以这可能不是最好的

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
def解码(用户输入):
如果len(用户输入)<2:
返回用户输入
char=用户输入[0]
如果用户输入[1]。isdigit():
endNumber=False
索引=1
虽然不是尾数:
如果不是用户输入[index].isdigit():
endNumber=True
其他:
如果索引==len(用户输入)-1:
指数+=1
endNumber=True
其他:
指数+=1
返回字符*int(用户输入[1:index])+解码(用户输入[index:])
其他:
返回字符+解码(用户输入[1:])
打印(解码(“b2hm11”)#输出bbhmmmmm
打印(解码(“abu6”)#输出ABUUUU

这是我想到的,但请注意,我是在深夜这么做的,所以这可能不是最好的

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
def解码(用户输入):
如果len(用户输入)<2:
返回用户输入
char=用户输入[0]
如果用户输入[1]。isdigit():
endNumber=False
索引=1
虽然不是尾数:
如果不是用户输入[index].isdigit():
endNumber=True
其他:
如果索引==len(用户输入)-1:
指数+=1
endNumber=True
其他:
指数+=1
返回字符*int(用户输入[1:index])+解码(用户输入[index:])
其他:
返回字符+解码(用户输入[1:])
打印(解码(“b2hm11”)#输出bbhmmmmm
打印(解码(“abu6”)#输出ABUUUU
使用以下操作:

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
重新导入
def解码(安装):
result=“”
String=re.findall(r'[A-Za-z]-?\d+\.\d+\d+',inString)
如果len(String)使用以下操作:

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
重新导入
def解码(安装):
result=“”
String=re.findall(r'[A-Za-z]-?\d+\.\d+\d+',inString)

如果len(String)此代码在哪里/如何尝试确定多位数子字符串?@ScottHunter它应该将其识别为num=user\u input[1]下的第二个字符串,因为它遵循运行长度格式。
user\u input[1]
是单个字符。@ScottHunter如何确保下一个字符不是数字,这样两位数的数字就不会被识别?@Jab我不相信有一个名为
字符的内置码。
;您是否将其误认为是
chr
?此代码在何处/如何尝试确定多位数子字符串?@ScottHunter它应该将其识别为num=user\u input[1]下的第二个字符串,因为它遵循运行长度格式。
user\u input[1]
是单个字符。@ScottHunter如何确保下一个字符不是数字,这样两位数的数字就不会被识别?@Jab我不相信有一个名为
字符的内置码。
;你把它错当成chr了吗?谢谢!我对python还是相当陌生,但是“whilenotendnumber”是什么意思呢?endNumber是一个变量,我将其设置为False,以便在到达下一个字符时退出for循环。如果您以前使用过while True,则这是类似的,因为它本质上是while而不是True。因此,当我们将endNumber更改为True时,它将退出while循环。谢谢!我对python还是相当陌生,但是“whilenotendnumber”是什么意思呢?endNumber是一个变量,我将其设置为False,以便在到达下一个字符时退出for循环。如果您以前使用过while True,则这是类似的,因为它本质上是while而不是True。因此,当我们将endNumber更改为True时,它将退出while循环。