小甲鱼第十八讲课后习题总结反思

课上笔记:
关于最后一个问题的思考:
像平时直接赋值时:

def i(x,y):
    print(x,y)

i(3,5,9)    

这样必然报错,因为两个变量对应了三个数
而课上最后讲的搜集参数:

def i(*x,y):
    print(len(x),y)

i(3,5,9)    

此时也会报错,因为默认359全部都给了x,y没有参数此时
所以小甲鱼才会提到要么给i关键字参数如:

def i(*x,y):
    print(len(x),y)

i(3,5,y=9)    

或者加默认参数

def i(*x,y=4):
    print(len(x),y)

i(3,5,9)    

这样才对

1. 函数文档和直接用“#”为函数写注释有什么不同?
答:给函数写文档是为了让别人可以更好的理解你的函数,所以这是一个好习惯:

>>> def Add(x,y):
    'add two numbers'
    return x+y

***我们看到在函数开头写下的字符串Ta是不会打印出来的,但Ta会作为函数的一部分存储起来,这个我们称之为函数文档字符串,Ta的功能跟注释是一样的。***

函数的文档字符串可以按如下方式访问:
>>> Add.__doc__
'add two numbers'

另外,我们用help()来访问这个函数也可以看到这个文档字符串:
>>> help(Add)
Help on function Add in module __main__:

Add(x, y)
    add two numbers
转载自:https://www.jianshu.com/p/38540d75521c
>>> 

0. 编写一个符合以下要求的函数:
a) 计算打印所有参数的和乘以基数(base=3)的结果
b) 如果参数中最后一个参数为(base=5),则设定基数为5,基数不参与求和计算。

自己的答案:
def number(x):
    for each in x:
        a = 0
        eng = str(each)
        #注意这里要为str找一个赋值变量
        if eng.endswith('5'):
            a = 1
            break
    all = 0
    #赋值都在for 循环外,避免出错
    for i in x:
        num = int(i)
        all += num
        
    result = 0
    if a == 1:
        result = all * 5
    else:
        result = all * 3

    return result

print(number((14,16,15,1,14,300)))
                    

自己的答案没有很灵活的运用上课讲的函数内容
最佳答案为:

def Sum(*params,base=3):
#添加了一个默认参数base
#用搜集参数符号*,从而使得params可以容纳多个数据
    result = 0
    for i in params:
        result += i
    result *= base

    print('结果是:', result)

Sum(1, 2, 3, 4, 5)
Sum(1, 2, 3, 4, 5, base=5)
#人为的当需要改变时,输入关键字参数使得base=5

输出:
结果是: 45
结果是: 75

转载自:https://www.jianshu.com/p/38540d75521c

1. 寻找水仙花数
题目要求:如果一个3位数等于其各位数字的立方和,则称这个数为水仙花数。例如153 = 13+53+3^3,因此153是一个水仙花数。编写一个程序,找出所有的水仙花数。

自己的答案:
def flower():
#括号可以不用定义参数    
    for x in range(10,1000):
        both = 0
        temp = x
        #这里必须用temp赋值,不然x在while会被改变,从而导致if函数无效
        while  temp:
            a =  temp % 10
            both += a**3
            temp =  temp //10
        
        if both == x:
            print ('水仙花数为:',x)
        else:
            continue    
flower()

一行代码:

转自:https://www.jianshu.com/p/38540d75521c
a = [i**3+j**3+k**3 for i in range(1, 10) for j in range(0, 10) for k in range(0, 10) if i*100+j*10+k == i**3+j**3+k**3]

2. 编写一个函数findstr(),该函数统计一个长度为2的子字符串在另一个字符串中出现的次数。例如:假定输入的字符串为"You cannot improve your past, but you can improve your future. Once time is wasted, life is wasted.",子字符串为"im",函数执行后打印“子字母串在目标字符串中共出现3次”。

def findstr():
    a='You cannot improve your past, but you can improve your future. Once time is wasted, life is wasted'
    i=a.count('im')
    print('子字母串在目标字符中总共出现:',i,'次')
findstr()

改进以后:

def findstr():
    print('请输入您想了解的英文字母:',end='')
    a=input()
    while not a.isalpha():
        print('只能输入英文,请重新输入:',end='')
        a=input()
        
    print('请输入您要查询的字母:',end='')
    b = input()
    i=a.count(b)
    print('子字母串在目标字符中总共出现:',i,'次')
findstr()

总结:见上

发布了17 篇原创文章 · 获赞 1 · 访问量 355

猜你喜欢

转载自blog.csdn.net/cccccccaaaaaaaaa/article/details/105298020