请问为什么两种计算方式中,工时计算可以将time = None 放入函数调用的括号中,而当我把人数计算中的number = None放入调用函数的括号中时,出现报错
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 = int(input('请选择您想计算的数据类型,1为工时计算,2为人数计算'))
if choice == 1:
number = int(input('请输入工作人数'))
size = int(input('请输入任务大小'))
estimated(size,number,time=None)
if choice == 2:
size = int(input('请输入任务大小'))
time = int(input('请输入工时长短'))
estimated(size,number=None,time)
bash:122$ python ~/classroom/apps-1-id-5cd9765d19bbcf00015547b5/122/main.py
File "/home/python-class/classroom/apps-1-id-5cd9765d19bbcf00015547b5/122/main.py", line 21
estimated(size,number=None,time)
^
SyntaxError: positional argument follows keyword argument
在上面代码的基础上,我尝试了这种方法
if choice == 2:
size = int(input('请输入任务大小'))
time = int(input('请输入工时长短'))
estimated(size=size,number=None,time=time)
直接传入参数,但是明明感觉位置传参也可以啊,明明位置都对
希望能搞懂为什么上面不对,以及为什么改了之后又可以了
通过位置参数和关键字参数结合传参(注意关键字参数必须在位置参数的后面)
意思就是要用关键字传参,那么最后一个必须是关键字参数,然后一直倒推。
以下都合法,其他的不合法
estimated(size,None,time)
estimated(size,None,time=time)
estimated(size,number=None,time=time)
estimated(size=size,number=None,time=time)