我正在寻找at this python program并且几乎了解其流程,但我无法理解以下部分中的ch[:prefix_len%len(ch)]
:
else:
prefix = ch * (prefix_len/len(ch)) + ch[:prefix_len%len(ch)]
suffix = ch * (suffix_len/len(ch)) + ch[:suffix_len%len(ch)]
以下是上下文:
def banner(text, ch='=', length=78):
if text is None:
return ch * length
elif len(text) + 2 + len(ch)*2 > length:
# Not enough space for even one line char (plus space) around text.
return text
else:
remain = length - (len(text) + 2)
prefix_len = remain / 2
suffix_len = remain - prefix_len
if len(ch) == 1:
prefix = ch * prefix_len
suffix = ch * suffix_len
else:
prefix = ch * (prefix_len/len(ch)) + ch[:prefix_len%len(ch)]
suffix = ch * (suffix_len/len(ch)) + ch[:suffix_len%len(ch)]
return prefix + ' ' + text + ' ' + suffix
请有人帮我理解这一点。谢谢。
答案 0 :(得分:1)
他们正在添加其余部分。
说前缀= 10 , ch ='#& +'
如果您只是将 ch 乘以 prefix_len / len(ch),您将获得 9 ,但您知道需要10。
所以 ch [:prefix_len%len(ch)] 只是为其余部分索引到 ch 字符串。
有意义吗?
答案 1 :(得分:1)
当然!
ch[:prefix_len % len(ch)]
正在从头开始访问ch序列的切片(因为:
之前没有值,并且在由{{1}定义的索引之前转到一个字符}。
此值为prefix_len % len(ch)
(前面定义为前缀的长度,毫不奇怪)模数为prefix_len
的长度。 (将其视为整数除ch
后遗留下来的余数。
我运行了这样的函数:prefix_len / len(ch)
并得到:
print(banner("Hello everyone!", "1234"))
所以你可以看到它符合123412341234123412341234123412 Hello everyone! 1234123412341234123412341234123
值(我的情况下为ch
)在它所拥有的空间中。