在Python上查看此代码:
a='a'
print(a==('a' or 'b'))
a='b'
print(a==('a' or 'b'))
输出将是:
True
False
你能解释一下为什么请你吗?
谢谢!
答案 0 :(得分:1)
要将其分解,首先评估括号。
所以,"a" or "b"
- “a”是真实的,并且会自行返回。 “b”永远不会被评估,因为非空字符串将始终是真实的。
为了更好地了解这一点,请在提示中单独运行
>>> ('a' or 'b')
'a'
因此,您最终得到'a' == 'a'
- 这是真的
在第二个例子中,a设置为'b',所以同样的事情发生,只有'b'≠'a'所以它返回false
答案 1 :(得分:1)
@ rm-vanda是对的。
我相信使用列表或元组可以更好地找到您期望的行为:
public class RandomNumbers : MonoBehaviour {
public Transform mCanvas;
public Text[] numbers;
int idx = 0;
void Start()
{
//Randomizes the list of numbers
Shuffle(numbers);
StartCoroutine("CreateNum");
}
IEnumerator CreateNum()
{
while (idx < numbers.Length)
{
Text g = Instantiate(numbers[idx], new Vector3(Random.Range(-100, 100), Random.Range(-100, 100), 0), Quaternion.identity);
g.transform.SetParent(mCanvas, false);
yield return new WaitForSeconds(2f);
Destroy(g);
++idx;
}
}
//This is called a Fisher-Yates shuffle https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle
//This function can be used with any Array or List you send it.
private static void Shuffle<T>(IList<T> list)
{
int n = list.Count;
while (n > 1) {
n--;
int k = Random.Range(0, n + 1);
T value = list[k];
list[k] = list[n];
list[n] = value;
}
}
}
答案 2 :(得分:0)
当您使用'a' or 'b'
这样的表达式时,它将返回不是False
的第一个值。话虽如此,在两种情况下,表达式都将返回'a'
。
我假设你可以自己弄清楚其余部分,但第一个是True
,因为你等同于'a' == 'a'
,而等于'b' == 'a'
。
答案 3 :(得分:0)
('a' or 'b')
将始终解析为'a'
,因为'a'
在布尔上下文中被解析为True
。
x or y
为True(= x
的不同,x
,None
,{{1},则 False
会返回""
的值}},(,)
或[]
),否则返回{}
的值。