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