idcter超过时为什么不重置为0 maxid?
maxid=9999
idcter=9999
idcter += 1 if(idcter <= maxid) else 0
print('this is good: ' + str(idcter))
idcter += 1 if(idcter <= maxid) else 0
print('now this is weird: ' + str(idcter))
idcter=10000
idcter = idcter + 1 if(idcter <= maxid) else 0
print("that's better: " + str(idcter))
Run Code Online (Sandbox Code Playgroud)
输出:
this is good: 10000
now this is weird: 10000
that's better: 0
Run Code Online (Sandbox Code Playgroud)
所以这是一个简单的修复,但是为什么在超过之后会不会重置maxid?
运算符的优先级
idcter += 1 if (idcter <= maxid) else 0
Run Code Online (Sandbox Code Playgroud)
通过以下分组可视化
idcter += (1 if (idcter <= maxid) else 0)
Run Code Online (Sandbox Code Playgroud)
这意味着如果条件不成立, 0则递增.
比较那个
idcter = idcter + 1 if (idcter <= maxid) else 0
# ==
idcter = (idcter + 1) if (idcter <= maxid) else 0
Run Code Online (Sandbox Code Playgroud)
您在同一案例中分配 0 给结果的位置.
顺便说一句,10000已经超过你maxid了9999.实现这种重置增量的一种典型方法是使用模运算符.在你的情况下:
idcter = (idcter+1) % (maxid+1) # 9997 -> 9998 -> 9999 -> 0 -> 1
Run Code Online (Sandbox Code Playgroud)