首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试3个布尔变量的更有效的方法?

测试3个布尔变量的更有效的方法?
EN

Stack Overflow用户
提问于 2021-01-11 02:01:49
回答 3查看 72关注 0票数 0

我正在测试3个不同的布尔变量(用户决定真/假)。我的函数创建一个不同的字母序列,并根据这些布尔值添加大写字母/数字/特殊字符。我觉得必须有一种高效/聪明的方法来实现这一点,而不是下面的方法:

代码语言:javascript
复制
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不同的语句正确吗?)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-01-11 02:08:43

您可以检查每个条件一次,并根据它聚合可能的字符,最后随机化:

代码语言:javascript
复制
import string

chars = ""
if capital_letters:
    chars += string.ascii_uppercase
if digits:
    chars += string.digits
if special_char:
    chars += string.punctuation

create_string(chars)
票数 2
EN

Stack Overflow用户

发布于 2021-01-11 02:13:28

你可以将3个布尔变量转换成一个整数(只使用他的前3位),然后你可以用更优雅的方式编写你的if...elif....elif。尝试使用此代码

代码语言:javascript
复制
result = int(capital_letters)
result = (result << 1) + int(digits)
result = (result << 1) + int(special_char)

如果结果为0意味着其中3个为假,

1在二进制查询中为'001‘,因此它表示special_char是唯一真

.

5是二进制是'101‘,因此它意味着capital_lettersspecial_char为真

等等。

票数 1
EN

Stack Overflow用户

发布于 2021-01-11 02:14:13

代码语言:javascript
复制
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,则打印标签(键)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65656624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档