2017-05-22 37 views
0

我正在學習Python槽Coursera(Dr. Chuck!),剛剛完成了我的作業以外的第一個「有用的」個人腳本。用詞彙表製作產品的Pythonic方法

它基本上使用兩個單詞/數字列表並創建這些項目的所有可能組合。我會用這個強制一箇舊的密碼保護的文件,其中我確信元素(但不是組合)。

劇本在擺弄幾個小時後終於起作用。 我的問題是如果這是一種'Pythonic'編寫代碼的方式。從一開始就從正確的方式學習它可能很重要。

import itertools 

beginfile = open('/Users/Mat/Python/combinations/begin.txt') 
beginlist = [] 
for line in beginfile: 
    line = line.rstrip() 
    beginlist.append(line) 
    if line.islower(): 
     capital = line.title() 
     beginlist.append(capital) 

endfile = open('/Users/Mat/Python/combinations/end.txt') 
endlist = [] 
for line in endfile: 
    line = line.rstrip() 
    endlist.append(line) 

x = itertools.product(beginlist, endlist) 
counter = 0 
for i in x: 
    print("".join(i)) 
    counter += 1 

print ('TOTAL:', counter, 'items') 
+0

工作代碼,只需要檢討是題外話了StackOverflow的,但你的代碼一個很好的問題,更適合於[SE的代碼審查(HTTP://codereview.stackexchange .com) – davedwards

+0

你不被要求不要在該課程中透露你的解決方案嗎? – Mast

+0

我不知道,降檔。謝謝你的提示! – mat

回答

1
import itertools 

with open('/Users/Mat/Python/combinations/begin.txt') as beginfile: 
    beginlist = [line.rstrip().title() for line in beginfile if line.rstrip().islower()] 

with open('/Users/Mat/Python/combinations/end.txt') as endfile: 
    endlist = [line.rstrip() for line in endfile] 

x = itertools.product(beginlist, endlist) 
data = ["".join(i) for i in x] 

print ('TOTAL:', len(data), 'items') 
+0

你可以試試這個,這是我能想到的最pythonic的方式:P – pramod

+0

關閉文件,或更好的使用'with'上下文管理器 – Dalvenjia

+0

非常感謝!雖然略有不同,但我絕對能看到你要去的地方,看起來更簡潔! 不同之處在於我的原始腳本在列表中放置了小寫字母和Title Case版本的單詞,這是我需要的可能密碼。另外,它還打印了列表(而不僅僅是長度)。 但仍然,偉大的工作!真正整潔的解決方案:) – mat