Python: строка, не распознающая двузначные числа до определенной суммы - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть функция, где пользователь вводит определенную строку, которая может быть либо закодирована, либо декодирована.Это должно следовать длине пробега.У меня проблемы с фокусировкой на декодировании.Функция прекрасно работает, если бы я ввел «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"))

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Манипулируйте, используя это:

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
0 голосов
/ 23 февраля 2019

Это то, что я придумал, но имейте в виду, что я сделал это поздно ночью, поэтому, вероятно, это будет не лучшим из возможных.

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
...