您的位置:首页 > 编程语言 > Python开发

Python: 渐进猜数字游戏 <8> 代码优化 与 结项

2016-08-15 10:11 411 查看
1. 代码优化

  优化什么?

  从评价软件质量的6个要素来解答这个问题。软件质量6要素:1)功能性;2)可靠性;3)易使用性;4)效率;5)可维修性;6)可移植性

  软件开发对于代码的评价也需要从这6个要素着手,为了达到软件质量的要求,代码应满足可读性和可维护性,需要从代码架构、设计和实现来满足。

  首先,代码必须保证功能,以保证软件可用、可靠,同时保证软件执行的效率等非功能需要。测试是一种有效的手段。

  其次,代码必须满足可读性,以保证代码在软件的生命中可以被不同的人阅读、修正错误、改进功能。代码开发文档、注释可以在很大程度上保证可读性。

  1)给代码加说明 / 注释

    * 文件说明:名称, 摘要, 详细说明, 作者, 时间, 更新记录。。。。。。

    * 函数 / 类 / 方法说明:函数/类/方法名, 摘要, 参数列表说明。。。。。。

    * 必要的注释:变量,逻辑单元,算法说明。。。。。。

  简洁、明确、清晰的注释是代码实现的良好习惯,个人和团队良好的编码规范中对注释的要求必不可少。

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
# Copyright (c) 2016,Liexun Studio
# All Rights Reserved.
#
# File Name: GunessNum.py
# Summary: Guness Num Game
#   1. Generate random number and check the number correction
#   2. Get user input and check the number correction
#   3. Compare random and user input, output result
#
# Version: 1.0
# Author: Roy
# End Date: 08/15/2016
#
# Update Version: 1.X
# Author:
# End Date:
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

#encode="utf-8"

import random

GC = 5      #define try account for guess
randNum = 0

def startGame():
print "*************************************************************"
print "************************ Guess Number ***********************"
print "*************************************************************"

def randNumber():
#Get system random number: 4 bits, without duplication
randNum = random.sample(xrange(0,9),4)
##print type(randNum)
print "\nSystem random number: " + str(randNum) + "\n"
return randNum

#check the correction of number
def checkNum(inNum):
#Is number?
if inNum.isdigit() == True:
#4 digit?
if len(inNum) == 4:
#duplicate?
for i in range(4):
if inNum.count(inNum[i]) == 1:
if i != 3:
pass
else:
print "Correct!"
return True
else:
print "Duplicate, re-input."
return False
break
else:
print "Not 4 digit, re-input."
return False
else:
print "Not number, re-input."
return False

#compare and output result: XAXB
def compNum(rnum,inum):
ca = 0
cb = 0
for i in range(4):
if inum[i] in rnum:
if rnum[i] == inum[i]:
ca += 1
else:
cb += 1
return str(ca) + "A" + str(cb) + "B"

#try to guess number as system define: GC
def gunessNumber():
randNum = randNumber()
inNum = raw_input(u"Input your guess number: ")   #get user input
for gc in range(GC):
while not checkNum(inNum):                    #get user input and check the correction
inNum = raw_input(u"Input your guess number: ")
else:
print str(gc+1) + "--" + compNum(map(lambda x: str(x), randNum),inNum)   #ouput the result
if compNum(map(lambda x: str(x), randNum),inNum) == "4A0B":              #iteration until guess the correct numer or achieve the system define number
print "Congratulations!!!"
break
elif gc < 4:
inNum = raw_input(u"Input your guess number: ")
else:
print "Unfortunately, Faild, Please try again."

if __name__ == '__main__':
startGame()
gunessNumber()


 
2)测试代码

    * 单元测试(参见,The Python Standard Library, 25.3.unittest

— Unit testing framework)

#encode="utf-8"

import unittest
from GunessNum import checkNum

class Test_GunessNumber(unittest.TestCase):
#Executed before each test, initialize test
def setup():
pass

#Executed after each test, clear up test
def teardown():
pass

def test_checknumber(self):
self.assertFalse(checkNum("123"))
self.assertFalse(checkNum("1233"))
self.assertFalse(checkNum("12356"))
self.assertTrue(checkNum("1234"))

if __name__ == '__main__':
test_suite = unittest.TestSuite()
test_suite.addTest(Test_GunessNumber("test_checknumber"))

runner = unittest.TextTestRunner()
runner.run(test_suite)

Python 2.7.11 (v2.7.11:6d1b6a68f775, Dec  5 2015, 20:40:30) [MSC v.1500 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>>
=================== RESTART: G:\Project\Python\Test_GN.py ===================
Not 4 digit, re-input.
Duplicate, re-input.
Not 4 digit, re-input.
Correct!
.
----------------------------------------------------------------------
Ran 1 test in 0.020s

OK
>>>
 
  * 专门测试(具体方法,参见The art of software testing(《软件测试的艺术》 梅耶(Myers, G. J.)))
     由专门的测试人员,制定测试策略、设计测试用例,执行特定的功能测试 / 集成测试 / 系统测试。。。。。。

2. 结项Python猜数字游戏

  断断续续、改改停停,总算完成了Python猜数游戏,完成了对Pthon语言的初步介绍。

  开发语言是一门工具,了解和使用一门工具可以帮助你更加有效的解决现实世界的问题。

  使用工具解决问题,业余与专业也许就在于此:基本使用 还是 研究与创新。

  正如你能熟练使用手机和各种APP,但不必了解手机怎么造出来的、APP怎么实现的,否则你要么崩溃掉,要么成为专家。

  不论测试还是开发,不论是IT人员还是非IT人员,不可否认,代码的入门的难度越来越低,开发语言越来越像一种工具,不再是某些人的专项。

  如果你有问题,你想解决问题,你有足够的勇气和态度面对问题,那么一定会有很多种方法解决你的问题。

  难,是理由,也是一种面对问题的态度。

  你愿意选择什么?

           
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: