Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >小甲鱼《零基础学习Python》课后笔记(十七):函数——Python的乐高积木

小甲鱼《零基础学习Python》课后笔记(十七):函数——Python的乐高积木

作者头像
小火柴棒
发布于 2019-01-11 06:22:05
发布于 2019-01-11 06:22:05
60700
代码可运行
举报
文章被收录于专栏:石开之旅石开之旅
运行总次数:0
代码可运行

测试题

0.你有听说过DRY吗?

DRY是程序员们公认的指导原则:Don't Repeat Yourself.

1.都是重复一段代码,为什么我要使用函数(而不使用简单的拷贝黏贴)呢?

使用函数:

0) 可以降低代码量(调用函数只需要一行,而拷贝黏贴需要N倍代码)

1) 可以降低维护成本(函数只需修改def部分内容,而拷贝黏贴则需要每一处出现的地方都作修改)

2) 使序更容易阅读(没有人会希望看到一个程序重复一万行“I love FishC.com”)

2.函数可以有多个参数吗?

可以。理论上你想要有多少个就可以有多少个,只不过如果函数的参数过多,在调用的时候出错的机率就会大大提高,所以能减少参数的尽量减少。

3.创建函数使用什么关键字,要注意什么?

使用“def”关键字,要注意函数名后边要加上小括号“()”,然后小括号后边是冒号“:”,然后缩进部分均属于函数体的内容。

4.请问这个函数有多少个参数?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def MyFun((x, y), (a, b)):  
    return x * y - a * b  

0,因为类似于这样的写法是错误的!我们分析下,函数的参数需要的是变量,而这里你试图用“元祖”的形式来传递是不可行的。

5.请问调用以下这个函数会打印什么内容?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> def hello():  
        print('Hello World!')  
        return  
        print('Welcome To FishC.com!')  

会打印‘Hello World!’。因为return会结束函数的执行。

动动手

0.编写一个函数power()模拟内建函数pow(),即power(x, y)为计算并返回x的y次幂的值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def power(x,y):  
    return x**y  

1.编写一个函数,利用欧几里得算法(脑补链接)求最大公约数,例如gcd(x, y)返回值为参数x和参数y的最大公约数。

程序编写如下,为了检验程序正确,编写了一个检测的代码

主代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def gcd(x,y):  
    if x > y:  
        while y != 0:  
            yushu = x%y  
            x = y  
            y = yushu  
        gongyueshu = x  
        return gongyueshu  
    elif x < y:  
        while x != 0:  
            yushu = y%x  
            y = x  
            x = yushu  
        gongyueshu = y  
        return gongyueshu  
    else:  
        return 1  

测试代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for x in range(1,10):  
    for y in range(20,30):  
        result = gcd(x,y)  
        print('gcd(%d,%d) = %d\t' %(x,y,result))  

2.编写一个将十进制转换为二进制的函数,要求采用“除2取余”(脑补链接)的方式,结果与调用bin()一样返回字符串形式。

主程序:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def Dec2Bin(dec):  
    bin_list = []  
    result = ''  
    if dec > 0:  
        while dec != 0:  
            bin_number = dec%2  
            bin_list.append(bin_number)  
            dec = dec//2  
        while bin_list:  
            result += str(bin_list.pop())  
        return result  
    elif dec == 0:  
        return 0  
    else:  
        str1 = '暂不支持负整数喔,请输入正整数!'  
        return str1  

测试程序:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for x in range(-10,10):  
    print(Dec2Bin(x))  

运行结果如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> for x in range(-10,10):  
    print(Dec2Bin(x))  
  
      
暂不支持负整数喔,请输入正整数!  
暂不支持负整数喔,请输入正整数!  
暂不支持负整数喔,请输入正整数!  
暂不支持负整数喔,请输入正整数!  
暂不支持负整数喔,请输入正整数!  
暂不支持负整数喔,请输入正整数!  
暂不支持负整数喔,请输入正整数!  
暂不支持负整数喔,请输入正整数!  
暂不支持负整数喔,请输入正整数!  
暂不支持负整数喔,请输入正整数!  
0  
1  
10  
11  
100  
101  
110  
111  
1000  
1001  

我在这里发现了一个问题,就是当15~16行编写如下时:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def Dec2Bin(dec):  
    bin_list = []  
    result = ''  
    if dec > 0:  
        while dec != 0:  
            bin_number = dec%2  
            bin_list.append(bin_number)  
            dec = dec//2  
        while bin_list:  
            result += str(bin_list.pop())  
        return result  
    elif dec == 0:  
        return 0  
    else:  
        return print('暂不支持负整数喔,请输入正整数!')  

运行结果如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> for x in range(-10,10):  
    print(Dec2Bin(x))  
  
      
暂不支持负整数喔,请输入正整数!  
None  
暂不支持负整数喔,请输入正整数!  
None  
暂不支持负整数喔,请输入正整数!  
None  
暂不支持负整数喔,请输入正整数!  
None  
暂不支持负整数喔,请输入正整数!  
None  
暂不支持负整数喔,请输入正整数!  
None  
暂不支持负整数喔,请输入正整数!  
None  
暂不支持负整数喔,请输入正整数!  
None  
暂不支持负整数喔,请输入正整数!  
None  
暂不支持负整数喔,请输入正整数!  
None  
0  
1  
10  
11  
100  
101  
110  
111  
1000  
1001  

后来查阅资料,我是这么理解的,当参数小于零时,没有return数值,所以先是把Dec2Bin函数的print语句打印出来,而因为没有return数值,所以测试代码的print语句就打印None。所以以后写函数的话,如果直接调用,def里面函数就加print,如果调用的时候用print,则用return返回值。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年07月28日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
学习笔记-小甲鱼Python3学习第十七
优秀的东西永远是经典的,经典的东西永远是简单的,不是说复杂不好,而是能够把复杂的东西简单化,堪称经典。
py3study
2020/01/03
4260
小甲鱼《零基础学习Python》课后笔记(二十二):函数——递归是神马
测试题 0.递归在编程上的形式是如何表现的呢? 递归形式上就是在函数体里调用自身。如下所示:
小火柴棒
2019/01/11
6220
小甲鱼《零基础学习Python》课后笔记(三十七):类和对象——面向对象编程
1.当程序员不想把同一段代码写几次,他们发明了函数解决了这种情况。当程序员已经有了一个类,而又想建立一个非常接近的新类,他们会怎么做呢? 定义一个新类继承已有的这个类,这样子只需要简单重写和添加需要的方法。
小火柴棒
2019/01/11
7630
小甲鱼《零基础学习Python》课后笔记(三十二):异常处理——你不可能总是对的1
测试题 0.结合你自身的编程经验,总结下异常处理机制的重要性? 可以增强程序的适应环境的能力,提升用户体验。 1.请问以下代码是否会产生异常,如果会的话,请写出异常的名称:
小火柴棒
2019/01/11
4630
Python3笔试实际操作基础1.md
在Windows上打开文件路径需要进行转义\才能正常进行找出文件,我们约定“\t”和“\r”分别表示“横向制表符(TAB)”和“回车符”:如下面
全栈工程师修炼指南
2020/10/23
6970
Python学习笔记(九)--函数
#编写一个函数findstr(),该函数统计一个长度为2的子字符串在另一个字符串中出现的次数。 # 例如假定输入的字符串为: # Don't aim for success if you want it; just do what you love and believe in, and it will come naturally #子字符串为“it”,函数执行后打印:子字符串在目标字符串中出现2次。 方法1: def findstr(x,y): lx=list(x) ly=list(y)
张树臣
2018/05/15
8390
小甲鱼《零基础学习Python》课后笔记(十五):字符串——格式化
测试题 0. 根据说明填写相应的字符串格式化符号 符   号 说     明 %c 格式化字符及其ASCII码 %s 格式化字符串 %d 格式化整数 %o 格式化无符号八进制数 %x 格式化无符号十六进制数 %X 格式化无符号十六进制数(大写) %f 格式化定点数,可指定小数点后的精度 %e 用科学计数法格式化定点数 %g 根据值的大小决定使用%f或者%e %G 根据值的大小决定使用%F或者%E 1. 请问以下这行代码会打印什么内容? >>> "{{1}}".format("不打印", "打印")   '
小火柴棒
2019/01/11
6950
小甲鱼《零基础学习Python》课后笔记(十六):序列!序列!
重复反馈的过程,每一次对过程的重复被称为一次“迭代”,而每一次迭代得到的结果会被用来作为下一次迭代的初始值。
小火柴棒
2019/01/11
6720
小甲鱼《零基础学习Python》课后笔记(十九):函数——我的地盘听我的
这个函数返回值 None,python的函数都是有返回值的,所以17课的动动手的习题2才会那样打印的。
小火柴棒
2019/01/11
5490
小甲鱼《零基础学习Python》课后笔记(二十一):函数——lambda表达式
主要感觉就是不用为了取名字而费那么多脑子了;还可以使代码更加精简。 3.你可以使用filter()和lambda()表达式快速求出100以内所有3的倍数吗?
小火柴棒
2019/01/11
4530
学习笔记-小甲鱼Python3学习第二十
----------------------------分割线,哈哈哈----------------------------------
py3study
2020/01/03
4100
小甲鱼《零基础学习Python》课后笔记(十八):函数——灵活即强大
关键字参数是在调用函数时,带上函数参数的名字去指定调用哪个参数,从而不用按照参数的顺序调用参数。
小火柴棒
2019/01/11
5400
小甲鱼《零基础学习Python》课后笔记(一):我和Python的第一次亲密接触
Python是脚本语言。Python相比C和Java,它实现一个功能可能10行,而Java要100行,C要1000行,这只是一个比喻,不过也说明Python是一种高级的语言。Python因为其有全球开发者创建了数量众多的库,使得开发者设计程序可以不必事事躬行,可以调用他人的库实现功能,这大大缩短了开发时间。在搭上人工智能的车,Python发展的如火如荼,所以,来学Python吧!
小火柴棒
2019/01/11
6110
pyhon语法学习笔记
以下是我学习python基础语法所完成的操作样例 代码位置:https://github.com/duganlx/fopnp
用户7886150
2021/02/05
4830
小甲鱼《零基础学习Python》课后笔记(三十八):类和对象——继承
测试题: 0.继承机制给程序猿带来的最明显的好处是? 写一个新类时可以从旧类继承,不用重复编写,减少重复劳动。
小火柴棒
2019/01/11
7480
小甲鱼《零基础学习Python》课后笔记(九):了不起的分支和循环2
打印2,3。第一个break跳过print(1),跳到print(2);第二个break跳出第2个while循环,跳到print(3)。
小火柴棒
2019/01/11
8060
常规笔试算法总结.md
所谓迭代,是重复反馈过程的活动,其目的通常是为了接近并到达所需的目标或结果。每一次对过程的重复被称为一次“迭代”,而每一次迭代得到的结果会被用来作为下一次迭代的初始值。
全栈工程师修炼指南
2020/10/23
3820
Python3笔试实际操作基础3.md
在鸭子类型中,关注的不是对象的类型本身,而是它是如何使用的; 鸭子类型通常得益于不测试方法和函数中参数的类型,而是依赖文档、清晰的代码和测试来确保正确使用。
全栈工程师修炼指南
2020/10/23
8920
Python3笔试实际操作基础3.md
学习笔记-小甲鱼Python3学习第十六
迭代:重复反馈过程的活动,其目的通常是为了接近或达到所需的目标或结果,每次对过程重复称之为一次迭代,而每次迭代的结果都会被用来下一次迭代的初始值。
py3study
2020/01/03
5540
学习笔记-小甲鱼Python3学习第十六
小甲鱼《零基础学习Python》课后笔记(二十六):字典——当索引不好用时2
测试题 0.Python的字典是否支持一键(Key)多值(Value)? 不支持。对相同的键赋值会覆盖原来的值。
小火柴棒
2019/01/11
5070
推荐阅读
相关推荐
学习笔记-小甲鱼Python3学习第十七
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验