指定函数的参数类型

Posted myshuzhimei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了指定函数的参数类型相关的知识,希望对你有一定的参考价值。

题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只
   猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了
   一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,
   问海滩上原来最少有多少个桃子?
 
方法1:          
for i in range(10000):
    if (i*5+4)%4 == 0 :
       a=(i*5+4)/4 
       if (a*5+4)%4 == 0 :
          b=(a*5+4)/4 
           if (b*5+4)%4 == 0 :
             c=(b*5+4)/4 
              if (c*5+4)%4 == 0 :
                 d=(c*5+4)/4 
                 if (d*5+4)%4 == 0 :
                    e=(d*5+4)/4 
                     print i,a,b,c,d,e
                    break
 
 
方法2:
def r(j,int):
    if j%4 == 0 :
       return j*5/4+1   #(jj-1)*4/5=j,jj是j的上一个数
       
for i in range(10000):
    if r(i,int) <>None and r(r(i,int),int) <>None and r(r(r(i,int),int),int) <>None
    and r(r(r(r(i,int),int),int),int) <>None and r(r(r(r(r(i,int),int),int),int),int) <>None:
       print i,r(i,int),r(r(i,int),int),r(r(r(i,int),int),int),r(r(r(r(i,int),int),int),int),r(r(r(r(r(i,int),int),int),int),int)
       break
 
 
在用方法2时,一开始定义的def r(j),报错:unsupported operand type(s) for *: ‘NoneType‘ and ‘int‘ 。后面改为指定参数类型,才解决报错问题。
经过分析,是因为r(j)不满足条件时也会返回None,而None作为参数传递使用时是无法进行运算操作的,r(j,int)则限定了参数必须是int类型。
 
 
方法2修改后:
def r(j):
    if j !=None :
       if j%4 == 0 :
           return int(j*5/4+1)   #(jj-1)*4/5=j,jj是j的上一个数
       
for s in range(10000):
    s1=r(s)
    s2=r(s1)
    s3=r(s2)
    s4=r(s3)
    s5=r(s4)
    if (s1!= None) and (s2!= None) and (s3!= None) and (s4!= None) and (s5!= None):
       print s,s1,s2,s3,s4,s5
       break
 
 

以上是关于指定函数的参数类型的主要内容,如果未能解决你的问题,请参考以下文章

为啥我需要在这里指定模板化函数的模板参数类型?

如何在不限制其维度的情况下为函数参数指定类型?

pycahrm使用docstrings来指定变量类型返回值类型函数参数类型

JavaScript 函数定义显式参数时没有指定数据类型

如何使用类型提示为参数指定多种类型? [复制]

python函数参数类型:位置参数默认参数动态参数