python编程工时计算_Python项目:工作量计算器

第11节课程大纲

一、明确项目目标

二、分析过程,拆解项目

三、逐步执行,代码实现

3.1 版本1.0:能用就好

3.2 版本2.0:稍作改良

3.3 版本3.0:精细打磨

一、明确项目目标需求文档

二、分析过程,拆解项目

分析过程:

# 注:size代表项目大小,number代表人数,time代表工时数量

# 工时计算

size = 1.5

number = 2

time = (size*80/number)

print('项目大小为1.5个标准项目,使用2个人力完成,则需要工时数量为:',time)

# 人力计算

size = 0.5

time = 20.0

number = (size*80/time)

print('项目大小为0.5个标准项目,如果需要在20.0个工时完成,则需要人力数量为:',int(number))

把程序版本大致规划成三个阶段:

三、逐步执行,代码实现

3.1 版本1.0:能用就好

# 工时计算

def estimated_time(size,number):

time = size * 80 / number

print('项目大小为%.1f个标准项目,使用%d个人力完成,则需要工时数量为:%.1f个' %(size,number,time))

# 人力计算

def estimated_number(size,time):

number = size * 80 / time

print('项目大小为%.1f个标准项目,如果需要在%.1f个工时完成,则需要人力数量为:%d人' %(size,time,number))

# 调用工时计算函数

estimated_time(1.5,2)

# 调用人力计算函数

estimated_number(0.5,20)

注:%f的意思是格式化字符串为浮点型,%.1f的意思是格式化字符串为浮点型,并保留1位小数。

3.2 版本2.0:稍作改良

3.2.1 代码bug修复

版本1.0中存在bug:

debug:

import math #导入math模块,后续需要使用ceil()函数

# 工时计算

def estimated_time(size,number):

time = size * 80 / number

print('项目大小为%.1f个标准项目,使用%d个人力完成,则需要工时数量为:%.1f个' %(size,number,time))

# 人力计算

def estimated_number(size,time):

number = math.ceil(size * 80 / time) #math.ceil 为向上取整函数

print('项目大小为%.1f个标准项目,如果需要在%.1f个工时完成,则需要人力数量为:%d人' %(size,time,number))

# 调用工时计算函数

estimated_time(1.5,2)

# 调用人力计算函数

estimated_number(0.5,20)

3.2.2 代码优化

代码比较繁琐,进一步简化:

函数合并后:

import math

# 为函数设置了三个参数,并都带有默认参数)

def estimated(size=1,number=None,time=None):

# 人力计算:如果参数中填了时间,没填人数,就计算人力

if (number == None) and (time != None):

number = math.ceil(size * 80 / time)

print('项目大小为%.1f个标准项目,如果需要在%.1f个工时完成,则需要人力数量为:%d人' %(size,time,number))

# 工时计算:如果参数中填了人数,没填时间,就计算工时

elif (number != None) and (time == None):

time = size * 80 / number

print('项目大小为%.1f个标准项目,使用%d个人力完成,则需要工时数量为:%.1f个' %(size,number,time))

# 调用函数的时候,传递两个参数,会自动计算出第三个参数

estimated(size=1.5,number=2)

estimated(size=0.5,time=20.0)

函数合并的另一种方案:

import math

def estimated(types,size,other):

# 人力计算

if types == 1:

number = math.ceil(size * 80 / other)

print('项目大小为%.1f个标准项目,如果需要在%.1f个工时完成,则需要人力数量为:%d人' %(size,other,number))

# 工时计算

elif types == 2:

time = size * 80 / other

print('项目大小为%.1f个标准项目,使用%d个人力完成,则需要工时数量为:%.1f个' %(size,other,time))

estimated(1, 1.5, 2)

# 结果:项目大小为1.5个标准项目,如果需要在2.0个工时完成,则需要人力数量为:60人

estimated(2, 1.5, 2)

# 结果:项目大小为1.5个标准项目,使用2个人力完成,则需要工时数量为:60.0个

3.3 版本3.0:精细打磨

3.3.1 优化用户体验

版本2.0每次都涉及改动代码,用户体验不好,要求达到下面的交互效果:

代码优化后:

import math

def estimated(size=1,number=None,time=None):

if (number == None) and (time != None):

number = math.ceil(size * 80 / time)

print('项目大小为%.1f个标准项目,如果需要在%.1f个工时完成,则需要人力数量为:%d人' %(size,time,number))

elif (number != None) and (time == None):

time = size * 80 / number

print('项目大小为%.1f个标准项目,使用%d个人力完成,则需要工时数量为:%.1f个' %(size,number,time))

choice = input('请选择计算类型:(1-人力计算,2-工时计算)')

if choice == '1':

size = float(input('请输入项目大小:(1代表标准大小,可以输入小数)'))

number = None

time = float(input('请输入工时数量:(可以输入小数)'))

estimated(size,number,time)

elif choice == '2':

size = float(input('请输入项目大小:(1代表标准大小,可以输入小数)'))

number = int(input('请输入人力数量:(请输入整数)'))

time = None

estimated(size,number,time)

3.3.2 改造代码结构

到这里,程序基本已经完成了。不过,为了便于后续的增删改,最好用函数封装代码,把代码改造成“子函数+主函数”的代码结构,即:把每个独立的功能封装到每个单独的函数中,然后用一个主函数打包这些单独的函数,最后再调用主函数。用函数封装代码

子函数+主函数的代码结构:

import math

# 采集信息的函数

def myinput():

choice = input('请选择计算类型:(1-人力计算,2-工时计算)')

if choice == '1':

size = float(input('请输入项目大小:(1代表标准大小,请输入小数)'))

number = None

time = float(input('请输入工时数量:(请输入小数)'))

return size,number,time

# 这里返回的是一个元组

elif choice == '2':

size = float(input('请输入项目大小:(1代表标准大小,请输入小数)'))

number = int(input('请输入人力数量:(请输入整数)'))

time = None

return size,number,time

# 这里返回的数据是一个元组

# 完成计算的函数

def estimated(my_input):

# 把元组中的数据取出来

size = my_input[0]

number = my_input[1]

time = my_input[2]

# 人力计算

if (number == None) and (time != None):

number = math.ceil(size * 80 / time)

print('项目大小为%.1f个标准项目,如果需要在%.1f个工时完成,则需要人力数量为:%d人' %(size,time,number))

# 工时计算

elif (number != None) and (time == None):

time = size * 80 / number

print('项目大小为%.1f个标准项目,使用%d个人力完成,则需要工时数量为:%.1f个' %(size,number,time))

# 主函数

def main():

my_input = myinput()

estimated(my_input)

# 调用主函数

main()

解读:在这里,myinput()函数负责跟用户采集信息,estimated()函数负责完成计算,而main()函数把其他两个函数打包放在一起并传递了参数。所以只要调用main()函数就能让整个程序跑起来。

3.3.3 增加一个小功能

如果想要增加一个功能:“让程序循环运行,直到用户选择结束”。那么,就可以在程序中加上一个again函数:

import math

# 变量key代表循环运行程序的开关

key = 1

# 采集信息的函数

def myinput():

choice = input('请选择计算类型:(1-工时计算,2-人力计算)')

if choice == '1':

size = float(input('请输入项目大小:(1代表标准大小,请输入小数)'))

number = int(input('请输入人力数量:(请输入整数)'))

time = None

return size,number,time

# 这里返回的数据是一个元组

if choice == '2':

size = float(input('请输入项目大小:(1代表标准大小,请输入小数)'))

number = None

time = float(input('请输入工时数量:(请输入小数)'))

return size,number,time

# 这里返回的是一个元组

# 完成计算的函数

def estimated(my_input):

# 把元组中的数据取出来

size = my_input[0]

number = my_input[1]

time = my_input[2]

# 人力计算

if (number == None) and (time != None):

number = math.ceil(size * 80 / time)

print('项目大小为%.1f个标准项目,如果需要在%.1f个工时完成,则需要人力数量为:%d人' %(size,time,number))

# 工时计算

elif (number != None) and (time == None):

time = size * 80 / number

print('项目大小为%.1f个标准项目,使用%d个人力完成,则需要工时数量为:%.1f个' %(size,number,time))

# 询问是否继续的函数

def again():

# 声明全局变量key,以便修改该变量

global key

a = input('是否继续计算?继续请输入y,输入其他键将结束程序。')

if a != 'y':

# 如果用户不输入'y',则把key赋值为0

key = 0

# 主函数

def main():

print('欢迎使用工作量计算小程序!')

while key == 1:

my_input = myinput()

estimated(my_input)

again()

print('感谢使用工作量计算小程序!')

main()

学习时间:3月27日

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值