【问题标题】:Invalid syntax by using else statement使用 else 语句的语法无效
【发布时间】:2019-10-20 00:47:35
【问题描述】:

如果有人能解释为什么我在 else 语句中遇到语法错误,我将不胜感激。

x = 0
digits = 0

while(x != 0):
  x = x // 10
  digits += 1
print(digits)

else(x == 0):
  print(1)

我必须创建一个使用 while 循环和条件语句的代码,它在其中评估整数包含的位数。否则需要else循环,否则如果我有x = 0,它将打印0作为否。数字当然是错误的。

【问题讨论】:

  • 您的print(digits) 的缩进是错误的,它应该在while 块内的其他语句的级别上。在else 部分设置条件也是没有意义的。
  • else 在任何情况下都不接受表达式。
  • 从逻辑上思考:你应该在循环之前还是之后处理x等于0的特殊情况? (提示:循环运行后,无论 x 的值是什么,你能说它是真的吗?)

标签: python loops


【解决方案1】:

我们想知道是否x == 0首先,并专门处理这种情况。当它不是时,那是当我们使用while循环时,所以在else中缩进所有这些。因此:

if x == 0:
    print(1)
else:
    while(x != 0):
        x = x // 10
        digits += 1
    print(digits)

【讨论】:

    【解决方案2】:
    x = 10000
    digits = 0
    
    while x != 0:
        x = x // 10
        digits += 1
        if x == 0:         # you only want to print once when you have digits correct so check here
            print(digits)  # print your digits
            break          # break your loop
    else:   # remove the expression here for the else (not elif)
        print(1)
    

    看起来像:

    >>> x = 10000
    >>> digits = 0
    >>> 
    >>> while x != 0:
    ...     x = x // 10
    ...     digits += 1
    ...     if x == 0:
    ...         print(digits)
    ...         break
    ... else:
    ...     print(1)
    ... 
    5
    

    编辑:

    正如 Karl 在 cmets 中指出的,这不是在 Python 中做事的常规方式。这个答案是这样的,因为您似乎特别想使用while/else,这就是这样做的方法。将其重组为他在回答中的方式更为常见,但如果您有此要求,则不满足执行 while/else 的任何要求。

    【讨论】:

    • 这是一种尴尬的做事方式。 whileelse 的配对虽然是 Python 语法的一部分,但并不常见;并且在此处中断循环的条件(我们必须有条件地从循环中中断以使else 以这种方式工作)与while 条件本身是多余的。
    • @KarlKnechtel 我不反对。似乎 OP 想要 while/else 作为他们答案的一部分,这就是为什么我以这种方式将其保留在那里。
    • 另外它不是多余的,t 正在评估相同但它需要能够打印数字。它会在打印之前爆发。
    • 在某种意义上是冗余的,它可以同样是 while True:,这取决于检查。
    • 啊,我想这是真的。它确实依赖break 才能正常工作。但是,如果您将其更改为True,那么else 将成为冗余部分并会破坏它。试图将else 作为while 的一部分保留在答案中的问题所固有。
    猜你喜欢
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多