Python代码在IDLE和Eclipse之间表现不同

时间:2011-02-22 04:58:39

标签: eclipse python-3.x pydev

我是编程新手,所以我决定自学python。在经历the Non-Programmer's Tutorial for 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 :(得分:0)

我认为该计划看起来不错。也许有一个关于Eclipse如何处理输入的错误。您使用的是最新版本的PyDev吗?我建议你尝试另一个IDE(比如PyCharm)。

答案 1 :(得分:0)

我试图在IDLE中运行你的代码,一切都没问题,在eclipse中也是如此。尝试重新安装PyDev的最新版本

答案 2 :(得分:0)

如果最新的Eclipse / Pydev没有解决问题,我建议您添加一些调试/显示行来向您显示Eclipse认为它作为输入接收的内容。

在这两行之间:

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

添加以下内容,缩进到与if choice =='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不是True,那么就会有一个带有空格的偷偷摸摸的问题,可以通过更改它来解决:

while choice != 'q':

到此:

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

另外,我很好奇这个描述。你说代码有效 - 它在哪里工作?你说IDLE崩溃了,Eclipse不起作用。

如果您正在使用其他编辑器(如Notepad ++,PyScripter)或其他IDE(如PyCharm或WingIDE),请在两个工具中为示例代码执行Show Whitespace,并验证代码是否与Eclipse / PyDev正在运行。

在Python中,whitepsace(制表符,空格)绝对重要,而某些工具对它们的解释略有不同 - 特别是在你在它们之间来回反弹的情况下。

干杯, 罗布

答案 3 :(得分:0)

尝试通过您的终端运行代码 - $ python3 filename.py

答案 4 :(得分:0)

如果你在终端中运行python,你会发现它更准确。事实上,我使用eclipse并在python启动器中运行所有内容。