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(若 condTrue 返回 T,否则返回 F),但是大多数情况下都可以采用 cond and T or F 来代替。原理是 and 的返回值是后者,而 or 的返回值是前者。什么时候会出现问题呢?当 T0(零)()(空元组)[](空列表){}(空字典)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")
posted @ 2023-07-29 14:32  蒟酱  阅读(66)  评论(0编辑  收藏  举报