2011-12-15 5 views
-3

私はPython 2.7xを使用しており、デバッグに問題があります。私は何ができるかわからない。どんな助けもありがとうございます。ありがとう。私のPythonコードをデバッグするのに助けが必要ですが、それは難破です

import re 
import sys 

# Grab parameters from the command line 
(filename, threshold) = sys.argv[1:3] 

# Validate arguments 
if (re.match("\D", threshold)): 
    print "The threshold must be a number." 
    sys.exit(1) 

# Read file and tally word frequencies 
fh = open(filename) 
file = fh.read() 
words = [] 
for line in file.split('\n'): 
    found = 0 
    for word in words: 
     if word[0] == line.lower(): 
     found = 1 
     word[1] += 1 

    # initialize a new word with a frequency of 1 
    if found == 0: 
     words.append([line, 1]) 

# Print words and their frequencies, sorted alphabetically by word. Only print a word if its frequency is greater than or equal to the threshold. 
for word in sorted(words): 
    if word[0] < threshold: continue 
    print "%4d %s" % (word[1], word[0]) 
+1

何が機能していないかについての情報を入力する必要があります。 –

+0

「デバッグに問題があります」を定義します。あなたはデバッガで特定の問題にぶち当たっていますか?何が効いていないのですか? – David

+0

これは閉鎖されていたはずではないと思ってください。疑問が提起されていませんでしたが、同じ問題はありません。 @ user1100031、もし私が推測しなければならなかったことは、単語リストに何も追加しないということです。空で始まるので、決して 'for word in words'ループを入力することはありません。 –

答えて

2

通常、Pythonコードのデバッグはpdbモジュールで最も簡単です。 (例えば、p wordsはあなたが印刷されますあなたが値を印刷する機能にステップs、次のコード行を実行するためにnを使用して、pでき

import pdb 
pdb.set_trace() 

:あなたは、デバッガを開始する次のコードを配置単語リスト)。

あなたのコードで何が起こっているのか分かりませんが、問題の詳細についてはわかりませんが、矛盾したケースで問題が発生しているようです。単語リストに何かを追加するときは、それを小文字にする必要があります。

if found == 0: 
    words.append([line.lower(), 1]) 

また、文字列を数値ではなくしきい値と比較しています。それは次のようになります:

if word[1] < threshold: continue 

これが役立つことを望みます。