在tutorial之后我得到以下错误,其中y = 1; 我正在使用Netbeans 6.5 for Python。谢谢
y=1
^
SyntaxError:第8行:3输入不匹配''期待DEDENT(temperatureconverter.py,第8行)
以下是python代码,请为我格式化。
__author__="n"
__date__ ="$Jan 9, 2011 3:03:39 AM$"
def temp():
print "Welcome to the NetBeans Temperature Converter."
y=1
n=0
z=input("Press 1 to convert Fahrenheit to Celsius, 2 to convert Celsius to Fahrenheit, or 3 to quit:")
if z!=1 and z!=2 and z!=3:
e=input("Invalid input, try again?(y or n)")
if e==1:
t=''
temp()
if e==0:
t="Thank you for using the NetBeans Temperature Converter."
print "Celsius Fahrenheit" # This is the table header.
for celsius in range(0,101,10): # Range of temperatures from 0-101 in increments of 10
fahrenheit = (9.0/5.0) * celsius +32 # The conversion
print celsius, " ", fahrenheit # a table row
temp()
答案 0 :(得分:12)
在print
语句中,您使用了2个空格来缩进该行,而在下一个语句中则放置了3个空格。
Whitespace在Python中很重要。具体来说,如果你在一行中有一定程度的缩进,你不能只使用另一行作为下一行。
答案 1 :(得分:1)
为了感兴趣,这里是该示例的扩展版本。我已经加入了一定数量的魔法,可能会让你更深入地了解Python!
并且 - 因为我总是很乐意继续学习 - 是否有其他人有关于如何以正确的Pythonic方式扩展和改进它的建议?
class MenuItem(object):
def __init__(self, fn, descr=None, shortcuts=None):
"""
@param fn: callable, callback for the menu item. Menu quits if fn returns False
@param descr: str, one-line description of the function
@param shortcuts: list of str, alternative identifiers for the menu item
"""
if hasattr(fn, '__call__'):
self.fn = fn
else:
raise TypeError('fn must be callable')
if descr is not None:
self.descr = descr
elif hasattr(fn, '__doc__'):
self.descr = fn.__doc__
else:
self.descr = '<no description>'
if shortcuts is None:
shortcuts = []
self.shortcuts = set(str(s).lower() for s in shortcuts)
def __str__(self):
return self.descr
def hasShortcut(self,s):
"Option has a matching shortcut string?"
return str(s).lower() in self.shortcuts
def __call__(self, *args, **kwargs):
return self.fn(*args, **kwargs)
class Menu(object):
def __init__(self):
self._opts = []
def add(self, od, *args, **kwargs):
"""
Add menu item
can be called as either
.add(MenuItem)
.add(args, to, pass, to, MenuItem.__init__)
"""
if isinstance(od, MenuItem):
self._opts.append(od)
else:
self._opts.append(MenuItem(od, *args, **kwargs))
def __str__(self, fmt="{0:>4}: {1}", jn='\n'):
res = []
for n,d in enumerate(self._opts):
res.append(fmt.format(n+1, d))
return jn.join(res)
def match(self, s):
try:
num = int(s)
if 1 <= num <= len(self._opts):
return self._opts[num-1]
except ValueError:
pass
for opt in self._opts:
if opt.hasShortcut(s):
return opt
return None
def __call__(self, s=None):
if s is None:
s = getStr(self)
return self.match(s)
def fahr_cels(f):
"""
@param f: float, temperature in degrees Fahrenheit
Return temperature in degrees Celsius
"""
return (f-32.0)/1.8
def cels_fahr(c):
"""
@param c: float, temperature in degrees Celsius
Return temperature in degrees Fahrenheit
"""
return (c*1.8)+32.0
def getFloat(msg=''):
return float(raw_input(msg))
def getStr(msg=''):
print(msg)
return raw_input().strip()
def doFahrCels():
"Convert Fahrenheit to Celsius"
f = getFloat('Please enter degrees Fahrenheit: ')
print('That is {0:0.1f} degrees Celsius'.format(fahr_cels(f)))
return True
def doCelsFahr():
"Convert Celsius to Fahrenheit"
c = getFloat('Please enter degrees Celsius: ')
print('That is {0:0.1f} degrees Fahrenheit'.format(cels_fahr(c)))
return True
def doQuit():
"Quit"
return False
def makeMenu():
menu = Menu()
menu.add(doFahrCels, None, ['f'])
menu.add(doCelsFahr, None, ['c'])
menu.add(doQuit, None, ['q','e','x','quit','exit','bye','done'])
return menu
def main():
print("Welcome to the NetBeans Temperature Converter.")
menu = makeMenu()
while True:
opt = menu()
if opt is None: # invalid option selected
print('I am not as think as you confused I am!')
else:
if opt() == False:
break
print("Thank you for using the NetBeans Temperature Converter.")
if __name__=="__main__":
main()
答案 2 :(得分:0)
没问题,完整的代码消失了。遗憾
def temp():
print "Welcome to the NetBeans Temperature Converter."
y=1
n=0
z=input("Press 1 to convert Fahrenheit to Celsius, 2 to convert Celsius to Fahrenheit, or 3 to quit:")
if z!=1 and z!=2 and z!=3:
e=input("Invalid input, try again?(y or n)")
if e==1:
t=''
temp()
if e==0:
t="Thank you for using the NetBeans Temperature Converter."
if z==1: # The user wishes to convert a temperature from Fahrenheit to Celsius
x=input("Input temperature in Fahrenheit:")
t=(x-32)/1.8
print "The temperature in Celsius is:"
if z==2: # The user wishes to convert a temperature from Celsius to Fahrenheit
x=input("Input temperature in Celsius:")
t=(x*1.8)+32
print "The temperature in Fahrenheit is:"
if z==3: # The user wishes to quit the application
t="Thank you for using the NetBeans Temperature Converter."
print t
if z==1 or z==2:
a=input("Do you want to perform another conversion?(y or n)")
if a==0:
t="Thank you for using the NetBeans Temperature Converter."
if a==1:
t= ''
temp()
print t
temp()
答案 3 :(得分:0)
使用偏好设置 - &gt; Pydev-&gt;编辑并取消选中替换制表符和空格。标签可以是4个空格,尽管人们普遍认为它应该改为8个空格。它会删除所有制动错误。
答案 4 :(得分:0)
是的,这就是为我做的事情。我在Notepad ++中玩的是一个用Eclipse制作的.py文件,Eclipse使用的是空格而我正在使用制表符。它看起来与4个空格= 1个标签相同,所以我只使用了空格而不是标签,一切都很好。