Python 您可以通过多次赋值对一组变量随机赋值True或False吗?

Python 您可以通过多次赋值对一组变量随机赋值True或False吗?,python,Python,我想为第一个变量赋值True或False,然后让第二个变量赋值与第一个变量赋值相反。如果第一个变量的值为False,则第二个变量应为True,反之亦然。我的第一个想法是使用if/else语句,但很明显,任务太多了: 示例1: import random if random.choice([True, False]): player_turn = True computer_turn = False else: player_turn = False computer_turn

我想为第一个变量赋值
True
False
,然后让第二个变量赋值与第一个变量赋值相反。如果第一个变量的值为
False
,则第二个变量应为
True
,反之亦然。我的第一个想法是使用if/else语句,但很明显,任务太多了:

示例1:

import random

if random.choice([True, False]):
  player_turn = True
  computer_turn = False
else:
  player_turn = False
  computer_turn = True


print(player_turn)
print(computer_turn)
import random

player_turn = random.choice([True, False])
computer_turn = not player_turn

print(player_turn)
print(computer_turn)
然后,我决定利用第一个变量赋值的信息来简化逻辑:

示例2:

import random

if random.choice([True, False]):
  player_turn = True
  computer_turn = False
else:
  player_turn = False
  computer_turn = True


print(player_turn)
print(computer_turn)
import random

player_turn = random.choice([True, False])
computer_turn = not player_turn

print(player_turn)
print(computer_turn)
有没有可能进一步降低这一点?也许,通过利用多个赋值使其仅为一行代码?

如果您确实必须:

x, y = [i[1] if i[0]==0 else not i[1] for i in enumerate([random.choice([True, False])]*2)]
我想你会觉得这两行其实没那么糟糕。

如果你真的必须这样做的话:

x, y = [i[1] if i[0]==0 else not i[1] for i in enumerate([random.choice([True, False])]*2)]

我想你会觉得这两行其实没那么糟糕。

使用
random.sample
而不是
random.choice
。由于它选择值而不进行替换,因此第二个元素必须是未首先选择的值

player_turn, computer_turn = random.sample([True, False], 2)
或者,使用赋值表达式(Python 3.8或更高版本),以便可以对
random返回的任何值求反。选择

player_turn, computer_turn = (c := random.choice([True, False]), not c)

但在实践中,不要维护两个值必须保持同步的变量。一个变量表示轮到谁就足够了。

使用
random.sample
而不是
random.choice
。由于它选择值而不进行替换,因此第二个元素必须是未首先选择的值

player_turn, computer_turn = random.sample([True, False], 2)
或者,使用赋值表达式(Python 3.8或更高版本),以便可以对
random返回的任何值求反。选择

player_turn, computer_turn = (c := random.choice([True, False]), not c)

但在实践中,不要维护两个值必须保持同步的变量。一个变量表示轮到谁就够了。

你真的需要这两个变量吗?如果你想进一步减少它,你可以只保留一个变量,并且自动知道另一个值是什么,而不需要保存到另一个变量好问题!我想我并不需要两个变量。尽管如此,在风格上更倾向于分别提及
player\u-turn
computer\u-turn
,而不是只处理一个
True
/
False
状态,即使结果是相同的。您也可以使用enum样式,因此如果turn是turn,您将编写
。player:
等等。,看,你真的需要这两个变量吗?如果你想进一步减少它,你可以只保留一个变量,并且自动知道另一个值是什么,而不需要保存到另一个变量好问题!我想我并不需要两个变量。尽管如此,在风格上更倾向于分别提及
player\u-turn
computer\u-turn
,而不是只处理一个
True
/
False
状态,即使结果是相同的。您也可以使用enum样式,因此如果turn是turn,您将编写
。player:
等等。,谢谢你的回答!这就成功了。然而,我确实明白你保留我的两行代码的意义:)仅仅因为这是一个。。。低于标准的一行并不意味着没有好的一行。谢谢你的回答!这就成功了。然而,我确实明白你保留我的两行代码的意义:)仅仅因为这是一个。。。低于标准的一行程序并不意味着没有好的一行程序。我喜欢你用
random.sample([True,False],2)
的解决方案!这正是我的想法。谢谢你的回答,很好!非常好的灵感。我非常喜欢你的
random.sample([True,False],2)
解决方案!这正是我的想法。谢谢你的回答,很好!伟大的灵感。