擅长:python、mysql、java
<p>您正在处理一个逻辑错误。让我们从当前版本(第二版)开始:</p>
<pre><code>if a == "before" or a == "after":
</code></pre>
<p>这就像英语一样,如果<code>a</code>是<code>"before"</code>或<code>"after"</code>,则条件有效。但是,您的第一个(不正确)版本是:</p>
<pre><code>if a != "before" or a != "after":
</code></pre>
<p>这将始终是<code>True</code>,因为<code>a</code>不能有2个值,所以<code>or</code>的一个分支将始终是<code>True</code></p>
<hr/>
<p><strong>解决方案</strong>:</p>
<p>让我们应用<a href="https://en.wikipedia.org/wiki/De_Morgan%27s_laws" rel="nofollow noreferrer">De Morgan's Laws</a>来看看如何反转条件逻辑。来表示正确案例的反向逻辑</p>
<pre><code>A or B
</code></pre>
<p>我们需要</p>
<pre><code>not (A or B)
</code></pre>
<p>根据法律规定</p>
<pre><code>(not A) and (not B)
</code></pre>
<p>因此,第一个<code>if</code>语句的正确版本应该是:</p>
<pre><code>if a != "before" and a != "after": # notice the and instead of the or
</code></pre>
<hr/>
<p><strong>旁注</strong>:要简化针对多个值的测试,请尝试使用以下方法:</p>
<pre><code>if a in ("before", "after"):
</code></pre>
<p>或</p>
<pre><code>if a not in ("before", "after"):
</code></pre>
<p>它读起来容易得多,因此也更容易推理</p>