Pythonif语句优化

Python if statement optimisation

我正在制作一个非常基本的密码生成器,它要求用户在密码中输入他们想要的某些内容(例如,用户可以选择是否需要标点符号)。我已经完成了这个程序,它运行得很好,但它包括一段 if 和语句:

if p == "N" and ucl == "N" and lcl == "N":
    print("Invalid requirements ")
if p == "N" and ucl == "N" and lcl == "Y":
    x = lclList
    generate(x)
if p == "N" and ucl == "Y" and lcl == "N":
    x = uclList
    generate(x)
if p == "N" and ucl == "Y" and lcl == "Y":
    x = uclList + lclList
    generate(x)
if p == "Y" and ucl == "Y" and lcl == "Y":
    x = pList + uclList + lclList
    generate(x)
if p == "Y" and ucl == "N" and lcl == "Y":
    x = pList + lclList
    generate(x)
if p == "Y" and ucl == "Y" and lcl == "N":
    x = pList + uclList
    generate(x)
if p == "Y" and ucl == "N" and lcl == "N":
    x = pList
    generate(x)

正如我所说,它运行良好,但看起来确实很混乱且效率低下 - 我已经可以想象如果我使用 4 个要求会有多么复杂,上帝禁止再这样了。是否有另一种编程方式可以使其可重复且更高效?

旁注,这几乎是我编写的第一个功能齐全的程序,所以如果我违反了一些日内瓦编程约定,请不要感到震惊。

您可以将 x 初始化为一个空列表,然后根据用户的选择,添加他们想要添加的内容:

x = []


if lcl == "Y":
    x += lclList
if ucl == "Y":
    x += uclList
if p == "Y":
    x += pList

generate(x)

这是您的第一个功能齐全的程序,所以我会给您一些提示:

  1. 使用布尔值(True/False)来确定是或否的状态(当前为字符串)。
  2. 嵌套排他性 if 语句时,使用 elif。

您的代码(已更正)应如下所示(假设 p、lcl 和 ucl 是布尔值,而不是字符串):

# Init empty list.
x = []

# Append elements to your list.
if lcl:
    x += lclList
if ucl:
    x += uclList
if p:
    x += pList

# Check if selections are valid (x won't be an empty list, you can use if statement too) or print error message.
if x:
    generate(x)
else:
    print("Invalid requirements ")

希望这可以帮助您改进编码!