Python中的[1:]和sum(b'%a'%s)%34是什么?

问题描述 投票:0回答:1
for s in[*open(i:=0)][1:]:i+=1;print(f'Case #{i}:',sum(b'%a'%s)%34)

我无法理解上面的代码..我搜索了一下,现在我知道 open(0) 与 sys.stdin 相同,并且 := 是 warlus 运算符,但我仍然不知道 [1:] 和 sum(b '%a'%s)%34,以及该代码的工作原理。

python list sum
1个回答
0
投票

这是一个更易读的版本:

for s in [*open(i:=0)][1:]:
    i += 1
    print(f'Case #{i}:', sum(b'%a' % s) % 34)

正如你所说,

open(0)
打开标准输入进行读取。
[*open(0)]
将所有标准输入解压到一个列表中,每个条目一行。
i:=0
同时也将变量
i
初始化为
0
;这只是高尔夫代码的简写。
[1:]
切片列表以省略第一行。

%a
格式化程序使用
ascii
转换行:

[..] 返回包含对象的可打印表示形式的字符串,但使用

repr()
\x
\u
转义对
\U
返回的字符串中的非 ASCII 字符进行转义。这会生成一个类似于 Python 2 中
repr()
返回的字符串。

>>> '%a' % 'foobar'
"'foobar'"

使用

b''
字符串可得到
bytes

bytes
实际上只是整数序列(字节值)。
sum
对整数序列求和。
% 34
mod-34s 结果:

>>> sum(b'%a' % 'foobar')
711
>>> sum(b'%a' % 'foobar') % 34
31
© www.soinside.com 2019 - 2024. All rights reserved.