我是编程新手,所以我决定自学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:
代码本身是否存在导致此问题的错误,还是只是一些不稳定的交互?任何帮助将不胜感激。
答案 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启动器中运行所有内容。