Уведомления

Группа в Telegram: @pythonsu

#1 Май 30, 2010 12:10:04

Avatarmov
От:
Зарегистрирован: 2010-03-17
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Команда + текст в инпуте

У меня есть command = raw_input (“> ”) в цикле.

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


И т.д.

Как сделать так, чтобы при том же “rename”, можно было кроме самой команды ввести ещё какой - то
текст, который потом можно было бы достать из command?



Офлайн

#2 Май 30, 2010 12:14:34

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Команда + текст в инпуте

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

command=raw_input('> ').split()
if command[0]=='rename':
opt=command[1]



Офлайн

#3 Май 30, 2010 12:18:33

Avatarmov
От:
Зарегистрирован: 2010-03-17
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Команда + текст в инпуте

Пробелами и будет, но что, если у меня будет ещё команда, без дополнительного текста?



Офлайн

#4 Май 30, 2010 18:10:57

Eliont
От:
Зарегистрирован: 2010-05-30
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

Команда + текст в инпуте

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

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

В питоне я не новичок, но и в глубины не залезал, так что где-то между.
Пожалуй, можно сказать, чайник.



Отредактировано (Май 30, 2010 18:15:56)

Офлайн

#5 Май 30, 2010 18:34:34

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Команда + текст в инпуте

Eliont
И кстати, подскажите пожалуйста - можно как-нибудь из инпута (ну, не совсем) взять строку и использовать её как имя функции, причём функции надо передавать параметры.
можно попробовать методы exec и eval, но их лучше использовать в крайних мерах

Офлайн

#6 Май 30, 2010 19:19:26

UsCr
От:
Зарегистрирован: 2009-11-04
Сообщения: 216
Репутация: +  0  -
Профиль   Отправить e-mail  

Команда + текст в инпуте

Avatarmov
Пробелами и будет, но что, если у меня будет ещё команда, без дополнительного текста?
Вводить команды в таком виде:
> --command1 more than one word --command2
И написать парсер, который формирует словарь вида: ('commandname1': , commandname2:)
Здесь важны именно это “–” перед именем команды. По ним парсер будет отличать команду от аргумента.
Тогда можно будет любое количество команд с любым количеством аргументов лепить в строку, а потом из словаря вызывать по очереди.



Офлайн

#7 Май 31, 2010 13:11:47

Eliont
От:
Зарегистрирован: 2010-05-30
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

Команда + текст в инпуте

o7412369815963
exec и eval
Спасибо
        s = 'strength = random.randint(20,40)'
exec s
print strength
>>> 25
То, что надо.
Насколько я понял, команда берёт строку и пытается выполнить её как объект кода?

Кстати, Avatarmov, пожалуй исползование exec может избавить тебя от необходимости прописывать некоторые процедуры самостоятельно.
(если, конечно, ты не курсовик пишешь)



Отредактировано (Май 31, 2010 13:17:46)

Офлайн

#8 Май 31, 2010 13:26:55

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Команда + текст в инпуте

Eliont
Кстати, Avatarmov, пожалуй исползование exec может избавить тебя от необходимости прописывать некоторые процедуры самостоятельно.
ага…. exec('import sys;sys.exit(0)') самое безобидное что можно сделать…. Не делайте так никогда!!!



Офлайн

#9 Май 31, 2010 16:01:08

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Команда + текст в инпуте

Вылысыпыдысты, блин!.. http://docs.python.org/library/cmd.html



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version