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

9 投票
5 回答
59807 浏览
提问于 2025-04-16 09:39

根据这个教程,我遇到了一个错误,y = 1;我在用Netbeans 6.5来写Python代码。谢谢。

      y=1
      ^

错误信息:语法错误:第8行第3列有不匹配的输入'',期待的是缩进结束(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 个回答

1

为了让大家更感兴趣,这里有一个更详细的例子。我加入了一些神奇的东西,希望能帮助你更深入地理解Python!

另外,我一直乐于学习,不知道还有没有其他人有建议,能让这个例子在Python的使用上更规范、更好?

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

在设置里找到“Preferences”然后选择“Pydev”,接着点击“Editor”,把“用空格替代制表符”这个选项取消勾选。虽然很多人认为制表符应该换成8个空格,但实际上制表符可以设置为4个空格。这样做可以消除所有的缩进错误。

15

在你使用的print语句中,你用了2个空格来缩进这一行,而在下一行你用了3个空格。

在Python中,空格是很重要的。具体来说,如果你在一行中用了某种缩进级别,下一行就不能随便换成其他的缩进级别。

撰写回答