我有一个功能,用户输入一个可以编码或解码的字符串。这必须遵循游程。我很难专注于解码。如果我输入“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"))
这是我想出来的,但要警告我这样做是深夜,所以它可能不是最好的。
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
使用此操作:
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