‘raw_input’ ничего не делает, независимо от введенного ввода

#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 
  

Скрипка здесь:

http://ideone.com/9eET4T

Комментарии:

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 .