| 所属コース | https://edu.cnblogs.com/campus/zjlg/rjjc |
|---|---|
| 課題の目標 | コマンドラインテキスト統計プログラムの実装;純粋な英語txtテキストの文字数、単語数、文数を正確に統計;可能であればコード行、空行、コメント行などを統計し、対応するコマンドインターフェースを提供する。 |
| リポジトリURL | https://gitee.com/miao-kunhao/mickey-mouse-clubhouse-.git |
一、課題要件 コマンドラインテキスト統計プログラムを実装する。純粋な英語txtテキストの文字数、単語数、文数を正確に統計する。
具体的なコマンドラインインターフェースの要件例:
コマンド形式: text_counter.exe [パラメータ] [ファイル名]
text_counter.exe -c file.txt 文字数を統計 text_counter.exe -w file.txt 単語数を統計
拡張機能(ボーナスポイント):コード行、空行、コメント行などを統計し、対応するコマンドインターフェースを提供する。
プロジェクト要件では、各バージョンの変更点と実行結果のスクリーンショットを複数回のコミットで示す必要がある。バージョン番号は以下の通り:
v0.1 空のプロジェクト v0.2 基本機能を完了 v0.3 拡張機能(ボーナスポイント)を完了
対応する単体テストを作成する。
選択したIDEのツールを使用してパフォーマンステストを実行する。
二、プロジェクト紹介 Pythonを使用してプログラミングを行った。
まず、基本機能:純粋な英語txtテキストの文字数、単語数、文数を正確に統計する。
一部のコードは以下の通り。完全なコードはGiteeにあります。
def analyze_text(content):
char_count = len(content) # 総文字数を計算
word_count = len(re.findall(r'\b\w+\b', content)) # 正規表現で単語を一致させ、単語数を計算
sentence_count = len(re.split(r'[.!?]', content)) - 1 # 正規表現で文を分割し、文数を計算
return char_count, word_count, sentence_count
次に、拡張機能:コード行、空行、コメント行などを統計し、対応するコマンドインターフェースを提供する。
def analyze_code_file(file_path):
code_lines = 0
comment_lines = 0
blank_lines = 0
with open(file_path, 'r', encoding='utf-8') as file:
for line in file:
stripped_line = line.strip()
if stripped_line == "":
blank_lines += 1
elif stripped_line.startswith("#"):
comment_lines += 1
else:
code_lines += 1
return code_lines, comment_lines, blank_lines
これにより、基本機能と拡張機能の両方が正常に実装された。
インターネットから入手したシェイクスピアの詩を使用してテストを行った。結果は以下の通り:
統計結果はすべて正確に取得できた。
三、プログラムのデバッグ PythonはC++のgdbに類似するデバッグツールであるpdbを提供しており、コマンドラインでPythonプログラムをデバッグできます。-mパラメータを付けて直接コマンドラインから対象プログラムを起動できる。
プログラム名がtext_analyzerの場合、以下のように操作する:
python -m pdb text_analyzer.py -c sample.txt
これにより、デバッガが起動し、プログラムの実行をステップごとに追跡できる。
四、パフォーマンステスト Pythonのtimeitモジュールを使用して、プログラムの実行時間を測定した。大きなテキストファイル(1MB以上)を使用して、各機能のパフォーマンスを評価した。
import timeit
# 文字数統計のパフォーマンステスト
def test_char_count():
with open('large_file.txt', 'r') as f:
content = f.read()
return len(content)
time = timeit.timeit(test_char_count, number=100)
print(f"文字数統計の平均実行時間: {time/100:.6f}秒")
テストの結果、プログラムは大きなファイルでも高速に動作し、1MBのファイルの文字数統計に平均0.02秒かかることが確認された。