Код Python ведет себя по-разному между IDLE и Eclipse - PullRequest
0 голосов
/ 22 февраля 2011

Я совершенно новичок в программировании, поэтому я решил научить себя Python.Проходя Учебник непрограммиста для Python 3 , я наткнулся на странное происшествие.Когда я запускаю этот код:

def print_options():
    print('Options:')
    print(" 'p' print options")
    print(" 'c' convert from Celsius")
    print(" 'f' convert from Fahrenheit")
    print(" 'q' quit")

def c_to_f(c_temp):
    return 9.0/5.0 * c_temp + 32

def f_to_c(f_temp):
    return (f_temp-32)*5.0/9.0

choice = 'p'

while choice != 'q':
    if choice == 'c':
        temp = float(input('Celsius temp: '))
        print('Fahrenheit:', c_to_f(temp))
    elif choice == 'f':
        temp = float(input('Fahrenheit temp:'))
        print('Celsius:', f_to_c(temp))
    elif choice == 'p':
        print_options()
    choice = input('Options: ')

В результате получается то, что вы ожидаете:

Options:
 'p' print options
 'c' convert from Celsius
 'f' convert from Fahrenheit
 'q' quit
Options: f
Fahrenheit temp:98.6
Celsius: 37.0
Options: c
Celsius temp: 37
Fahrenheit: 98.60000000000001
Options: q

Но когда я запускаю тот же код на Eclipse (сбой IDLE, поэтому я попыталсячто-то еще), программа просто зацикливается, вместо того чтобы переходить к другим опциям:

Options:
 'p' print options
 'c' convert from Celsius
 'f' convert from Fahrenheit
 'q' quit
Options: c
Options:
 'p' print options
 'c' convert from Celsius
 'f' convert from Fahrenheit
 'q' quit
Options: f
Options:
 'p' print options
 'c' convert from Celsius
 'f' convert from Fahrenheit
 'q' quit
Options: q
Options:
 'p' print options
 'c' convert from Celsius
 'f' convert from Fahrenheit
 'q' quit
Options: 

Что-то не так в самом коде, чтобы вызвать это, или это просто какое-то шаткое взаимодействие?Любая помощь будет принята с благодарностью.

Ответы [ 5 ]

0 голосов
/ 23 января 2012

Если вы запустите python в своем терминале, вы найдете его более точным. На самом деле я использую eclipse и запускаю все в python launcher.

0 голосов
/ 14 мая 2011

попробуйте запустить код через ваш терминал-- $ python3 filename.py

0 голосов
/ 22 февраля 2011

Я пытался запустить ваш код в режиме IDLE, и все в порядке, в том числе и в Eclipse.Попробуйте переустановить последнюю версию PyDev

0 голосов
/ 22 февраля 2011

Если последняя версия Eclipse / Pydev не устранила проблему, я бы порекомендовал вам добавить пару строк отладки / отображения, чтобы показать вам, что Eclipse думает, что он получил как ввод.

Между этими двумяlines:

while choice != 'q':
    if choice == 'c':

Добавьте следующее, с отступом на том же уровне, что и выбор if == 'c': line:

print ('debug1\tchoice =', choice)                # what you typed
print ('debug2\tlen(choice)=', len(choice))       # should be length of 1,
print ('debug3\tsame?', choice == choice.strip()) # should be True

Если debug2 не равен 1 или debug3 нетПравда, есть хитрая ошибка с пробелами, которую, вероятно, можно решить, изменив это:

while choice != 'q':

на следующее:

while choice.strip() != 'q':

Кроме того, мне любопытно описание.Вы сказали, что код работает --- где он работал?Вы сказали, что IDLE потерпел крах, и Eclipse не работает.

Если вы используете другой редактор (например, Notepad ++, PyScripter) или другую IDE (например, PyCharm или WingIDE), выполните Show Whitespace для примера кода в обоихинструменты и убедитесь, что код действительно идентичен тому, что работает в Eclipse / PyDev.

В Python определенно имеет значение whitepsace (табуляции, пробелы), и некоторые инструменты интерпретируют их немного по-другому - особенно в тех случаях, когда вы отказоввзад и вперед между ними.

Приветствия, Роб

0 голосов
/ 22 февраля 2011

Программа выглядит нормально, на мой взгляд. Возможно, есть ошибка в том, как Eclipse обрабатывает ввод. Вы используете последнюю версию PyDev? Я предлагаю вам попробовать другую IDE (например, PyCharm).

...