擅长:python、mysql、java
<p>表单<code>UserPassword == UserPassword.isupper()</code>中的检查将不起作用。在这里,您将比较一个字符串密码和一个布尔值,<code>isX()</code>的结果。因此,所有这些检查都是<code>False</code>,并且您可以得到<code>else</code>分支(如果长度可以接受的话)。在</p>
<p>在大写和小写字符的情况下,可以使用<code>UserPassword == UserPassword.upper()</code>(只使用<code>upper</code>,而不是{<cd7>},类似于{<cd8>}),也就是说,将密码与其大写/小写版本进行比较,但对于数字,这是行不通的。相反,您可以使用<code>any</code>来检查是否有任何字符是数字:<code>any(c.isdigit() for c in UserPassword)</code></p>
<p>编辑:您可以使用<code>UserPassword == UserPassword.upper()</code>检查密码是否包含任何小写字母,这有点不直观。相反,我建议在所有检查中使用<code>any</code>,并将条件倒置,这样“正”的情况在<code>if</code>的主体中,而“否定”的情况在其他主体中。像这样:</p>
<pre><code>up = UserPassword
if 8 <= len(up) <= 24 and any(c.isupper() for c in up) and any(c.islower() for c in up) and any(c.isdigit() for c in up) and any(c.isalpha() for c in up):
</code></pre>
<p>或者简短一点,使用函数列表:</p>
^{pr2}$