Пользователь ввода рассматривается как метод, а не просто общая строка в Python - PullRequest
0 голосов
/ 01 декабря 2018

Я попытался создать простую программу, использующую python, которая бы принимала пользовательский ввод от пользователя, и она использовалась бы в списке с таким форматом ввода.

$ python name_app.py
$ <method> <position_index> <value>

Я пробовал что-то подобное.

 lst = []
 n = input().split()
 print(n[0])
 test = lst.n[0](n[1], n[2])
 print(test)

Пример ввода будет выглядеть следующим образом:

$ python name_app.py
$ append 0 2

Ну, я думал, что код будет таким, если я передам ввод

lst.append(0, 2)

Но яполучена ошибка, как показано ниже

File "app.py", line 5, in arr                                                                                                                 
    test = lst.n[0](n[1], n[2])                                                                                                                 
AttributeError: 'list' object has no attribute 'n'  

Как сделать так, чтобы ввод пользователя рассматривался как объект "method", а не как общий атрибут?

Ответы [ 2 ]

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

Вы можете использовать getattr() для вызова метода list или любого модуля или класса из строки, предоставленной пользователем.

lst = []   
n = input().split()
getattr(lst, n[0])(n[1])
print(lst)

Добавьте число 5 в список следующим образом:

$ python name_app.py
$ append 5
$ [5]
0 голосов
/ 01 декабря 2018

Вы ищете getattr():

test = getattr(lst, n[0])(n[1], n[2])

Но тогда вы столкнетесь с проблемой, что и n[1], и n[2] являются строками,не целыеТаким образом, вам нужно будет передать их через int(), чтобы проанализировать их.Кроме того, вы, вероятно, не сможете передать два аргумента методу list.append(), потому что он принимает только один.

Наконец, я думаю, вы можете найти модуль cmd более удобный способ преобразования пользовательского ввода в вызовы методов вместо непосредственного использования getattr().

...