使用 else 语句的语法无效

Posted

技术标签:

【中文标题】使用 else 语句的语法无效【英文标题】:Invalid syntax by using else statement 【发布时间】: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 部分设置条件也是没有意义的。 添加到@uneven_mark ***.com/questions/3295938/… else 在任何情况下都不接受表达式。 从逻辑上思考:你应该在循环之前还是之后处理x等于0的特殊情况? (提示:循环运行后,无论 x 的值是什么,你能说它是真的吗?) 【参考方案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 的一部分保留在答案中的问题所固有。

以上是关于使用 else 语句的语法无效的主要内容,如果未能解决你的问题,请参考以下文章

PHP PDO准备语句给出“无效语法”错误[重复]

spyder IDE 上的无效语法 (pyflakes E)

python 进阶语法

Java 基本语法----流程控制

java 基本语法之--选择结构

SQL join 语句中“ON”字的语法无效[关闭]