Python: синтаксический анализ вложенного списка чисел через командную строку - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь написать программу на python (rec_list_sum.py), которая рекурсивно находит сумму вложенного списка чисел.

Мой ввод в терминал Powershell:

python rec_list_sum.py [1,2,3,[4,5],[6,7],8]

И моя функция принимает массив следующим образом:

import sys

def recursive_list_sum(array):

    total = 0

    for ele in array:
        if isinstance(ele, list):
            total = total + recursive_list_sum(ele)
        else:
            total = total + ele

    return total

Это часть, с которой у меня возникла проблема, при разборе ввода:

if __name__ == "__main__":
    string = sys.argv[1]
    digits = [int(i) for i in str(string)]
    ans = recursive_list_sum(digits)

    print(ans)

У меня есть кодработать на ноутбуке Jupyter, но я просто не могу разобрать этот ввод в Python с помощью PowerShell.Кто-нибудь может объяснить, как?

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Вы можете написать синтаксический анализатор следующим образом:

def parse(s):
    def _parse(s):
        output = []
        index = 0
        num = ''
        while index < len(s):
            char = s[index]
            index += 1
            if char.isdigit():
                num += char
            if char in ',]' and num:
                output.append(int(num))
                num = ''
            if char == '[':
                sublist, offset = _parse(s[index:])
                output.append(sublist)
                index += offset
            elif char == ']':
                break
        return output, index
    return _parse(s)[0][0]

, чтобы:

parse('[1,2,3,[4,5],[6,7],8]')

вернул:

[1, 2, 3, [4, 5], [6, 7], 8]
0 голосов
/ 04 декабря 2018

Вы можете использовать ast.literal_eval для анализа входной строки как выражения Python:

from ast import literal_eval
ans = recursive_list_sum(literal_eval(sys.argv[1]))
...