【问题标题】:Python : Randomly choose a boolean from an array and change its valuePython:从数组中随机选择一个布尔值并更改其值
【发布时间】:2021-08-19 17:57:51
【问题描述】:

我想知道是否可以创建与引用的代码类似的代码。

我的意思是如果可以用布尔值 (False) 创建一个数组,只选择一个 (随机) 并更改它的值 (为 True) 然后就可以使用它了吗?

第一个随机选择只能在程序启动时进行一次。

Gentleman = False
Daughter = False
Madam = False

character_list = [Gentleman, Daughter, Madam] # an array with the bools above

for character in characters_list:
    character = random.choice(characters_list) # Randomly pick a character from the list
    character = True # Set the character as True

    if Madam == True:
        ...
        Madam = False
        Daughter = True
        ...

    if Gentleman == True:
        ...
        Gentleman = False
        Madam = True
        ...

    if Daughter == True:
        ...
        Daughter = False
        Gentleman = True
        ...

PS:我知道我的代码是错误的,但这只是为了说明我想做什么

感谢您的帮助

更新

所以在尝试了评论中写的内容后,我发现自己遇到了问题

Gentleman = False
Daughter = False
Madam = False

character_list = [Gentleman, Daughter, Madam] # an array with the bools above
print(characters_list)
characters_list[random.randint(0, len(characters_list)-1)] = True
print(characters_list)

print("Starting up ...")

if Madam == True:
    print("Hello Madam")
    ...
    Madam = False
    Daughter = True
    ...

输出

[False, False, False]

[False, False, True]

Starting up ...

由于我没有进入if Madam == True:,我想我不太明白如何使用它,我应该怎么做才能让我的代码明白女士已经变成了True并进入了if语句

(顺便说一句,我是 Python 新手)

【问题讨论】:

    标签: python arrays random boolean


    【解决方案1】:

    要使用布尔值 (False) 创建一个数组并随机更改其中一个值(为 True),请尝试:

    代码:

    import random
    
    my_list = [False]*5
    print(my_list)
    my_list[random.randint(0,len(my_list)-1)] = True
    print(my_list)
    

    输入

    [False, False, False, False, False]
    

    输出

    [False, True, False, False, False]
    
    

    说明

    1. 使用random 模块的randint() 函数在列表中随机选择一个介于0 和length-1 之间的数字
    2. 使用此数字作为索引,将列表中的随机元素替换为新的布尔值

    更新

    您的代码似乎需要使用 python dict,因此请尝试将上述逻辑修改为:

    代码

    import random
    
    my_dict = {'Gentleman': False, 'Daughter': False, 'Madam': False}
    print(my_dict)
    my_dict[random.choice(list(my_dict.keys()))] = True
    print(my_dict)
    
    if my_dict['Madam'] == True:
        print("Hello Madam")
        my_dict['Madam'] = False
        my_dict['Daughter'] = True
    
    print(my_dict)
    

    输入

    {'Gentleman': False, 'Daughter': False, 'Madam': False}
    

    输出

    # initial values
    {'Gentleman': False, 'Daughter': False, 'Madam': False}
    
    # after random value is set to True
    {'Gentleman': False, 'Daughter': False, 'Madam': True}
    
    #inside the if condition
    Hello Madam
    {'Gentleman': False, 'Daughter': True, 'Madam': False}
    

    说明

    1. 将您的元素初始化为 dict,其值为布尔值,而不是列表
    2. 使用random模块的random.choice()函数从dict中随机选择一个key
    3. 使用此键将 dict 中的随机布尔值替换为新的布尔值

    【讨论】:

    • 我试图复制你的解释,但似乎我不知道如何将它应用到我的代码中。我不明白如何调用/使用已变为 True 的字符
    • @PabloS 从更新中我了解到,您希望将此 boolean 值与一个人相关联,您应该为此使用 python dict,我会更新答案
    【解决方案2】:

    这不是太复杂。本质上,您要做的是在列表中选择一个随机索引,然后更改该项目。例如,

    import random
    
    bool_list = [False, False, False]
    
    list_length = len(bool_list)
    
    index = random.randint(list_length)
    
    bool_list[index] = True
    

    或者,包装成一个函数:

    def set_random_true(list_):
        list_len = len(list_)
        index = random.randint(index)
        list_[index] = True
    

    然后,你可以这样使用它:

    import random
    
    def set_random_true(list_):
        --snip--
    
    my_list = [False, False, False]
    set_random_true(my_list)
    
    print(my_list)
    

    这将打印[True, False, False][False, True, False][False, False, True]。希望这有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-21
      • 1970-01-01
      • 2012-12-09
      • 2019-04-30
      • 1970-01-01
      • 2017-07-31
      • 2011-09-22
      • 2015-01-09
      相关资源
      最近更新 更多