【问题标题】:What is the correct syntax for 'else if'?'else if' 的正确语法是什么?
【发布时间】:2011-01-24 14:35:24
【问题描述】:

我是一名新的 Python 程序员,正在从 2.6.4 飞跃到 3.1.1。在我尝试使用“else if”语句之前,一切都很好。解释器在“else if”中的“if”之后给了我一个语法错误,原因我似乎无法弄清楚。

def function(a):
    if a == '1':
        print ('1a')
    else if a == '2'
        print ('2a')
    else print ('3a')

function(input('input:'))

我可能遗漏了一些非常简单的东西;但是,我自己无法找到答案。

【问题讨论】:

标签: python python-3.x


【解决方案1】:

在 python 中,“else if”拼写为“elif”。
另外,elifelse 后面需要一个冒号。

简单问题的简单答案。当我第一次开始时(在过去几周内),我遇到了同样的问题。

所以你的代码应该是:

def function(a):
    if a == '1':
        print('1a')
    elif a == '2':
        print('2a')
    else:
        print('3a')

function(input('input:'))

【讨论】:

  • 别担心,我们都必须学习。我觉得很奇怪,python 在可读性上放置了这样一个 elphisise,然后去使用 elkif 而不是 else 它。我建议随时打开 python API 手册:docs.python.org/3.1 重要链接是教程:docs.python.org/3.1/tutorial/index.html 语言参考:docs.python.org/3.1/reference/index.html 库参考:docs.python.org/3.1/library/index.html
  • Perl 使用相同的关键字,其基本原理是为了防止您忘记写完之前的 else 语句而开始写另一个 if 语句的意外。显然这是编写 C 代码时的常见问题。
  • @NateGlenn Perl 实际上使用了elsif,我猜 Python 必须是那个更有效的 one 字符。 “Elif”似乎起源于 C 预处理器,它早在 Python AFAICT 之前就使用了#elif。显然,在这种情况下,具有单令牌指令是有价值的,因为解析 #else if <code>#else <code that could theoretically even be an if statement> 会使原本应该很简单的语法变得复杂。
  • 我执行了这个例子。条件语法是正确的,但程序不起作用,因为输入被解析为“int”而不是“char”。如果您输入“1”,那么它会打印“3a”。这是因为 int 1 != char 1。请修复您的示例程序,因为如果他们实际运行它会让初学者非常困惑。
【解决方案2】:

你的意思是elif

【讨论】:

    【解决方案3】:
    def function(a):
        if a == '1':
            print ('1a')
        elif a == '2':
            print ('2a')
        else:
            print ('3a')
    

    【讨论】:

      【解决方案4】:

      自古以来,Python 中if/else if 的正确语法是elif。顺便说一句,如果你有很多if/else.eg,你可以使用字典

      d={"1":"1a","2":"2a"}
      if not a in d: print("3a")
      else: print (d[a])
      

      对于msw,使用字典执行函数的示例。

      def print_one(arg=None):
          print "one"
      
      def print_two(num):
          print "two %s" % num
      
      execfunctions = { 1 : (print_one, ['**arg'] ) , 2 : (print_two , ['**arg'] )}
      try:
          execfunctions[1][0]()
      except KeyError,e:
          print "Invalid option: ",e
      
      try:
          execfunctions[2][0]("test")
      except KeyError,e:
          print "Invalid option: ",e
      else:
          sys.exit()
      

      【讨论】:

      • 可以,但请不要这样做。字典不能很好地替代 elif
      • @s.lott,OP 的情况很简单。如果他必须检查 a 的许多值,字典会更整洁。您可能会养成不使用它的习惯,但是我一直在使用它,并且我喜欢这种方法比编写许多 if/else 更好。哎呀,我什至使用字典来执行功能。
      • @ghostdog:我知道你可以使用字典来执行函数,但是这个想法让我害怕,就像计算的 goto 或将 Tcl 字符串粘贴在一起并execing 他们一样。这是好习惯吗?你能举个例子吗?
      • @msw:这是非常好的做法。示例:您阅读 XML 流不是为了进行一些简单的抓取练习,而是需要对不同的元素标签进行不同的处理,例如Excel 2007 电子表格文件是多个 XML 文档的 zip,其中一些非常复杂。每个标签都有一个单独的方法。您通过字典发送。没什么好害怕的。如果处理<foo>的方法是do_foo,你甚至可以在应用启动时即时构建dict。
      • 请注意,字典有一个.get 方法,可让您指定默认值。你的第一个例子可以写成print d.get(a, "3a")
      【解决方案5】:

      这里对你的函数做了一点重构(它不使用“else”或“elif”):

      def function(a):
          if a not in (1, 2):
              a = 3
          print(str(a) + "a")
      

      @ghostdog74:Python 3 需要括号来表示“打印”。

      【讨论】:

      • python 3 用函数替换了 python 2 的 print 语句,因此需要括号,如果你打算这样做,你不妨使用 sys.stdout.write
      • 应该是('1', '2'),操作使用的是字符串
      【解决方案6】:
      def function(a):
          if a == '1':
              print ('1a')
          else if a == '2'
              print ('2a')
          else print ('3a')
      

      应更正为:

      def function(a):
          if a == '1':
              print('1a')
          elif a == '2':
              print('2a')
          else:
              print('3a')
      

      如您所见,else if 应该改为 elif,'2' 后面应该有冒号,else 语句后面应该有一个新行,并关闭 print 和括号之间的空格。

      【讨论】:

        猜你喜欢
        • 2020-09-14
        • 2023-03-10
        • 2016-08-10
        • 2015-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多