当时只有一个布尔值允许为True吗?

时间:2019-09-04 16:51:53

标签: python

你好,我无法解决这个问题。我真的很愚蠢。

在此布尔值列表中,用户可以与之交互,并且此时仅允许他具有一个True。如果一个为True,则其他四个为False

scatter_is_01 = False
scatter_is_02 = False
scatter_is_03 = False
scatter_is_04 = False
scatter_is_05 = True
    if scatter_is_01==True: 
        scatter_is_02 = False
        scatter_is_03 = False
        scatter_is_04 = False
        scatter_is_05 = False

    if scatter_is_02==True:
        scatter_is_01 = False
        scatter_is_03 = False
        scatter_is_04 = False
        scatter_is_05 = False

    if scatter_is_03==True:
        scatter_is_02 = False
        scatter_is_01 = False
        scatter_is_04 = False
        scatter_is_05 = False

    if scatter_is_04==True:
        scatter_is_02 = False
        scatter_is_03 = False
        scatter_is_01 = False
        scatter_is_05 = False

此解决方案很愚蠢,甚至无法正常工作。因为如果用户要再次将另一个值设置为true,则必须将其再次设置为false。

有人可以教我吗?

scatter_is_xx必须为布尔值,因为api仅使用布尔值创建切换按钮。

3 个答案:

答案 0 :(得分:2)

您选择了一个尴尬的表示形式以供参考。如果标志一次可以恰好选择一项,则只需直接表示它:一个值在1-5范围内的变量。

scatter = 4

表达与您以前的信息完全相同

scatter_is_04 = True
scatter_is_02 = False
scatter_is_03 = False
scatter_is_01 = False
scatter_is_05 = False

要检查曾经是单个标志的内容,

if scatter_is_04:

现在是

if scatter == 4:

毕竟,看看您的变量名。您所写的名字很好地描述了您所需的信息。以更方便使用的方式编写它。

答案 1 :(得分:0)

我敢肯定,您可以通过多种方式解决此问题-但是枚举是一个相当优雅的解决方案;

from enum import Enum

class Scatter(Enum):
    first = 1
    second = 2
    third = 3
    forth = 4
    fifth = 5

    @property
    def is_01(self):
        return self is Scatter.first

    @property
    def is_02(self):
        return self is Scatter.second

scatter = Scatter.first

print(scatter is Scatter.first)     # True
print(scatter is Scatter.second)    # False
print(scatter is Scatter.third)     # False

print(scatter.is_01)        # True
print(scatter.is_02)        # False

答案 2 :(得分:0)

您可以使用一个简单的列表来存储值而不是变量:

scatter_is_01 = False
scatter_is_02 = False
scatter_is_03 = False
scatter_is_04 = False
scatter_is_05 = True

# use a list instead of seperate variables

# Storing all the scatter variables in a list
scatter = [scatter_is_01,scatter_is_02,scatter_is_03,scatter_is_04,scatter_is_05] 
# you can also directly define the it as -
# scatter = [False,False,False,False,True]

def scatter_changer(index): # index starts from 0
    for i in range(len(scatter)):
        if( i == index ):
            scatter[i] = True
        else:
            scatter[i] = False 

scatter_changer(1)      # this sets scatter_is_02 to true and all others false