我正在测试3个不同的布尔变量(用户决定真/假)。我的函数创建一个不同的字母序列,并根据这些布尔值添加大写字母/数字/特殊字符。我觉得必须有一种高效/聪明的方法来实现这一点,而不是下面的方法:
if capital_letters and digits and special_char:
# creates string with random capital letters, digits, and special chars
elif capital_letters and digits and not special_char:
# creates string with capital letters, digits, but no special chars
elif capital_letters and not digits and not special_char:
# creates string with capital letters but no digits nor special chars
elif not capital_letters and digits and special_char:
# contains digits and special char but no capital letters
.... 将继续运行,直到它满足所有组合(这将是3*3*3 = 27不同的语句正确吗?)
发布于 2021-01-11 02:08:43
您可以检查每个条件一次,并根据它聚合可能的字符,最后随机化:
import string
chars = ""
if capital_letters:
chars += string.ascii_uppercase
if digits:
chars += string.digits
if special_char:
chars += string.punctuation
create_string(chars)发布于 2021-01-11 02:13:28
你可以将3个布尔变量转换成一个整数(只使用他的前3位),然后你可以用更优雅的方式编写你的if...elif....elif。尝试使用此代码
result = int(capital_letters)
result = (result << 1) + int(digits)
result = (result << 1) + int(special_char)如果结果为0意味着其中3个为假,
1在二进制查询中为'001‘,因此它表示special_char是唯一真
.
5是二进制是'101‘,因此它意味着capital_letters和special_char为真
等等。
发布于 2021-01-11 02:14:13
conditions = {
'capital_letters':capital_letters,
'digits':digits,
'special_char':special_char
}
for key in conditions:
if conditions[key] == True:
print (key)在您的dict中,您将标签存储为键,并将与字符串相关的boleans存储为值。
然后,循环遍历dict键,检查bolean,如果为True,则打印标签(键)。
https://stackoverflow.com/questions/65656624
复制相似问题