如果其他速记需要速记建议
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 的答案以获得更优雅的解决方案:+=
增量赋值运算符用于评估表达式中的 True
或 False
- 因此左侧需要 -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
【讨论】:
以上是关于如果其他速记需要速记建议的主要内容,如果未能解决你的问题,请参考以下文章