通过需求,我们明确了这几点要求:
def time_need(size_project,people):
return work_hours
def people_need(size_project,work_hours):
return people_number
我们先简单实现这个式子:
# 注: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))
我们把它封装后
# 工时计算
def estimated_time(size,number):
time=size*80/number
print('{}倍的工作量,使用{}人力需要{}工时完成'.format(size,number,time))
return time
# 人力计算
def estimated_number(size,time):
number=size*80/time
print('{}倍的工作量,使用{}工时需要{}人力完成'.format(size,time,number))
return number
# 调用工时计算函数
estimated_time(1.5,2)
# 调用人力计算函数
estimated_number(0.5,20)
我们如此粗糙地交付完一个大概能用的代码后,随着时间的流逝,问题出现了。
我们需要升级一下自己程序中的漏洞,使用到如下知识点
>>> #向上取整、向下取整以及四舍五入函数
... import math
>>> f=11.2
>>> print(math.ceil(f))
12
>>> print(math.floor(f))
11
>>> print(round(f))
11
>>>
还可以使用下面一种除余方法
# 人力计算
def estimated_number(size,time):
if (size * 80 % time) != 0:
number = int(size * 80 / time) + 1
else:
number = size * 80 / time
print('项目大小为%.1f个标准项目,如果需要在%.1f个工时完成,则需要人力数量为:%d人' %(size,time,number))
import math
# 为函数设置了三个参数,并都带有默认参数
def estimated(types=None,size=1,other=None):
# 人力计算:如果参数中填了时间,没填人数,就计算人力
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))
else:
print('types should be 1 or two')
# 调用函数的时候,传递两个参数,会自动计算出第三个参数
estimated(1,1.5,2)
estimated(2,1.5,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))
classify=input('请选择计算类型:(1-人力计算,2-工时计算)')
size=input('请输入项目大小:(1代表标准大小,可以输入小数)')
if classify =='1':
number=input('请输入人力数量:(请输入整数)')
estimated(float(size),int(number),time=None)
else:
work_time=input('请输入工时数量:(请输入小数)')
estimated(float(size),number=None,float(work_time))
报错:SyntaxError: positional argument follows keyword argument
参数写错了
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))
classify=input('请选择计算类型:(1-人力计算,2-工时计算)')
size=input('请输入项目大小:(1代表标准大小,可以输入小数)')
if classify =='1':
number=input('请输入人力数量:(请输入整数)')
estimated(size=float(size),number=int(number),time=None)
else:
work_time=input('请输入工时数量:(请输入小数)')
estimated(size=float(size),number=None,work=float(work_time))
增加程序判断
def main():
again=True
while again:
my_input = myinput()
estimated(my_input)
s=input('是否继续计算,yes or no')
if s=='no':
again=False