Python - 代码中的错误
问题描述:
这可能很简单,但我无法发现我犯的错误。Python - 代码中的错误
我写了一个简单的程序来读取wordfile中的单词(不一定是字典单词),总结这些字符并将它们从最低到最高打印出来。 (PART1)
然后,我在这个程序后面写了一个小脚本来过滤和搜索只有那些只有字母,字符的单词。 (PART2)
第一部分正常工作时,第二部分不打印任何东西。我认为错误发生在'print ch'这一行,列表中的一个字符被转换为字符串没有被打印出来。请指教一下可能是错误
#!/usr/bin/python
# compares two words and checks if word1 has smaller sum of chars than word2
def cmp_words(word_with_sum1,word_with_sum2):
(word1_sum,__)=word_with_sum1
(word2_sum,__)=word_with_sum2
return word1_sum.__cmp__(word2_sum)
# PART1
word_data=[]
with open('smalllist.txt') as f:
for l in f:
word=l.strip()
word_sum=sum(map(ord,(list(word))))
word_data.append((word_sum,word))
word_data.sort(cmp_words)
for index,each_word_data in enumerate(word_data):
(word_sum,word)=each_word_data
#PART2
# we only display words that contain alphabetic characters and numebrs
valid_characters=[chr(ord('A')+x) for x in range(0,26)] + [x for x in range(0,10)]
# returns true if only alphabetic characters found
def only_alphabetic(word_with_sum):
(__,single_word)=word_with_sum
map(single_word.charAt,range(0,len(single_word)))
for ch in list(single_word):
print ch # problem might be in this loop -- can't see ch
if not ch in valid_characters:
return False
return True
valid_words=filter(only_alphabetic,word_data)
for w in valid_words:
print w
由于提前,
约翰
仅供参考,使用'cmp'功能的不赞成使用“键”功能进行排序,速度较慢,且不那么直观。您可以完全删除'cmp_words',为'from operator import itemgetter'添加一个导入并将'word_data.sort(cmp_words)'改为'word_data.sort(key = itemgetter(0))'以获得相同的结果,并且更快。另外,'str'是它们字符的迭代器,你不需要用'list'来包装它们,所以,例如,sum(map(ord,(list(word))))'可以简化为'sum(map(ord,word))'或者更为有效,如果不那么明显,在Py2中你可以做'sum(bytearray(word))'。 – ShadowRanger