項目地址:https://gitee.com/e_minem/first_homework
1.PSP
PSP2.1 | PSP階段 | 預估耗時 (分鍾) |
實際耗時 (分鍾) |
Planning | 計划 | 20 | 30 |
· Estimate | · 估計這個任務需要多少時間 | 20 | 30 |
Development | 開發 | 420 | 390 |
· Analysis | · 需求分析 (包括學習新技術) | 60 | 60 |
· Design Spec | 生成設計文檔 | 40 | 30 |
· Design Review | · 設計復審 (和同事審核設計文檔) | 20 | 20 |
· Coding Standard | · 代碼規范 (為目前的開發制定合適的規范) | 10 | 10 |
· Design | · 具體設計 | 50 | 50 |
· Coding | · 具體編碼 | 180 | 170 |
· Code Review | · 代碼復審 | 40 | 40 |
· Test | · 測試(自我測試,修改代碼,提交修改) | 20 | 20 |
Reporting | 報告 | 50 | 60 |
· Test Report | · 測試報告 | 20 | 30 |
· Size Measurement | · 計算工作量 | 10 | 10 |
· Postmortem & Process Improvement Plan | · 事后總結, 並提出過程改進計划 | 20 | 20 |
合計 | 490 | 480 |
二.具體編程實現以及測試
Python 是一個有條理的和強大的面向對象的程序設計語言,類似於Perl, Ruby, Scheme, Java.
利用python,我們能很輕松地完成迭代任務並提供split()等函數,所以用python來統計字符數,詞匯量是一件很輕松的事情
先說一下解題思路吧,統計字符數、詞量、行數無非就是要做一個遍歷循環,一旦符合條件便進行+1。
具體代碼如下:
import sys import os gpus = sys.argv[2] #gpus = [int(gpus.split(','))] batch_size = sys.argv[1] file_name=gpus line_count=0 word_count=0 character_count=0 with open(file_name,'r',encoding='utf-8') as f: for line in f: if line.strip()=='': continue word=line.split() line_count+=1 word_count+=len(word) character_count+=len(line) if batch_size=='-c': print('%s,字符數:%d'% (file_name,character_count)) elif batch_size=='-w': print('%s,單詞數:%d'%(file_name,word_count)) elif batch_size=='-l': print('%s,行數:%d'%(file_name,line_count)) elif batch_size == '-o': try: f = open("result.txt", 'w+') f.write('%s: 字母數:%s\n單詞數:%s\n行數:%s' % (file_name, character_count, word_count, line_count)) except Exception as err: print(err) finally: f.close() else: print("karma is bitch")
該程序代碼十分簡潔歸功於python這門語言的強大
首先導入的兩個包 一個是sys,主要用來傳遞參數用。另一個是os,用來輸出結果到文件上。
sys從命令行讀取命令,該命令是字符串的形式,共有兩個參數一個是關於執行的操作參數,例如-w,-l等,一個是目標文件的名稱,例如doupan.py:
獲取目標文件的代碼主要是:
with open(file_name,'r',encoding='utf-8') as f: for line in f: if line.strip()=='': continue word=line.split() line_count+=1 word_count+=len(word) character_count+=len(line)
我們首先打開目標文件,再從目標文件中以行為單位讀取。
如果這一行是空值的話就跳過,如果不是的話就進行相應的計數。這是一個必要的步驟不然行數會多算。
len()函數和split()函數都使統計變得十分簡單。
最后我們根據從命令行讀取的第一個參數判斷要返回的形式,關鍵代碼如下:
if batch_size=='-c': print('%s,字符數:%d'% (file_name,character_count)) elif batch_size=='-w': print('%s,單詞數:%d'%(file_name,word_count)) elif batch_size=='-l': print('%s,行數:%d'%(file_name,line_count)) elif batch_size == '-o': try: f = open("result.txt", 'w+') f.write('%s: 字母數:%s\n單詞數:%s\n行數:%s' % (file_name, character_count, word_count, line_count)) except Exception as err: print(err) finally: f.close() else: print("karma is bitch")
我們還需將py文件生成exe可執行文件 只需要在命令行如下操作:
pyinstaller -F wc.py
測試運行的效果圖如下:
三.總結
該次作業屬於比較簡單的程序設計,但其實包含的步驟內容是作為軟件工程的學生應該熟練掌握的,
熟悉一套完整的工作流程是我們今后在工作中,無比重要的。
從PSP表格到需求分析設計到編程總結讓我們體驗了一次比較完整的開發過程,受益匪淺,
此次作業還存在着明顯的不足,不過自己會慢慢改進且反思的。
本篇博客參考了《python編程》Eric,Matthes書中相關內容。