這可能很簡單,但我無法發現我犯的錯誤。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