回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我正在尝试创建一段代码,用于观察计数器的输出,如:</p>
<pre><code>a1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]
</code></pre>
<p>我希望代码能够统计总数,并告诉我遗漏了多少计数,例如,如果发生这种情况:</p>
<pre><code>a1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,12,13,14,15,16,17,18,19,20,21,22,23,24, 25, 26, 5, 6, 7, 8, 9, 10, 11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,1,2]
</code></pre>
<p>我会得到总共92个,但得到的反馈是8个缺失</p>
<p>我已经非常熟悉以下代码:</p>
<pre><code>Blk_Tot = 0
CBN = 0
LBN = 0
x = 0
y = 0
z = 0
MissedBlocks = 0
for i in range(len(a1)):
CBN = a1[i]
if CBN - LBN <= 0:
if LBN == 30:
y = 30 - abs(CBN - LBN)
elif LBN < 30:
z = 30 - LBN
y = 30 - abs(CBN - LBN) + z
print(z)
Blk_Tot = Blk_Tot + y
else:
x = CBN - LBN
Blk_Tot = Blk_Tot + x
if x > 1:
MissedBlocks = MissedBlocks - 1 + x
LBN = CBN
print(Blk_Tot)
print(MissedBlocks)
</code></pre>
<p>如果我删除1到30之间的任何一个,它都能很好地工作,但是如果我删除30,比如说29,30,1,2,它就会中断。我不希望它能够连续删除30个,并且仍然能够得到一个合适的总数</p>
<p>有人对如何实现这一目标有什么想法吗?我觉得我错过了一个显而易见的答案:D</p>
<p>对不起,我想我不清楚,a1是一个来自外部设备的计数器,它从1计数到30,然后再绕到1。每个计数实际上是消息的一部分,以表明消息已被接收;比如说12 4,我知道第三条信息不见了。我想做的是找出应该收到的总数,以及从计数中漏掉多少</p>
<p>更新以下帖子中的想法后,另一种方法可能是:</p>
<p>输入:</p>
<p>123456</p>
<p>清单[1,2,3,4,5,6]</p>
<p>1.检查第一个输入,查看它在列表的哪个部分,然后从那里开始(如果我们不是从零开始)</p>
<p>2.每次接收到输入时,检查是否与数组中的下一个值匹配</p>
<p>3.如果没有,那么需要多少步骤才能找到该值</p>