项目地址: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书中相关内容。