第二修改腳本(下所做的更改)蟒蛇問題
製造在評論中提到的更改(改名爲所有print_all,並添加了excepetion,改變了下面的代碼,以反映相同)
然而,執行依然存在,沒有任何理由
初始查詢:
以下是試圖確定一個詞的各種字謎腳本(如網站:http://wordsmith.org/anagram/anagram.cgi?anagram=suchindra&t=1000&a=n):
import sys
import itertools
import threading
from collections import defaultdict
words_dict = defaultdict(lambda: "")
def lower_and_nocrlf(s):
return s.lower().strip()
def two_or_more(s):
if len(s) >= 1:
return 1
else:
return 0
def get_perms(cur_iter):
lst = []
for i in range(0, 10000):
try:
lst.append("".join(cur_iter.next()))
except:
break
return lst
def get_twordlist(z):
lst1 = []
lst2 = []
for i in range (1, len(z)):
lst1.append(z[:i])
lst2.append(z[i:])
return lst1, lst2
def filter_dict(x):
if x in words_dict.keys():
return x
else:
return 0
def main():
print_all = None
word = None
try:
word = sys.argv[1]
print_all = sys.argv[2]
except:
pass
if word == None:
try:
word = sys.stdin.readline()
print_all = sys.stdin.readline()
except:
pass
if word == None:
sys.exit(1)
fd = open('/usr/apps/words', 'r')
words = fd.readlines()
fd.close()
words_lower = map(lower_and_nocrlf, words)
words_lower = filter(two_or_more, words_lower)
from collections import defaultdict
for i in words_lower:
words_dict[i] = ""
iter = itertools.permutations(word)
all_permutations = []
iters = []
for i in range(0, 100):
iters.append(iter)
result = map(get_perms, iters)
main_list = []
for l in result:
if l != []:
for word in l:
main_list.append(word)
results = []
try:
main_list_len = len(main_list)
for index in range(0, main_list_len):
percent = (index/len(main_list)) * 100
lst1, lst2 = get_twordlist(main_list[index])
result1 = map(filter_dict, lst1)
result2 = map(filter_dict, lst2)
for index in range(0, len(result1)):
if (result1[index] != 0) and (result2[index] != 0):
results.append("%s %s" % (result1[index], result2[index]))
except KeyboardInterrupt:
print("User stopped execution, partial results:")
print results
sys.exit(1)
except Exception:
# catches all other types of exception here
print(sys.exc_info())
traceback.print_exc()
print(results)
if __name__ == "__main__":
try:
main()
except:
sys.exit(0)
順便說一句,'all'是** **不爲它陰影內置'所有()'函數的變量名的好選擇。另外,你可以使用內建的'exit()'函數而不是'sys.exit()'(假設你實際需要一個退出函數......)。 –
'S/results.append [結果] /results.append(結果)/' – gboffi
@ PM2Ring此外,'all'未在程序的其餘部分中引用... – gboffi