1、键入公司名称人生苦短,我用 Python键入文档副标题徐辉选取日期2 / 110目录01 讲:我和 Python 的第一次亲密接触 .802 讲:用 Python 设计第一个游戏 .903 讲:小插曲之变量和字符串 .1204 讲:改进我们的小游戏 .1305 讲:闲聊之 Python 的数据类型 .1506 讲:Pyhon 之常用操作符 .1607 讲:了不起的分支和循环 11708 讲:了不起的分支和循环 21909 讲:了不起的分支和循环 32110 讲:列表,一个打了激素的数组 12311 讲:列表,一个打了激素的数组 22512 讲:列表,一个打了激素的数组 32713 讲:元组,戴
2、上了枷锁的列表 .3014 讲:字符串:各种奇葩的内置方法 .3215 讲:字符串的格式语句与操作符 .3716 讲:序列相关内置函数介绍 .401-16 讲:阶段总结 .4517 讲:函数:Python 的乐高积木 4618 讲:函数:灵活即强大 .4718 讲 2: py 文件打包成 exe 文件 .4919 讲:函数:我的地盘我做主 .5020 讲:函数:内嵌函数和闭包 .5221 讲:函数:lambda 表达式 .5422 讲:函数:递归是神马 .5623 讲:递归:这帮小兔崽子 .5724 讲:递归:汉诺塔 5917-24 讲:阶段性总结 .6025 讲:字典:当索引值不好用时 .6
3、126 讲:字典:当索引值不好用时 26227 讲:集合:在我的世界里,你就是唯一 .6528 讲:文件:因为懂你,所以永恒 .6629 讲:文件:一个任务 6830 讲:文件系统:介绍一个高大上的东西 .7131 讲:永久存储:腌制一缸美味的泡菜 .7531 讲:异常处理:你不可能总是对的 .7633 讲:异常处理:你不可能总是对的 27834 讲:丰富的 else 语句和简洁的 with 8135 讲:图形界面用户入门:EasyGui 8336 讲:类和对象:给大家介绍对象 .8337 讲:类和对象:面向对象编程 .8538 讲:类和对象:继承 863 / 11039 讲:类和对象:拾遗
4、8740 讲:类和对象:一些相关的 BIF.9041 讲:类和对象:构造和析构 .9242 讲:类和对象:算术运算符 .9443 讲:类和对象:算术运算符 29644 讲:魔法方法:简单定制 .9745 讲:魔法方法:属性访问 .9946 讲:魔法方法:描述符 10147 讲:魔法方法:定制容器 .10448 讲:魔法方法:迭代器 1054 / 110序-小甲鱼四件在我步入职业软件开发生涯那天起就该知道的事情5 / 110我的软件开发生涯开始于大约 15 年以前。但是直到最近 5 年,我才真正地看到它的提高。下面这些事情,我希望在进入软件开发领域时我已经知道了。如果我早点知道这些事儿,我将会变
5、得更加成功。软件开发中没有“正确的方式 “在我开发生涯的早期,我在学习和争论上浪费了大量的时间。我错误地认为,在软件开发的诸多方面都存在一种绝对”正确的方式“。但是,关于软件开发,几乎每一件我当时认为是正确的事到头来都被证明是错的。更重要的是,我发现几乎没有任何一件事是非黑即白的。在编写代码和开发软件的过程中,几乎所有的决策都是基于当时特定的情形。我之前已经谈过为什么信仰一种技术对开发人员有害,但是我现在说的这个话题谈的不止是一种技术(这么狭隘)。6 / 110没有通用的最佳实践,这也是真的。甚至是一些 highy charged 话题。例如,要不要单元测试?敏捷开发和瀑布模型哪个好?这些没有
6、永远正确的答案。在我的职业生涯中,我在”正道 “(理想主义)路线的迷宫里浪费了太多的时间,而不是采用可以帮我走得更远的” 务实“(现实主义 )路线。细读书不是最佳的学习方式我一开始学习编程和技术知识的时候,我花了太多时间细读一些关于特定技术的书。7 / 110读书没错,但是选择读什么书和读它的哪一部分非常重要。比如,我记得我读过一本非常厚的讲 VC+的书。( 我十分肯定是这本书的更早的一个版本。)不管怎么说,这本书是本内容丰富的好书,但是一页一页地读并不是学习 VC+最好的方式。如果我当时先粗略地看看此书的章节,获得对 VC+的一些全局的认识,然后再去搞懂其中最最重要的部分,我能学到并记住更多
7、的东西。如果我当时坐下来,通过实际地做一些东西来练习基础知识,而不是仅仅读一下或者过一过书上的例子,我现在会更加成功。你没有在真正地学一门技术,除非你用它解决了真正的问题。8 / 110深入学习一门特定技术是浪费时间我不仅在”细读书 “上浪费了时间,我在 ”读错书“上也浪费了时间。我错误地相信,从里到外学习一门特定的技术能很好地推动我的职业生涯。我花了太多时间读一些非常专门的技术书,如,ASP.NET 或 Hibernate,而不是读更多的像代码大全,代码整洁之道,和敏捷软件开发:原则、模式与实践(C#版)。(BTW,我推荐你去读所有的这些书,如果你没读过的话。)尽管了解你所使用的技术非常重要
8、,但是成为那个特定技术的绝对专家并不重要。知道确切的 API 调用没多大好处,你需要的时候可以轻而易举地查到。我在太多技术上花了太多时间深入学习,最后这个技术不是死掉了就是我后来放弃不用了。大多数关于这些特定技术的知识最后只代表了浪费掉的时间。9 / 110我发现,成为你正在使用的特定的程序语言的专家很重要,因为程序语言方面的知识将影响你很长时间。我仍然百分之百会花时间深入学习C+,C# 和 Java,但是我可能会花较少的时间去学习 C+所有复杂的细节,因为那些细节现在对我帮助不大。在你的开发生涯中,社区极其重要!我的生涯早期,我犯了一个错误,就是不怎么去向社区寻求帮助,也不为他人提供帮助。1
9、0 / 110我一向乐于帮助我的同事,也在不同的工作岗位上也非常善于交际,但活动范围从来没有超出过公司。我在我的生涯中花了大量的时间,试图在一个特定的公司进行投资,却没能将我的时间投资在我参与的软件开发社区中。我花了很多时间,做关于技术或者是最佳实践的内部 presentation,而这些时间原本可以用来制作可以服务于社区的内容和材料,同时也能给我带来工作上的认可。11 / 110我也犯了另一个错误,就是认为自己没什么有价值的东西去贡献。我和很多刚入行的开发者聊过,有时候我觉得,比起我们这些”老油条“ ,他们有更多的东西去贡献给社区,因为他们更理解其他初学者蛋疼的问题。如果我可以重来一遍,我一
10、定会在我的生涯中更早、更多地参与各种会议和用户群。我会更早地开始写博客,并利用我的大部分学习时间去建立项目和资源,去帮助别人而不是只读书。总是参与一个业余项目可能我做的最大的,并且对我生涯影响最大的改变将会是完全戒掉电视,无尽的任务和魔兽世界(两个游戏),并把这部分时间花在一个业余项目上。我过去花了相当一部分时间做一些享受性的,但是对我的生活没有长远利益的事情。12 / 110大约 3 到 4 年前,我已经基本不看电视了,现在我也很少看电影。电视和大部分电影只是一个对时间的巨大浪费,而这些时间你可以用来干很多有用的事。视频游戏很大程度上也是一样,但至少在视频游戏里,你在积极地做一些事情,而不是
11、被动地吸收一些没有用的信息。我会一直热爱玩视频游戏,并且我不认为我会停下来,但是,我真心希望我(之前)把一大部分用来打游戏看电视的时间花在一个业余项目上。惭愧的是,我做的第一个真正的业余项目是在大约三年前,那时我开始创建我的第一个 android 应用。当你在为别人工作的时候,花时间为自己工作非常重要,不然你就是在为他人建立王国而忽视自己的王国。我不仅从最近几年的业余项目中学到了很多,并且我也从中得到了很多利益。事实上,其中一个,即制作Pluralsight 课程,是我现在花全部时间在做的。 01 讲:我和 Python 的第一次亲密接触本期内容介绍:1. Python 语言介绍;2. Pyt
12、hon 程序下载安装过程;3. IDLE 功能介绍;4. 字符串类型说明;5. print()函数功能说明;6. 在 Python 中的“*”和“+”号运算符的功能;13 / 110内容详细说明1. Python 即可用作解释其他高级语言的脚本语言,也是一门面向对象的高级语言;较之 C 语言和 java 编程效率要高得多。2. 推荐在 Python 官网下载 3.0 以上版本并安装,下载地址见 www.python.org/downloads/3. IDLE 是 Python 程序自带的辅助开发工具,也就是一个能与程序进行交互的文本框,在开始菜单下的输入框内输入“IDLE”并回车, 便能找到并
13、打开 IDLE 界面,初学者可以靠它进行交互式学习。4. 字符串类型在 Python 中被定义为以双引号或单引号引起来的字符,例如,在 Python 中只有字符串变量,没有像 C 语音一样字符变量的概念,例如5. print()函数用于将字符串或数字等在屏幕上显示,例如 print(小甲鱼)小甲鱼 print(3+5)86. 在 Python 中“*”连接一个字符串和数字时表示将字符串重复多少次,例如 “赞“*5赞赞赞赞赞而两个字符串之间以 “+”号连接表示将两个字符串拼接,例如 小甲鱼+醉酒青牛小甲鱼醉酒青牛另 外“+”号两边必须是同样的数据类型,如果是一个字符串和一个数字则报错,例如 小甲
14、鱼+5Traceback (most recent call last):File “, line 1, in 小甲鱼+514 / 110TypeError: Cant convert int object to str implicitly7. 在 Widnwos 下 ,在 IDLE 下的快捷键小知识:1)组合 Alt + P 表示上一个命令,Alt + N 表示下一条命令15 / 11002 讲:用 Python 设计第一个游戏上期内容回顾:1. Python 语言介绍2. Python 程序下载安装过程3. IDLE 功能介绍4. 字符串类型说明5. print()函数功能说明6. 在
15、Python 中的“*” 和“+” 号运算符的功能7. IDLE 中一些常用快捷键本期主要内容导读:主要是通过一个文字小游戏,使得大家了解 Python 程序的基本格式以及相应程序的流程图和关于内置函数的相关介绍。废话不多说,入正题!1. Python 程序的基本格式介绍Python 程序的的基本格式是缩进,通过不同的缩进代表不同的作用域,这是有别于 C 及 JAVA 等高级语言最显著的特点,而且缩进使得程序变得更加简洁和整齐。另外,我们需要掌握几个快捷键来提高编程效率:在 IDLE 窗口下,Crtl +n 表示新建一个 Python 程序文件,Crtl +s 表示保存当前编辑的 Python
16、 程序文件,F5 表示执行程序文件;还有一个 Tab 键对初学者也非常重要。它有三个作用:1 )通过按 Tab 键可实现程序代码缩进,IDLE 现在支持选择多行代码,实现多行缩进的效果; 2)调用内置函数时,如果只记得头几个字母,可以输进去之后按 Tab 键, 会显示该头字母开头的所有内置函数。2. 绘制流程图我们主要了解一个程序包含的基本要素,任何一个程序最基本的要素为” 开始“, ”程序体“ , ”结束“ 三部分组成,程序体内除了一些按先后顺序执行的语句外,还有条件语句和循环语句,他们是程序体的核心。本期的程序对应的流程图见附件。3. 内置函数内置函数,英文为 Bulit-in funct
17、ions,我的理解就是可以在 Python 的 IDLE 里面直接使用的函数,而其他函数使用是需要通过 import 语句调入扩展包后才能使用。在 IDLE 下通过键入 dir(_builtins_)回车可以列出所有 Python的内置函数,而每个内置函数的功能及使用方法可以使用 help(内置函数名)的方法显示出来。这一期里面,我们要掌握 input()函数以及 int()函数的用法,关于这两个函数用法由于过于简单,这里就不再赘述。4. 一点补充Python 程序内不需要事先声明变量,可以直接赋值使用,另外需要注意 if 和 else 语句的使用方法,赋运算符值“=“和比较运算符 “=“ 的
18、使用和区别来。文字游戏代码:16 / 110流程图17 / 11003 讲:小插曲之变量和字符串上期内容回顾:1. Python 程序的基本格式介绍;2. 绘制流程图;3. 内置函数介绍;本期主要内容简介:1. 变量;2. 转义字符使用介绍;3. 原始字符串用法;4. 长字符串的用法;详细内容说明:1. 变量:在 Python 中变量不需要事先声明,但是需要先赋值后再使用,变量更像是贴在值上的标签,这给 Python带来了很大便捷。变量的名字和 C 及 java 编程语言一样,由字母、数字、下划线组成,且首位不允许是数字,而且变量名最好能专业些,让人一看就知道其含义。2. 字符串: 在 Pyt
19、hon 中字符串就是以双引号或者单引号括起来的内容,但是单、双引号不能混用。例如“小甲鱼“, 小牛 都是合法的字符串,而“ 小甲虫则会报错。3. 转义字符:刚才说了,在 Python 里面 和主要起到定义字符串的作用,但是如果一个字符串中本身又包含字符串呢,不要急,这里轮到我们的转义 字符华丽登场了!转义字符就是反斜杠,对于想要将其作为一个字符处理的单引号或者双引号而言,前面只要加上转义字符就可以了。例如对于字符串 Lets go!,我们就可以这样写Lets go!。另外,我们也可以使用“Lets go!“来表示。最后,转义字符加上一个字母可以表示特殊的含义,比如最常见的n,t等。感兴趣的鱼油
20、可以看鱼神的总结http:/ 原始字符串:在 Python 中,反斜杠主要用来作为转义字符的,当我们需要用其本身含义时,可以对其自身前面加一个转义字符处理。但是对于一些特殊的字符串,如果里面频繁用到反斜杠,再手动的去一个个加就显得繁琐,这个时候可以在其字符串前面加上一个字母 r,轻松解决,这就是原始字符串的含义,让字符串中的反斜杠回归原始的本意。例如字符串 C:Program FileIntelWiFiHelp,定义只要 rC:Program FileIntelWiFiHelp,他的实现方法其实很简单,就是程序会自动对每一个反斜杠前面再加一个反斜杠。但是 r 不能对末尾是反斜杠的字符串进行定义
21、,C:Temp。这个时候如果非要使用 r 进行原始字符串操作的话可以采用如下形式解决:rC:Temp 或者rC:Temp+。5. 长字符串:一般情况下,使用单引号或者双引号只能引一行的字符串,如果字符串是有多行组成,则需要使用三引号,例如:我爱鱼 C,正如我爱小甲鱼。他那呱唧、呱唧的声音,总萦绕在我的脑海里,久久不肯散去。 6. 特别注意:Python 里面所有的操作符如单引号、双引号、冒号、小括号等等都必须是英文字符,否则会报错。18 / 11019 / 11004 讲:改进我们的小游戏上期内容回顾:1. 变量;2. 转义字符使用介绍;3. 原始字符串用法;4. 长字符串的用法;本期内容详解
22、:通过对比可以发现,1):小牛的程序里面在循环体内外都有输入数字和判断语句,显得有些重复;2): 如果第三次输入也没有输对的话,小牛的代码里并没有判断输入的数是大了还是小了;而鱼神代码里面,在循环体外并没有让用户输入一个值,而是对 guess 赋了一个初值 0,并保证这个值绝对不与答案相等;在循环体内,首先要求用户输入一个数,并让次数总数减 1,然后先判断是否与答案值相等,等了就结束,否则继续判断值是大了还是小了,大了则输出值偏大了并接着判断输入次数是否用尽,小了同样输入小了并判断次数是否用尽,接着判断程序体条件是否为真以判断是否继续循环,直到用户输入正确或次数用尽则结束循环。最后一条语句声明
23、游戏结束。20 / 11021 / 11005 讲:闲聊之 Python 的数据类型小牛有话说:亲爱的鱼油们,大家好,我是小牛,我又过来班门弄斧啦,这一期里面鱼神主要是对 Python 中的数据类型进行了介绍,主要涉及到了字符串。整形和浮点型及布尔类型等基本的数据类型概念介绍,对于浮点类型而言的“e 记法” 的概念和应用,类型转换和获取类型信息的方法本期内容介绍:1. 基本数据类型:1)整型,在 Python3 中长整形和整形归为一类,所有的整数都属于整型,例如 1,0,1000,1203 等等2)浮点型,数字中有小数点的数,如 12.1 1.85 10.0 等等,另外 1e10 也表示浮点数
24、3)字符串,所有以单引号或双引号括起来的值都叫做字符串,例如“小甲鱼” 小甲虫 醉酒青牛4)布尔类型, 布尔类型只有两个值,True 或 False ,记得在 Python 里面这两个值首字母均大写。 2. e 记法;如果数位很多的话,一般将其表示为 e 记法形式,例如 0.000000000000135 用 e 记法表示为 1.35e-13,它是一个浮点数类型,例如用 e 记法表示为 1e3,表示的是 1000.0 是个浮点数,这里 e 也可以改写成 E。3. 数据类型转换整型强制转换函数 int(),可以将纯数字的字符串或浮点型强制转换为整形,如 int(0012)为 12; int(12
25、.5)为 12浮点型强制转换函数 float(),可以将包含一个小数点的数字字符串或者整形转换为浮点型,如 float(0012)为12.0,float(.123)为 0.123; float(12)为 12.0字符串强制类型转换函数 str(),可以将任何类型转换为字符串类型,例如 str(1e28)为1e+28 str(1e2)为100.0等等4. 数据类型信息获取;函数 type(),直接给出数的数据类型,例如 type(12.0)则返回 float,type(1000) 返回 int, type(False)返回 bool 等函数 isinstance()需要给出需要判断的数和一个数据
26、类型,是则返回 True,否则返回 False,如 isinstace(1,int)返回True , isinstance(12.5,float)返回 True,isinstance(I love u,float)返回 False,而 isinstance(I love u,str)返回 True22 / 11006 讲:Pyhon 之常用操作符本期主要内容导读:亲爱的鱼油们,大家好,我是小牛,这一期我们归纳一下鱼神第六讲 Python 常用运算符。这一期里面鱼神主要是对Python 中常用运算符进行了简要系统讲解,主要涉及到了算数运算符、比较运算符和逻辑运算符三大类,并归纳了整个运算符在使用
27、过程中的优先级问题。本期内容详解:1. 算术运算符: 加(+ ) ,减(- ) ,乘(*) ,除(/) ,幂运算( *) ,地板除(/)1) /和/的区别在 Python 中的除运算符与其它程序语言的不太一样,/表示真正的除号,例如 1/3=0.3333333333333333,而 4/2 的值为 2.0。说明两个数相除的值是一个浮点数,而其它程序语言/ 却表示两个整数相除,只返回一个整数。Python 后来为了兼容这种用法,引入了/来实现。例如 3/2 的值为 1,而 3.0/2 的值为 1.0,且 3/2.0 的值也为 1.0。说明在Python 中 /符号两边同为整数时的值才为整数,否则
28、则为一个浮点数(后面带.0) 。2)* 运算符与负号(- )运算符的优先级问题在 Python 中, -在一个数字前面表示成负号,例如-3,-5.12 等。*在-的右边时,其优先级高于-,例如-2*2 相当于-(2*2)等于-4,而当其在右边时优先级低于-,如 2*-2 则相当于 2*(-2)等于 0.25.3)允许运算符与等号一起使用,表示变量本身参加运算并重新赋值给变量,例如 x =5,x+=5 后,x 的值为 102.逻辑操作符: and or not1) x and y 的值计算过程为先判断 x 的值,如果为 0 则返回 0,否则返回 y 的值, 例如 3 and 4 值为 4;0 a
29、nd 4 值为 02) x or y 的值计算过程为先判断 x 的值,如果为 0 则返回 y 的值,否则返回 x 的值,例如 3 or 4 的值为 3;0 or 4的值为 43) not x 的值的计算过程为先判断 x 的值,如果为 0 则返回 True,否则返回 False 例如 not 0 的值为 True; not 0.12 值为 False4)三者的优先级 not and or3. 比较运算符: = = !=满足条件为 True 否则为 False,例如 34 的值为 False 3比较运算符 逻辑运算符,具体见附件。23 / 11007 讲:了不起的分支和循环 1本期主要内容导读:亲
30、爱的鱼油们,大家好,我是小牛,这一期我们归纳一下鱼神第七讲了不起的分支与循环 1。这一期里面鱼神主要从大面上讲了分支和循环在程序体内的重要作用并以一个打飞机的游戏为例,详细叙述了分支和循环在编程过程中的应用。这里,小牛就循着鱼神的思路,归纳一下打飞机的这个小游戏里面如何用到分支和循环的吧。首先小牛给出了打飞机的框架代码和相应流程图。在这里面用到了一个总的 while 循环,在循环体内部有很多的条件分支语句,例如判断用户是否关闭按钮,循环体次数是否超过 50 次,用户鼠标是否移动以及我方飞机是否与小飞机相撞等等。这些条件语句会将程序引向不同的分支内。详情请看下述代码和流程图,希望能帮助到更多的鱼
31、油们理解分支和循环在编程中的重要作用!24 / 11025 / 11008 讲:了不起的分支和循环 2本期主要内容导读:亲爱的鱼油们,大家好,我是小牛,这一期我们归纳一下鱼神第八讲了不起的分支与循环 2。这一期里面鱼神主要讲了在 Python 中条件语句三种用法及特点,条件表达式(三元操作符)的用法以及断言(assert )语句的用法,下面我们就来详细介绍一下各个知识点吧归1. 条件语句三种用法:首先是一个具体的程序实现问题:按照 100 分制,90 分以上为 A,8090 为 B,70-80 为 C,6070 为 D,60 以下为 E,当用户输入分数自动以 ABCDE 显示并打印。这里介绍三
32、种条件语句实现,并分析各个操作过程。方式一代码中每次输入一个数,需要将程序中所有代码走完,然而当程序判断出来分数属于哪个字母并打印后并不需要将后续条件继续执行。方式二代码中巧妙用到了 else 语句,使得程序执行变得简洁,但形式上层次分得过多;方式三代码与方式二执行效果上是一样的,引入了新的条件语句 elif 相当于将 else 和 if 两条语句归并在一起的功能,从形式上看程序也显得比较整洁对称。2. 条件表达式(三目运算符)这是 Python 为了使得程序更加简洁而新引入过来的一个三目操作符,顾名思义就是有三个参数。形式为 x if 条件表达式 else y,先判断条件表达式真假,真则取
33、x 的值,否则取 y 的值。举个例子 3 if 43 else 4 值为 3,而 3 if 44,程序就会执行这一条语句后崩溃并报出异常,而 assert 43 则正常执行26 / 11027 / 11009 讲:了不起的分支和循环 3本期主要内容导读:亲爱的鱼油们,大家好,我是小牛,这一期我们归纳一下鱼神第九讲了不起的分支与循环 3。这一期里面鱼神主要讲了在 Python 中的 while 循环和 for 循环,重点介绍了 for 循环的用法并介绍了 for 循环里面经常使用的一个内置函数range(),最后介绍了终止循环的两个语句 break 和 continue 的用法和区别,下面我们就
34、来详细介绍一下各个知识点吧归1.while 循环其基本形式是 while 条件:循环体例如下面的代码,while 循环中首先判断条件是否成立,成立则执行循环体,然后再次判断条件是否成立,如此循环下去直到条件不成立 #循环体,i 的值每循环一次自身加 1则打印到屏幕 0 1 22.for 循环在 Python 中 for 循环又叫计数器循环,其功能非常强大,能够自动调用迭代器的 next 方法并自动获取 stop iteration异常并结束循环。for 语句的形式为:for 目标 in 表达式 :循环体在这里,目标指的的每次迭代的变量的值,表达式一般是序列(字符串,列表,元组等) ,下面以几个
35、例子来说明 for循环的用法:#循环体则打印出来 F i s h C 则打印出 小甲鱼 3 小布丁 3 黑夜 2 醉酒青牛 43.range()内置函数生成一个数字序列的内置函数,经常作为 for 循环的表达式存在,其形式是 range(start, stop step=1)28 / 110中括号内的值表示可选项,range()函数有 3 个参数,start 表示数字起始值,stop 表示结束值且不包含该值,从 start到 stop 为一个等差数列,默认等差数列的公差是 step 等于 1. 例如 list(range(3)的值为0,1,2 list(range(1,3)值为1,2而 lis
36、t(range(0,3,2)的值为 0,2。如果 step 值为负时,则 start 的值必须大于 stop,例如 list(range(3,1,-1)的值为3,2最后举一个 for 循环中使用 range()函数的例子:则打印出 0 1 24.break 和 continue 语句Python 中在循环体内也可以终止循环,这个语句就是 break 和 continue,不同的是 break 是结束所在循环,continue是结束本轮循环并判断循环条件。下面分别举一个例子说明。break 语句例子:执行 break 之后,直接跳出循环,因此程序中只要输入“小甲鱼是帅哥”整个循环即结束29 / 11010 讲:列表,一个打了激素的数组 130 / 110