使用 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
的任何要求。
【讨论】:
这是一种尴尬的做事方式。while
与 else
的配对虽然是 Python 语法的一部分,但并不常见;并且在此处中断循环的条件(我们必须有条件地从循环中中断以使else
以这种方式工作)与while
条件本身是多余的。
@KarlKnechtel 我不反对。似乎 OP 想要 while/else
作为他们答案的一部分,这就是为什么我以这种方式将其保留在那里。
另外它不是多余的,t 正在评估相同但它需要能够打印数字。它会在打印之前爆发。
在某种意义上是冗余的,它可以同样是 while True:
,这取决于检查。
啊,我想这是真的。它确实依赖break
才能正常工作。但是,如果您将其更改为True
,那么else
将成为冗余部分并会破坏它。试图将else
作为while
的一部分保留在答案中的问题所固有。以上是关于使用 else 语句的语法无效的主要内容,如果未能解决你的问题,请参考以下文章