2017-05-22 12 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