Как уменьшить длину вводимой строки? - PullRequest
0 голосов
/ 10 ноября 2018

Я определил рекурсивную функцию, которая возвращает количество цифр:

def counter(z, c = 0):

    z = len(z)
    if z == 0:
        return c
    else:
        return counter(z - 1,c + 1)

Я понимаю, что при втором вызове функция назначит длину целого числа 3 z. Как назначить предыдущую строку минус один символ, чтобы мои функции считали каждый символ?

Ответы [ 4 ]

0 голосов
/ 10 ноября 2018

Одно из возможных решений: передать строку без значения счетчика, чем срез в вашем рекурсивном вызове строки без одного символа и завершиться, если строка пуста:

def counter(s, c=0):
    if not s:
        return c
    else:
        return counter(s[:-1], c+1)

c = counter("abc")
0 голосов
/ 10 ноября 2018

Не делайте z=len(z), потому что вам нужен исходный z, чтобы перейти к рекурсивному вызову. Вместо этого выполните zl=len(z), измените if на zl==0 и сделайте свою последнюю строку return counter(z[1:], c+1). Квадратные скобки с двоеточием являются оператором среза; "abc"[1:]=="bc".

... кстати, технически вам даже не нужно получать len() из z, так как python рассматривает пустые списки как ложные в выражениях if. Таким образом, ваш код может быть просто:

def counter(z, c=0):
    if not z: return c
    return counter(z[1:], c+1)
0 голосов
/ 10 ноября 2018

Вам просто нужно нарезать строку. Например, используйте z[:-1]. Это вернет все символы минус последний. В качестве альтернативы вы можете просто посчитать их с помощью len(z). Также установка z=len(z) не будет работать, потому что вы потеряете строку.

0 голосов
/ 10 ноября 2018

Вы должны передать длину z только при первом вызове функции.

def counter(z, c = 0):
if z == 0:
    return c
else:
    return counter(z - 1,c + 1)

# Main call
z = len(z)
result = counter(z)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...