Найти - Пользователи
Полная версия: Команда + текст в инпуте
Начало » Python для новичков » Команда + текст в инпуте
1
Avatarmov
У меня есть command = raw_input (“> ”) в цикле.

Дальше идут различные условия, типа
if command == “rename”:


И т.д.

Как сделать так, чтобы при том же “rename”, можно было кроме самой команды ввести ещё какой - то
текст, который потом можно было бы достать из command?
igor.kaist
Разделяйте команду и текст например пробелами, и:
command=raw_input('> ').split()
if command[0]=='rename':
opt=command[1]
Avatarmov
Пробелами и будет, но что, если у меня будет ещё команда, без дополнительного текста?
Eliont
command=raw_input('> ').split()
if len(command) > 1:
if command[0]=='rename':
opt=command[1]
else:
выполнить безусловную команду
И кстати, подскажите пожалуйста - можно как-нибудь из инпута (ну, не совсем) взять строку и использовать её как имя функции, причём функции надо передавать параметры.

Я игру на питоне (вернее, на RenPy) делаю и там параметры героя грузятся из ини-файла, парсер которого я к RenPy прикрутил таки, а потом целиком заливаются в словарь параметров экземпляра класса. Но перед этим некоторые из них надо обработать заранее прописанными функциями.

В питоне я не новичок, но и в глубины не залезал, так что где-то между.
Пожалуй, можно сказать, чайник.
o7412369815963
Eliont
И кстати, подскажите пожалуйста - можно как-нибудь из инпута (ну, не совсем) взять строку и использовать её как имя функции, причём функции надо передавать параметры.
можно попробовать методы exec и eval, но их лучше использовать в крайних мерах
UsCr
Avatarmov
Пробелами и будет, но что, если у меня будет ещё команда, без дополнительного текста?
Вводить команды в таком виде:
> --command1 more than one word --command2
И написать парсер, который формирует словарь вида: ('commandname1': , commandname2:)
Здесь важны именно это “–” перед именем команды. По ним парсер будет отличать команду от аргумента.
Тогда можно будет любое количество команд с любым количеством аргументов лепить в строку, а потом из словаря вызывать по очереди.
Eliont
o7412369815963
exec и eval
Спасибо
        s = 'strength = random.randint(20,40)'
exec s
print strength
>>> 25
То, что надо.
Насколько я понял, команда берёт строку и пытается выполнить её как объект кода?

Кстати, Avatarmov, пожалуй исползование exec может избавить тебя от необходимости прописывать некоторые процедуры самостоятельно.
(если, конечно, ты не курсовик пишешь)
igor.kaist
Eliont
Кстати, Avatarmov, пожалуй исползование exec может избавить тебя от необходимости прописывать некоторые процедуры самостоятельно.
ага…. exec('import sys;sys.exit(0)') самое безобидное что можно сделать…. Не делайте так никогда!!!
ZZZ
Вылысыпыдысты, блин!.. http://docs.python.org/library/cmd.html
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB