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)
解决方案!这正是我的想法。谢谢你的回答,很好!伟大的灵感。