如果其他速记需要速记建议

Posted

技术标签:

【中文标题】如果其他速记需要速记建议【英文标题】:Advice needed on shorthand if else shorthand 【发布时间】:2019-10-02 00:55:45 【问题描述】:

我正在尝试以简写形式编写 if else 语句。 一个 if else 来检查一个值,如果它没有达到一个值则增加,否则减去一个设定的数字。

作为 if else 这可行,但尝试将此作为速记版本并被卡住。

在这种情况下您不能使用 -= 或 += 吗?任何有助于理解的帮助将不胜感激。

已尝试 day-=7 if day == 7 else day+=1 - 但知道这是错误的,因为左侧已经引用了 var。

如果其他工作正常

day = 5
if day == 7:
    day-=7
else:
    day+=1

试图用简写形式写出这个,但我在正确的一天 +=1 得到一个错误,因为这显然是不正确的。寻找一些关于如果 day != 7 时如何增加 day 值的建议

day = 5
day-=7 if day == 7 else +=1

+=1 会引发错误。

预计第 6 天

【问题讨论】:

查看模数...here 是一些示例 【参考方案1】:
day += -7 if day == 7 else 1

您的阅读方式是“如果day == 7,则在day 上加负7,否则,在day 上加1”

Dagorodir 的原始答案不起作用,因为如果day != 7,它将从当前值中减去 (day + 1)。因此,使用您的示例,day 的起始值为 5,从另一个答案运行代码的结果是 -1

【讨论】:

【参考方案2】:

您说对了,在 Python 中的“条件表达式”的上下文中,您不能在某些地方使用赋值运算符 -=+=。我的理解是,简写 if-else 是一个表达式,而不是一个语句,如您最初的示例所示。您不能在右侧进行赋值,而是在左侧指定返回值(如果为 false),如果为 true 则指定返回值(或分配给变量)。

在您的第二次尝试中,在右侧,您使用了没有变量的赋值运算符。如果您希望条件评估采用更复杂的值,您可以分配给变量:

day = 5
ret_false = day + 1
ret_true = day - 7
ret_true if day == 7 else ret_false

请参阅 Samantha 的答案以获得更优雅的解决方案:+= 增量赋值运算符用于评估表达式中的 TrueFalse - 因此左侧需要 -7,而 += 1以其他方式分配。我在她的回答中重复解决方案的倒数来说明语法的机制;在左侧使用递减的 -= 运算符会强制在右侧使用它 -

day -= 7 if day == 7 else -1 

按照上面的逻辑,我下面的原始建议使用左边的递减-=赋值运算符;如果为真,则返回day-7,如果为假,则返回day-(day+1)。感谢 Samantha 指出这一点。

原创

试试:

day -= 7 if day == 7 else day + 1

对此有很多问题:例如here 和here。

【讨论】:

【参考方案3】:

对我来说这是最易读的,使用模算术

day = 5
day = (day + 1) % 7
print(day)
# result 6

day = 6
day = (day + 1) % 7
print(day)
# result 0

【讨论】:

【参考方案4】:

我有两个选择:

day = day + (-7 if day == 7 else 1)

day = day -7 if day == 7 else day + 1

【讨论】:

以上是关于如果其他速记需要速记建议的主要内容,如果未能解决你的问题,请参考以下文章

window.getComputedStyle 不适用于除 Chrome 之外的其他浏览器中的速记属性

Linux命令速记

是否有一种速记方法来更新球拍中的特定结构字段?

Webpack知识点速记

数据结构 速记篇

如果对象存在,则调用方法的 Javascript 速记