P9459 浴眼盯真 题解
由于我不会使用正则表达式,所以我只能使用基础 Python 语法 QwQ。
[input().split()for _ in range(int(input()))]
是个列表生成器,效果是产生一个长度为 \(T\) 的列表,列表的元素是以每一行以空格为分割符的字符串列表。
for(a,b,c,d)in[]
可以用 \(a,b,c,d\) 来复制列表中每个元素的第 \(0,1,2,3\) 个元素,非常方便。
判断 \(a_0=b_0=\texttt{y},c=\texttt{ding},d=\texttt{zhen}\) 可以使用 \(4\) 个 if
进行判断,但是那样子太长了。想到把 \(4\) 个字符串放在一起去比较,可以写出 a[0]+b[0]+c+d=="yydingzhen"
这样的语句,可是原题并没有保证 \(c,d\) 的长度,也就是说出现 \(c=\texttt{dingz},d=\texttt{hen}\) 这种情况也会被判过,这可不行哟,所以在中间加个空格隔开就行了。
一般来说 Python 的三目是 T if cond else F
(若 cond
为 True
返回 T
,否则返回 F
),但是大多数情况下都可以采用 cond and T or F
来代替。原理是 and
的返回值是后者,而 or
的返回值是前者。什么时候会出现问题呢?当 T
为 0
(零)()
(空元组)[]
(空列表){}
(空字典)None
(空无类型)时,这些会被 Python
当作 False
处理,此时 cond and T
永远为 False
,这样只会返回 F
了。
for(a,b,c,d)in[input().split()for _ in range(int(input()))]:print(a[0]+c+" "+b[0]+d=="yding yzhen"and"Yes"or"No")