2016-10-21 77 views
2

的元組我寫了這個代碼:如何定義一個函數讀取字符串

`

def key_gen(l): 
    lettersi =() 
    for a in range(l[0], l[4]): 
     letters1 = lettersi + (a,) 
    for b in range(l[5], l[9]): 
     letters2 = lettersi + (b,) 
    for c in range(l[10], l[14]): 
     letters3 = lettersi + (c,) 
    for d in range(l[15], l[19]): 
     letters4 = lettersi + (d,) 
    for e in range(l[20], l[24]): 
     letters5 = lettersi + (e,) 
    key = letters1 + letter2+ letter3 + letters4 + letters5 
    return key 

`

我運行它,而在蟒蛇殼IM ...:

letters = ('A','B','C','D','E','F', 'G','H','I','J', ' ', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'X', 'Z', '.') 

    >>>key_gen(letters) 

Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
File "<stdin>", line 3, in key_gen 
    TypeError: 'str' object cannot be interpreted as an integer 

我不知道我在這裏做什麼錯誤,因爲我是一個Python初學者,但我想輸出是這樣的。你有什麼想法如何解決它?

>>>key_gen(letters) 


((‘A’, ‘B’, ‘C’, ‘D’, ‘E’), (‘F’, ‘G’, ‘H’, ‘I’, ‘J’), (‘ ’, ‘L’, ‘M’, ‘N’, ‘O’), (‘P’, ‘Q’, ‘R’, ‘S’, ‘T’), (‘U’, ‘V’, ‘X’, ‘Z’, ‘.’)) 

也許是我的功能定義無法讀取字符串的元組,但我不知道如何做到這一點,香港專業教育學院已經GOOGLE了它並且不可能發現任何東西。

+0

一般來說,列表用於比元組更是有你喜歡的元組對這項工作的理由? –

+3

'我在範圍(0,len(letters),5)'tuple(字母[i:i + 5])'完成你想要的。 –

+0

它的工作!非常感謝你的回答 –

回答

3

range()預計其參數爲int類型,並通過傳遞l[0]實際上將它作爲字符'A'傳遞。我認爲你想要做的是:

for a in range(0, 4): 
     letters1 = lettersi + (l[a],) 

# instead of: 
# for a in range(l[0], l[4]): 
#  letters1 = lettersi + (a,) 

有一些現有的方法來做你正在努力實現的。請參閱:How do you split a list into evenly sized chunks?。但是我在那邊沒有提到我會做的。我的做法會一直使用清單,清單理解爲切片

>>> [letters[i:i+5] for i in range(0, len(letters), 5)] 
[('A', 'B', 'C', 'D', 'E'), ('F', 'G', 'H', 'I', 'J'), (' ', 'L', 'M', 'N', 'O'), ('P', 'Q', 'R', 'S', 'T'), ('U', 'V', 'X', 'Z', '.')] 
+0

謝謝你的回答。感謝 –

+0

謝謝你給我一個選擇。* –

相關問題