2016-02-20 79 views
0

我找at this python program,幾乎瞭解其流量,但我無法理解ch[:prefix_len%len(ch)]在以下部分:的`CH說明[:prefix_len%LEN(CH)]`在Python程序

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 

有人請幫我理解這一點。謝謝。

回答

1

當然! ch[:prefix_len % len(ch)]正在訪問CH序列的切片從頭開始(因爲有所述:之前沒有價值和由prefix_len % len(ch)定義的索引,纔去一個字符。

此值prefix_len(前面作爲長度限定。前綴的,這並不奇怪)模量的ch長度(認爲它作爲剩餘部分的prefix_len/len(ch)整數除法後遺留

我跑的功能,如:print(banner("Hello everyone!", "1234"))並得到: 123412341234123412341234123412 Hello everyone! 1234123412341234123412341234123 所以你可以看到它在它的空間中符合ch的值(在我的情況下爲1234)。

+0

我還沒有得到它。我很困惑。請詳細解釋 –

+0

你不瞭解哪一部分(所以我知道在哪裏關注答案)? 切片操作等'序列[開始:結束]'所以,如果你有: '數據= 'abcdefg''然後'數據[:3]'#results在'' abc'' 或者是模量(%),該你不確定? '7%3'產生'1',因爲除以7後,剩餘1個。3 –

+0

謝謝,現在我明白了。 –

1

他們增加的剩餘部分。

PREFIX = 10,並CH = '#& +'

如果你只是乘CH通過prefix_len/LEN(CH),你會得到,但你知道你需要10

所以CH [:prefix_len%LEN(CH)只是進行索引CH海峽餘下的。

有意義嗎?

+0

我還沒有得到它。我很困惑。請解釋更多 –