#python #python-2.7
#python #python-2.7
Вопрос:
Я пытаюсь создать инструмент, который будет кодировать / декодировать строку в соответствии со значениями в словаре, однако я застрял со следующим кодом:
class edt():
e_dic = {}
def main(self):
c = "hcqnxmytwukgirzoeaspdfvlbj"
a = "abcdefghijklmnopqrstuvwxyz"
e_dic = {}
for i in range(len(c)):
e_dic[a[i]] = c[i]
e_dic[" "] = " "
self.e_dic = e_dic
e = edt()
user_input = raw_input("1.Encoden2.Decoden")
if user_input == "1":
e.encode()
elif user_input == "2":
e.decode()
else:
False
def encode(self):
print("test")
def decode(self):
print("test")
def run():
run_main = None
run_main = edt()
run_main.main()
Я опустил encode () и decode (), поскольку я не думаю, что они вызывают проблему.
Проблема в том, что это происходит, когда я его запускаю:
>> выполнить () 1. Закодировать 2. Декодирование >> (Здесь скрипт останавливается, чтобы дождаться нажатия клавиши возврата, но ничего не делает независимо от введенного ввода) >>
После завершения мне не выдается ошибка. Любая помощь будет с благодарностью
Комментарии:
1. Что, если вы введете
1
, а затем нажмете return?2. Оболочка ничего не делает, она просто ожидает ввода следующей команды
3. Невозможно воспроизвести. Что делать
encode
иdecode
делать? Я предполагаю: эти функции ожидают другого ввода, затем что-то делают с этим и возвращают что-то, но вы ничего не делаете с тем, что они возвращают, например, печатают его или что-то еще.4. Запуск вашего скрипта как есть не дает мне никакого результата. Определение точки входа и замена ваших функций Encode () и Decode () работает так, как ожидалось.
5. encode () и decode () оба печатают «test»
Ответ №1:
Код выглядит нормально. Но разве вы не должны использовать объект для вызова метода? вот так
class edt():
e_dic = {}
def encode(self):
print "encoded "
def decode(self):
print "decoded "
def main(self):
c = "hcqnxmytwukgirzoeaspdfvlbj"
a = "abcdefghijklmnopqrstuvwxyz"
e_dic = {}
for i in range(len(c)):
e_dic[a[i]] = c[i]
e_dic[" "] = " "
self.e_dic = e_dic
e = edt()
user_input = raw_input("1.Encoden2.Decoden")
if user_input == "1":
e.encode()
elif user_input == "2":
e.decode()
else:
False
def run():
run_main = None
run_main = edt()
run_main.main()
Вывод:
>>> run()
1.Encode
2.Decode
1
encoded
Скрипка здесь:
Комментарии:
1. К сожалению, это дает тот же результат в оболочке. В любом случае спасибо 🙂
2. Я изменил свой код на этот, и он дал тот же результат, что и в вопросе
3. Извиняюсь, они были в моем коде, но я забыл их добавить
4. @noogii2k Я прошу вас, пожалуйста, использовать ideone.com чтобы запустить код. Добавьте run() в конце кода и ваш выбор в стандартном интерфейсе, и вы получите желаемый результат. Или проверьте мой здесь ideone.com/9eET4T
5. Спасибо, похоже, моя проблема связана с моим компьютером.
Ответ №2:
Вам нужно использовать self
при кодировании и декодировании.
class edt(object):
def __init__(self):
self.e_dic = {}
def main(self):
c = "hcqnxmytwukgirzoeaspdfvlbj"
a = "abcdefghijklmnopqrstuvwxyz"
for i in range(len(c)):
self.e_dic[a[i]] = c[i]
self.e_dic[" "] = " "
user_input = raw_input("1.Encoden2.Decoden")
if user_input == "1":
self.encode()
elif user_input == "2":
self.decode()
else:
return False
def encode(self):
print("test")
def decode(self):
print("test")
def run():
run_main = None
run_main = edt()
run_main.main()
run()
Комментарии:
1. К сожалению, у меня все та же проблема
2. откуда вы его запускаете и используете ли вы код точно так, как опубликовано?
3. Я запускаю его из оболочки на своем компьютере и на этом веб-сайте
4. @noogii2k, я изменил часть вашего кода, вам не нужно создавать экземпляры внутри вашего класса для доступа к методам класса, для этого и нужен self .