错误“不匹配的输入”期待DEDENT

时间:2011-01-09 14:03:15

标签: python

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()

5 个答案:

答案 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个标签相同,所以我只使用了空格而不是标签,一切都很好。