我有一个问题,我想返回一个基于结果的值。但要做到这一点,我需要有多个返回语句,如下所示:
if w1 > w2: return 'Computer Wins!!'
elif w1 == w2: return 'Tie War!!'
else:
return 'I Win!!'
但我看到有人这样说:
return ('I Win!!', 'Computer Wins!!', 'Tie War!!')[(w1>w2)-(w1==w2)]
因此,我不确定第二段代码是如何工作的。你能解释一下吗?谢谢
Tags:
第二种方法很聪明,但出于可读性考虑,我不推荐它:
让我们把代码分解一下
注意:
True
在Python中计算为1
和False
到0
病例
如果
(w1 > w2)
为真(1),那么(w1 == w2)
必然为假(0)-&燃气轮机;[(w1>;w2)-(w1==w2)]
-&燃气轮机;[1-0]等于[1]
-&燃气轮机;因此
('I Win!!', 'Computer Wins!!', 'Tie War!!')[1]
-&燃气轮机;结果是
'Computer Win!!'
如果
(w1 > w2)
为假(0),则(w1 == w2)
必然为假(0)-&燃气轮机;[(w1>;w2)-(w1==w2)]
-&燃气轮机;[0-0]等于[0]
-&燃气轮机;因此
('I Win!!', 'Computer Wins!!', 'Tie War!!')[0]
-&燃气轮机;结果是
'I win!'
如果
(w1 > w2)
为假(0)而(w1 == w2)
为真(1),则-&燃气轮机;[(w1>;w2)-(w1==w2)]
-&燃气轮机;[0-1]等于[-1]
所以
('I Win!!', 'Computer Wins!!', 'Tie War!!')[-1]
给出了最后一项,即'Tie War!!'
此表达式使用所有三个返回值构建一个
tuple
,并通过对bool
执行减法来访问正确的返回值。它使用的是Python中的算术运算将True
解释为1,将False
解释为0这一事实对于计算机win,
w1>w2
为true,w1==w2
为false,因此(w1>w2) - (w1==w2)
=1-0=1,返回元组位置1处的元素对于tie,操作的结果是-1,遵循相同的逻辑,因此返回元组的最后一个元素。同样,对于玩家赢了,操作的计算结果为0,因此返回元组的第一个元素
这被认为是一种不好的做法,因为它比使用if/elif/else语句更难阅读,您必须问这个问题才能理解逻辑
相关问题 更多 >
编程相关推荐