【问题标题】:cannot assign to conditional expression不能赋值给条件表达式
【发布时间】:2019-12-12 20:53:21
【问题描述】:
if i+1 < stages[i]: tried[i] = (tried[i] + 1) if tried[i] != None else tried[i] = 0

如果 i+1

我收到cannot assign to conditional expression 的错误。不知道我做错了哪一部分。

【问题讨论】:

  • 为什么不用“正常的”if else 语句来代替?
  • true_expr if cond else false_expr 仅适用于 表达式。赋值不是表达式;使用完整的if 语句,或提取if 表达式之外的赋值。
  • ....你能尝试正确格式化它吗...因为可能有问题
  • @Amadan 显然有些问题是错误的,但很公平,如果最后一个语句只是像下面的答案那样转到0,它会起作用。尽管如此,在第一个 if 语句之后的换行符会有所帮助。混合if 和条件的可读性绝对不是最好的。
  • @Amadan :) 同意。

标签: python


【解决方案1】:

由于您尝试使用多个条件表达式完成分配,您正在寻找的整体结构是这样的: 变量 = 表达式 条件 else 表达式 条件 ... else 表达式。您甚至可以使用括号来提醒自己如何解析它:variable = (expression condition else expression 条件 ...否则表达式)。总的条件表达式必须以“else”结尾。

例如,我有以下代码:

x = 5
if x == 1:
    a = '1'
elif x == 2:
    a = '2'
else:
    a = '3'
print(a)

使用条件表达式,变为:

x = 5
a = '1' if x == 1 else '2' if x == 2 else '3'
print(a)

我不确定你的赋值和条件表达式是什么

if i+1 < stages[i]: tried[i] = (tried[i] + 1) if tried[i] != None else tried[i] = 0

展开后的样子,因为缺少一些信息:

missing_expression = '?'
if i+1 < stages[i]:
    tried[i] = (tried[i] + 1)
elif tried[i] != None:
    tried[i] = missing_expression
else:
    tried[i] = 0

提供缺少的表达式时,您的条件表达式应如下所示:

tried[i] = (tried[i] + 1) if i+1 < stages[i] else missing_expression if tried[i] != None else 0

【讨论】:

    【解决方案2】:

    应该是:

    if i+1 < stages[i]: tried[i] = (tried[i] + 1) if tried[i] != None else 0
    

    没有最后一个triend[i] = 0,只有0(同样triend 也可能是错误的)。

    【讨论】:

    • 另外,作为一个额外的建议:如果你使用-1作为tried[i]的初始化,这可能会变成一个iftried[i] = (tried[i] + 1) if i + 1 &lt; stages[i] else -1。此外,如果您可以预先将tried[i] 初始化为-1,您可以简单地编写:tried[i] += int(i + 1 &lt; stages[i])
    猜你喜欢
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 2013-04-21
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    • 2019-11-15
    相关资源
    最近更新 更多