零基础学python全套课后题带目录

发布时间:2018-01-04 11:06:29   来源:文档文库   
字号:

目录

第一课 1

第二课 2

第三课 4

第四课 4

第五课 5

第六课 17

第八课 21

第九课 24

第十课 30

第十二课 35

第十三课 39

第十四课 44

第十五课 53

第十六课 55

第十七课 59

第十八课 64

第十九课 68

20 78

21 88

22 92

2324 94

25 96

26 101

27 105

28 107

29 111

30 118

31 123

32 126

33 131

34 137

35 145

36 151

37 154

38 162

39 170

40 172

41 177

42 182

43 189

44 194

45 201

46 208

47 217

48 221

49 225

50 229


第一

0. Python 是什么类型的语言?

Python是脚本语言

脚本语言(Scripting language)是电脑编程语言,因此也能让开发者藉以编写出让电脑听命行事的程序。以简单的方式快速完成某些复杂的事情通常是创造脚本语言的重要原则,基于这项原则,使得脚本语言通常比 C语言、C++语言 Java 之类的系统编程语言要简单容易。

也让脚本语言另有一些属于脚本语言的特性:

语法和结构通常比较简单

学习和使用通常比较简单

通常以容易修改程序的解释作为运行方式,而不需要编译

程序的开发产能优于运行性能


一个脚本可以使得本来要用键盘进行的相互式操作自动化。一个Shell脚本主要由原本需要在命令行输入的命令组成,或在一个文本编辑器中,用户可以使用脚本来把一些常用的操作组合成一组串行。主要用来书写这种脚本的语言叫做脚本语言。很多脚本语言实际上已经超过简单的用户命令串行的指令,还可以编写更复杂的程序。


1. IDLE 是什么?

IDLE是一个Python Shellshell的意思就是外壳,基本上来说,就是一个通过键入文本与程序交互的途径!像我们Windows那个cmd窗口,像Linux那个黑乎乎的命令窗口,他们都是shell,利用他们,我们就可以给操作系统下达命令。同样的,我们可以利用IDLE这个shellPython进行互动。


2. print() 的作用是什么?

print() 会在输出窗口中显示一些文本(在这一讲中,输出窗口就是IDLE shell窗口)。


3. Python 中表示乘法的符号是什么?

Python中的乘号是*(星号)。


4. 为什么 >>>print('I love fishc.com ' * 5) 可以正常执行,但 >>>print('I love fishc.com ' + 5) 却报错?

Python 中不能把两个完全不同的东西加在一起,比如说数字和文本,正是这个原因,>>>print('I love fishc.com ' + 5) 才会报错。这就像是在说五只小甲鱼加上苍井空会是多少?一样没有多大意义,结果可能是五,可能是六,也可能是八!不过乘以一个整数来翻倍就具有一定的意义了,前边的例子就是将 "I love fishc.com" 这个字符串打印五次。


5. 如果我需要在一个字符串中嵌入一个双引号,正确的做法是?

你有两个选择:可以利用反斜杠(\)对双引号转义:\",或者用单引号引起这个字符串。例如:' I l"o"ve fishc.com '


6. 为什么我们要使用 Python3Python2到底有什么问题?看起来很多程序员依然都在使用Python2

确实还有相当多的程序员在使用 Python2,不过 Python3 才是 Python 发展的未来,就像 XP WIN7 一样。在《零基础入门学习Python》的系列教程准备中,小甲鱼发觉 Python3 中的新特性确实很妙,很值得进行深入学习!你也不用担心,如果你了解了 Python3Python2 的代码阅读对于你来说根本不成问题!

第二

0. 什么是BIF

BIF 就是 Built-in Functions,内置函数。为了方便程序员快速编写脚本程序(脚本就是要编程速度快快快!!!),Python 提供了非常丰富的内置函数,我们只需要直接调用即可,例如 print() 的功能是打印到屏幕input() 的作用是接收用户输入(注:Python3 input() 取代了 Python2 raw_input(),用法如有不懂请看视频讲解)。

太多BIF学不过来怎么办?看不懂英文说明怎么办?Python3的资料太少怎么办?没事,有了小甲鱼,妈妈再也不用担心我的学习了!


1. 用课堂上小甲鱼教的方法数一数 Python3 提供了多少个 BIF

Python IDLE 中,输入 dir(__builtins__) 可以看到 Python 提供的内置方法列表(注意,builtins 前后是两个下划线哦)其中小写的就是 BIF。如果想具体查看某个 BIF 的功能,比如 input(),可以在 shell 中输入 help(input),就会得到这个 BIF 的功能描述。哦,答案应该是 68 个,不信你自己数数看,你们肯定没有自己完成作业就来看答案!哼~ T_T


2. Python 看来:'FishC' 'fishc' 一样吗?

不一样,因为 Python 是一个敏感的小女孩,所以不要试图欺骗她,对 Python 来说,fishc FishC 是完全不同的两个名字,所以编程的时候一定要当心。不过 Python 会帮助解决可能因此出现的问题,例如只有当标识符已经赋值后(还记得吗,小甲鱼在课堂中说过 Python 的变量是不用先声明的)才能在代码中使用,未赋值的标识符直接使用会导致运行时错误,所以你很快就可以根据经验发现此问题。


3. 在小甲鱼看来,Python 中什么是最重要的?你赞同吗?

缩进!在小甲鱼看来,缩进是 Python 的灵魂,缩进的严格要求使得 Python 的代码显得非常精简并且有层次(小甲鱼阅读过很多大牛的代码,那个乱......C语言不是有国际乱码大赛嘛......)。

所以在 Python 里对待缩进代码要十分小心,如果没有正确地缩进,代码所做的事情可能和你的期望相去甚远(就像C语言里边括号打错了位置)。

如果在正确的位置输入冒号“:”IDLE 会自动将下一行缩进!


4. 这节课的例子中出现了“=”“==”,他们表示不同的含义,你在编程的过程中会不小心把“==”误写成“=”吗?有没有好的办法可以解决这个问题呢?

C语言的话,如果 if( c == 1 ) 写成 if( c = 1 ),程序就完全不按程序员原本的目的去执行,但在 Python 这里,不好意思,行不通,语法错误!Python 不允许 if 条件中赋值,所以 if c = 1: 会报错!

小甲鱼觉得这种做法可以非常有效的防止程序员因为打炮、熬夜等问题导致粗心的 BUG ,并且这类 BUG 杀伤力都巨大!


5. 你听说过拼接这个词吗?

在一些编程语言,我们可以将两个字符串相加在一起,如:'I' + 'Love' + 'FishC' 会得到 'ILoveFishC',在 Python 里,这种做法叫做拼接字符串。

第三课

0. 编写程序:hello.py,要求用户输入姓名并打印你好,姓名!

1. name = input("请输入您的姓名:")

2. print('你好,' + name + '!')

复制代码



1. 编写程序:calc.py 要求用户输入1100之间数字并判断,输入符合要求打印你妹好漂亮,不符合要求则打印你大爷好丑

1. temp = input("请输入1100之间的数字:")

2. num = int(temp)

3. if 1 <= num <= 100:

4.     print('你妹好漂亮^_^')

5. else:

6.     print('你大爷好丑T_T')

复制代码

5. 如果非要在原始字符串结尾输入反斜杠,可以如何灵活处理?

1. >>>str = r'C:\Program Files\FishC\Good''\\'

复制代码

第四课

测试题:

0. 请问以下代码会打印多少次我爱鱼C

1. while 'C':

2.     print('我爱鱼C!')

复制代码


1. 请问以下代码会打印多少次我爱鱼C

1. i = 10

2. while i:

3.     print('我爱鱼C!')

4.     i = i - 1

复制代码


2. 请写出与 10 < cost < 50 等价的表达式

3. Python3 中,一行可以书写多个语句吗?

4. Python3 中,一个语句可以分成多行书写吗?

5. 请问Python and 操作符 C语言的 && 操作符 有何不同?【该题针对有CC++基础的朋友】

6. 听说过短路逻辑(short-circuit logic吗?


动动手:

0. 完善第二个改进要求(为用户提供三次机会尝试,机会用完或者用户猜中答案均退出循环)并改进视频中小甲鱼的代码。


1. 尝试写代码实现以下截图功能:

第五课


测试题:

0. Python 中,int 表示整型,那你还记得 boolfloat str 分别表示什么吗?

1. 你知道为什么布尔类型(bool) True False 分别用 1 0 来代替吗?

2. 使用 int() 将小数转换为整数,结果是向上取整还是向下取整呢?

3. 我们人类思维是习惯于四舍五入法,你有什么办法使得 int() 按照四舍五入的方式取整吗?

4. 取得一个变量的类型,视频中介绍可以使用 type() isinstance(),你更倾向于使用哪个?

5. Python3 可以给变量命名中文名,知道为什么吗?

6. 【该题针对零基础的鱼油】你觉得这个系列教学有难度吗?


动动手:

0. 针对视频中小甲鱼提到的小漏洞,再次改进我们的小游戏:当用户输入错误类型的时候,及时提醒用户重新输入,防止程序崩溃。

如果你尝试过以下做法,请举下小手:

1. temp = input("不妨猜一下小甲鱼现在心里想的是哪个数字:")

2. # 这种想法是因为type(1)会返回,如果type(temp)返回结果一致说明输入是整数。

3. while type(temp) != type(1):

4.     print("抱歉,输入不合法,", end='')

5.     temp = input("请输入一个整数:")

复制代码

或者可能这样:

1. temp = input("不妨猜一下小甲鱼现在心里想的是哪个数字:")

2. # not操作符的作用是将布尔类型的结果翻转:即取反的意思,not True == Flase

3. while not isinstance(temp, int):

4.     print("抱歉,输入不合法,", end='')

5.     temp = input("请输入一个整数:")

复制代码

以上方法的思路是正确的,不过似乎忽略了一点儿:就是input()的返回值始终是字符串,所以type(temp)永远是  
    
其实有蛮多的做法可以实现的,不过就目前我们学习过的内容来看,还不足够。

所以,在让大家动手完成这道题之前,小甲鱼介绍一点新东西给大家!

s为字符串

s.isalnum()  所有字符都是数字或者字母,为真返回 Ture,否则返回 False

s.isalpha()   所有字符都是字母,为真返回 Ture,否则返回 False

s.isdigit()     所有字符都是数字,为真返回 Ture,否则返回 False

s.islower()    所有字符都是小写,为真返回 Ture,否则返回 False

s.isupper()   所有字符都是大写,为真返回 Ture,否则返回 False

s.istitle()      所有单词都是首字母大写,为真返回 Ture,否则返回 False

s.isspace()   所有字符都是空白字符,为真返回 Ture,否则返回 False
         
例如:

>>> s = 'I LOVE FISHC'
>>> s.isupper()
>>> True


好了,文字教程就到这里,大家赶紧趁热打铁,改造我们的小游戏吧!


1. 写一个程序,判断给定年份是否为闰年。(注意:请使用已学过的 BIF 进行灵活运用)

这样定义闰年的:能被4整除但不能被100整除,或者能被400整除都是闰年。


2. 请写下这一节课你学习到的内容:格式不限,回忆并复述是加强记忆的好方式!



测试题答案:

0. Python 中,int 表示整型,那你还记得 boolfloat str 分别表示什么吗?

bool 表示布尔类型
float 表示浮点型
str 表示字符串


1. 你知道为什么布尔类型(bool) True False 分别用 1 0 来代替吗?

你可能听说过计算机是很的,究其根本是因为它只认识二进制数,所以所有的编程语言最终都会转换成简单的二进制序列给CPU按照一定的规则解析。
由于二进制只有两个数:0 1,因此用 0 1 来表示 False True 再适合不过了,因为不用浪费资源在转换的过程上!


2. 使用 int() 将小数转换为整数,结果是向上取整还是向下取整呢?

我们可爱的小甲鱼说了,小数取整会采用比较暴力的截断方式,即向下取整。(注:5.5向上取整为6,向下取整为5


3. 我们人类思维是习惯于四舍五入法,你有什么办法使得 int() 按照四舍五入的方式取整吗?

int() 固然没那么聪明,但机器是死的,鱼油是活的!
5.4 “四舍五入结果为:5int(5.4+0.5) == 5
5.6 “四舍五入结果为:6int(5.6+0.5) == 6
大家看明白了吗?


4. 取得一个变量的类型,视频中介绍可以使用 type() isinstance(),你更倾向于使用哪个?

建议使用 isinstance(),因为它的返回结果比较直接,另外 type() 其实并没有你想象的那么简单,我们后边会讲到。


5. Python3 可以给变量命名中文名,知道为什么吗?

Pyhton3 源码文件默认使用utf-8编码(支持中文),这就使得以下代码是合法的: 
>>> 小甲鱼 = '我爱你'  
>>> print(小甲鱼)
>>> 我爱你


6. 【该题针对零基础的鱼油】你觉得这个系列教学有难度吗?

如果有不懂的问题,请在此处提问:http://bbs.fishc.com/forum-173-1.html

另外需要小甲鱼在视频讲解的方面做哪方面改进请回帖告之!





动动手答案:

0. 针对视频中小甲鱼提到的小漏洞,再次改进我们的小游戏:当用户输入错误类型的时候,及时提醒用户重新输入,防止程序崩溃。

需要注意的地方在代码中已经注释!

1. import random

2. times = 3

3. secret = random.randint(1,10)

4. print('------------------我爱鱼C工作室------------------')

5. guess = 0

6. print("不妨猜一下小甲鱼现在心里想的是哪个数字:", end=" ")

7. while (guess != secret) and (times > 0):

8.     temp = input()

9.     while not temp.isdigit():

10.         temp = input("抱歉,您的输入有误,请输入一个整数:")

11.     guess = int(temp)

12.     times = times - 1 # 用户每输入一次,可用机会就-1

13.     if guess == secret:

14.         print("我草,你是小甲鱼心里的蛔虫吗?!")

15.         print("哼,猜中了也没有奖励!")

16.     else:

17.         if guess > secret:

18.             print("哥,大了大了~~~")

19.         else:

20.             print("嘿,小了,小了~~~")

21.         if times > 0:

22.             print("再试一次吧:", end=" ")

23.         else:

24.             print("机会用光咯T_T")

25. print("游戏结束,不玩啦^_^")

复制代码



1. 写一个程序,判断给定年份是否为闰年。

1. temp = input('请输入一个年份:')

2. while not temp.isdigit():

3.     temp = input("抱歉,您的输入有误,请输入一个整数:")

4.

5. year = int(temp)

6. if year/400 == int(year/400):

7.     print(temp + ' 是闰年!')

8. else:

9.     if (year/4 == int(year/4)) and (year/100 != int(year/100)):

10.         print(temp + ' 是闰年!')

11.     else:

12.         print(temp + ' 不是闰年!')

复制代码


2. 尝试写代码实现以下截图功能:
 


3. 请写下这一节课你学习到的内容:格式不限,回忆并复述是加强记忆的好方式!


回复您的答案即可查看参考答案!

测试题答案:

0. 请问以下代码会打印多少次我爱鱼C

死循环,会一直打印我爱鱼C(嗯,这也算是永远支持鱼C的方法之一),直到崩溃或者用户按下快捷键 CTRL + C(强制结束)

造成死循环的原因是 while 后边的条件永远为真(True),在 Python 看来,只有以下内容会被看作假(注意冒号括号里边啥都没有,连空格都不要有!):False None 0 "" '' () [] {}

其他一切都被解释为真!

不妨试试:

1. while '':

2.     print('进入循环')

3. print('退出循环')

复制代码


或者

1. while Flase:

2.     print('进入循环')

3. print('退出循环')

复制代码


或者

1. while 0:

2.     print('进入循环')

3. print('退出循环')   

复制代码




1. 请问以下代码会打印多少次我爱鱼C

会打印 10 次。


2. 请写出与 10 < cost < 50 等价的表达式

(10 < cost) and (cost < 50)


3. Python3 中,一行可以书写多个语句吗?

可以,语句之间用分号隔开即可,不妨试试:
>>> print('I love fishc');print('very much!')


4. Python3 中,一个语句可以分成多行书写吗?

可以,一行过长的语句可以使用反斜杠或者括号分解成几行,不妨试试:

1. >>> 3 > 4 and \

2.   1 < 2

复制代码

或者

1. >>> ( 3 > 4 and 

2.   1 < 2 )

复制代码



5. 【该题针对有CC++基础的朋友】请问Python and 操作符 C语言的 && 操作符 有何不同?

有图有真相(C\C++ VS Python)


 

VS

 


6. 听说过短路逻辑(short-circuit logic吗?

逻辑操作符有个有趣的特性:在不需要求值的时候不进行操作。这么说可能比较高深,举个例子,表达式 x and y,需要 x y 两个变量同时为真(True)的时候,结果才为真。因此,如果当 x 变量得知是假(False)的时候,表达式就会立刻返回 False,而不用去管 y 变量的值。

这种行为被称为短路逻辑(short-circuit logic)或者惰性求值(lazy evaluation),这种行为同样也应用与 or 操作符,这个后边的课程小甲鱼会讲到,不急。

实际上,Python 的做法是如果 x 为假,表达式会返回 x 的值(0),否则它就会返回 y 的值(例子参考楼上那题)。




动动手答案:

0. 完善第二个改进要求(为用户提供三次机会尝试,机会用完或者用户猜中答案均退出循环)并改进视频中小甲鱼的代码。

需要注意的地方在代码中已经注释!

1. import random

2. times = 3

3. secret = random.randint(1,10)

4. print('------------------我爱鱼C工作室------------------')

5. # 这里先给guess赋值(赋一个绝对不等于secret的值)

6. guess = 0

7. # print()默认是打印完字符串会自动添加一个换行符,end=" "参数告诉print()用空格代替换行

8. # 嗯,小甲鱼觉得富有创意的你应该会尝试用 end="JJ"

9. print("不妨猜一下小甲鱼现在心里想的是哪个数字:", end=" ")

10. while (guess != secret) and (times > 0):

11.     temp = input()

12.     guess = int(temp)

13.     times = times - 1 # 用户每输入一次,可用机会就-1

14.     if guess == secret:

15.         print("我草,你是小甲鱼心里的蛔虫吗?!")

16.         print("哼,猜中了也没有奖励!")

17.     else:

18.         if guess > secret:

19.             print("哥,大了大了~~~")

20.         else:

21.             print("嘿,小了,小了~~~")

22.         if times > 0:

23.             print("再试一次吧:", end=" ")

24.         else:

25.             print("机会用光咯T_T")

26. print("游戏结束,不玩啦^_^")

复制代码



1. 尝试写代码实现以下截图功能:

1. temp = input('请输入一个整数:')

2. number = int(temp)

3. i = 1

4. while number:

5.     print(i)

6.     i = i + 1

7.     number = number - 1

复制代码



2. 尝试写代码实现以下截图功能:

1. temp = input('请输入一个整数:')

2. number = int(temp)

3. while number:

4.     i = number - 1

5.     while i:

6.         print(' ', end = '')

7.         i = i - 1

8.     j = number

9.     while j:

10.         print('*', end = '')

11.         j = j - 1

12.     print()

13.     number = number - 1

复制代码

第六课

测试题:

0. Python floor 除法现在使用 // 实现,那 3.0 // 2.0 您目测会显示什么内容呢?

1. a < b < c 事实上是等于?

2. 不使用 IDLE,你可以轻松说出 5 ** -2 的值吗?

3. 如何简单判断一个数是奇数还是偶数?

4. 请用最快速度说出答案:not 1 or 0 and 1 or 3 and 4 or 5 and 6 or 7 and 8 and 9

5. 还记得我们上节课那个求闰年的作业吗?如果还没有学到求余操作,还记得用什么方法可以委曲求全代替“%”的功能呢?


动动手:

0. 请写一个程序打印出 0~100 所有的奇数。


1. 我们说过现在的 Python 可以计算很大很大的数据,但是......真正的大数据计算可是要靠刚刚的硬件滴,不妨写一个小代码,让你的计算机为之崩溃?


2. 

爱因斯坦曾出过这样一道有趣的数学题:有一个长阶梯,若每步上2阶,最后剩1阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩4阶;若每步上6阶,最后剩5阶;只有每步上7阶,最后刚好一阶也不剩。
(小甲鱼温馨提示:步子太大真的容易扯着蛋~~~


题目:请编程求解该阶梯至少有多少阶?


3. 请写下这一节课你学习到的内容:格式不限,回忆并复述是加强记忆的好方式!


回复您的答案即可查看参考答案!


测试题答案:

0. Python floor 除法现在使用 // 实现,那 3.0 // 2.0 您目测会显示什么内容呢?

如果回答是 1.5 那么很遗憾,您受到 C 语言的影响比较大,Python 这里会义无反顾地执行 floor 除法原则,答案是:1.0


1. a < b < c 事实上是等于?

(a < b) and (b < c)


2. 不使用 IDLE,你可以轻松说出 5 ** -2 的值吗?

0.04,也就是 1/25

幂运算操作符比其左侧的一元操作符优先级高,比其右侧的一元操作符优先级低。


3. 如何简单判断一个数是奇数还是偶数?

使用求余可以简单得到答案:能被 2 整除为偶数,所以 x % 2 == 0,否则为奇数。


4. 请用最快速度说出答案:not 1 or 0 and 1 or 3 and 4 or 5 and 6 or 7 and 8 and 9

如果你的回答是 0,那么小甲鱼很开心你中招了!
答案是:4

not or and 的优先级是不同的:not > and > or

我们按照优先级给它们加上括号:(not 1) or (0 and 1) or (3 and 4) or (5 and 6) or (7 and 8 and 9)
== 0 or 0 or 4 or 6 or 9
== 4

为啥是 4

大家还记得第四讲作业提到的短路逻辑吗?3 and 4 == 4,而 3 or 4 == 3
所以答案是:4

温馨提示:为了更好的表达你的程序,小甲鱼再次呼吁有些括号还是不能省下的,毕竟不是所有程序员都跟你一样都将优先级烂透于心的。


5. 还记得我们上节课那个求闰年的作业吗?如果还没有学到求余操作,还记得用什么方法可以委曲求全代替“%”的功能呢?

因为上节课我们还没有教大家求余的操作,所以小甲鱼使用了“if year/400 == int(year/400)”这样的方式来委曲求全





动动手答案:

0. 请写一个程序打印出 0~100 所有的奇数。

1. i = 0

2. while i <= 100:

3.     if i % 2 != 0:

4.         print(i, end=' ')

5.         i += 1

6.     else:

7.         i += 1

复制代码



1. 我们说过现在的 Python 可以计算很大很大的数据,但是......真正的大数据计算可是要靠刚刚的硬件滴,不妨写一个小代码,让你的计算机为之崩溃?

print(2 ** 2 ** 32)
# 一般很多机子都会在一会儿之后:Memory Overflow,内存不够用。
# 设计到幂操作,结果都是惊人滴。


2. 题目:请编程求解该阶梯至少有多少阶?

1. x = 7

2. i = 1

3. flag = 0

4.

5. while i <= 100:

6.     if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):

7.         flag = 1

8.     else:

9.         x = 7 * (i+1) # 根据题意,x一定是7的整数倍,所以每次乘以7

10.     i += 1

11.

12. if flag == 1:

13.     print('阶梯数是:', x)

14. else:

15.     print('在程序限定的范围内找不到答案!')

复制代码

第八课

0. if not (money < 100): 上边这行代码相当于?
  
1. assert 的作用是什么?
  
2. 假设有 x = 1y = 2z = 3,请问如何快速将三个变量的值互相交换?
  
3. 猜猜 (x < y and [x] or [y])[0] 实现什么样的功能?
  
4. 你听说过成员资格运算符吗?
  
  
动动手:
  
0. 视频中小甲鱼使用 if elif else 在大多数情况下效率要比全部使用 if 要高,但根据一般的统计规律,一个班的成绩一般服从正态分布,也就是说平均成绩一般集中在 70~80 分之间,因此根据统计规律,我们还可以改进下程序以提高效率。
  

题目备忘:按照100分制,90分以上成绩为A8090B6080C60以下为D,写一个程序,当用户输入分数,自动转换为ABCD的形式打印。



1. Python 的作者在很长一段时间不肯加入三元操作符就是怕跟C语言一样搞出国际乱码大赛,蛋疼的复杂度让初学者望而生畏,不过,如果你一旦搞清楚了三元操作符的使用技巧,或许一些比较复杂的问题反而迎刃而解。
请将以下代码修改为三元操作符实现:

1. x, y, z = 6, 5, 4

2. if x < y:

3.     small = x

4.     if z < small:

5.         small = z

6. elif y < z:

7.     small = y

8. else:

9.     small = z

复制代码



2. 请写下这一节课你学习到的内容:格式不限,回忆并复述是加强记忆的好方式!
  
  
回复您的答案即可查看参考答案!
  
  
测试题答案:
  

0. if not (money < 100): 这行代码相当于?
  
if money >= 100:
  
  
1. assert 的作用是什么?
  
assert这个关键字我们称之为断言,当这个关键字后边的条件为假的时候,程序自动崩溃并抛出AssertionError的异常。
什么情况下我们会需要这样的代码呢?当我们在测试程序的时候就很好用,因为与其让错误的条件导致程序今后莫名其妙地崩溃,不如在错误条件出现的那一瞬间我们实现自爆
一般来说我们可以用Ta再程序中置入检查点,当需要确保程序中的某个条件一定为真才能让程序正常工作的话,assert关键字就非常有用了。
  
  
2. 假设有 x = 1y = 2z = 3,请问如何快速将三个变量的值互相交换?
  
x, y, z = z, y, x
  
  
3. 猜猜 (x < y and [x] or [y])[0] 实现什么样的功能?
  
这其实是 Python 的作者还没有为 Python 加入三元操作符之前,Python 社区的小伙伴们灵活的使用 and or  搭配来实现三元操作符的功能,这里边有涉及到列表和切片的知识,这部分知识很快就会讲解,迫不及待的朋友可以先稍微预习下。
  
  
4. 你听说过成员资格运算符吗?
  
Python 有一个成员资格运算符:in,用于检查一个值是否在序列中,如果在序列中返回 True,否则返回 False
  
例如:

1. >>> name = '小甲鱼'

2. >>> '' in name

3. True

4. >>> '肥鱼' in name

5. False

复制代码

当下节课我们讲解 for 语句的时候,你看到 in 会不会就有了更深入的理解?!



  
  
动动手答案:

0. 视频中小甲鱼使用 if elif else 在大多数情况下效率要比全部使用 if 要高,但根据一般的统计规律,一个班的成绩一般服从正态分布,也就是说平均成绩一般集中在 70~80 分之间,因此根据统计规律,我们还可以改进下程序以提高效率。

1. score = int(input('请输入一个分数:'))

2. if 80 > score >= 60:

3.     print('C')

4. elif 90 > score >= 80:

5.     print('B')

6. elif 60 > score >= 0:

7.     print('D')

8. elif 100 >= score >= 90:

9.     print('A')

10. else:

11.     print('输入错误!')

复制代码



1. Python 的作者在很长一段时间不肯加入三元操作符就是怕跟C语言一样搞出国际乱码大赛,蛋疼的复杂度让初学者望而生畏,不过,如果你一旦搞清楚了三元操作符的使用技巧,或许一些比较复杂的问题反而迎刃而解。

1. small = x if (x < y and x < z) else (y if y < z else z)

复制代码

第九课

0. 下面的循环会打印多少次"I Love FishC"

1. for i in range(0, 10, 2):

2.     print('I Love FishC')

复制代码


1. 下面的循环会打印多少次"I Love FishC"

1. for i in 5:

2.     print('I Love FishC')

复制代码


2. 回顾一下 break continue 在循环中起到的作用?
    
3. 请谈下你对列表的理解?
   
4. 请问 range(10) 生成哪些数?
     
5. 目测以下程序会打印什么?

1. while True:

2.     while True:

3.         break

4.         print(1)

5.     print(2)

6.     break

7. print(3)

复制代码


6. 什么情况下我们要使循环永远为真?
    
7. 【学会提高代码的效率】你的觉得以下代码效率方面怎样?有没有办法可以大幅度改进(仍然使用while)

1. i = 0

2. string = 'ILoveFishC.com'

3. while i < len(string)):

4.     print(i)

5.     i += 1

复制代码



动动手:
  
细节决定成败,看答案前记得自己先敲代码!
  
0. 设计一个验证用户密码程序,用户只有三次机会输入错误,不过如果用户输入的内容中包含"*"则不计算在内。
  
程序演示如图:

 

  
1. 编写一个程序,求 100~999 之间的所有水仙花数。

如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数。


2. 三色球问题

有红、黄、蓝三种颜色的求,其中红球 3 个,黄球 3 个,绿球 6 个。先将这 12 个球混合放在一个盒子中,从中任意摸出 8 个球,编程计算摸出球的各种颜色搭配。


3. 请写下这一节课你学习到的内容:格式不限,回忆并复述是加强记忆的好方式!
  
  
回复您的答案即可查看参考答案!
  
  
测试题答案:
  

0. 下面的循环会打印多少次"I Love FishC"

1. for i in range(0, 10, 2):

2.     print('I Love FishC')

复制代码

5 次,因为从 0 开始,到 10 结束,步进为 2
  
  
1. 下面的循环会打印多少次"I Love FishC"

1. for i in 5:

2.     print('I Love FishC')

复制代码

会报错,上节课的课后习题我们提到了 in 成员资格运算符,而不是像 C 语言那样去使用 for 语法。Python for 更像脚本语言的 foreach
  
  
2. 回顾一下 break continue 在循环中起到的作用
     
break语句的作用是终止当前循环,跳出循环体。
continue语句的作用是终止本轮循环并开始下一轮循环(这里要注意的是:在开始下一轮循环之前,会先测试循环条件)。
  
  
3. 请谈下你对列表的理解
       
嗯,有些知识点需要自己总结才能加固,下节课小甲鱼将跟大家畅谈一个打了激素的数组:列表,不容错过哦^_^
  
  
4. 请问 range(10) 生成哪些数?
        
会生成 range(0, 10)list(range(0, 10)) 转换成列表是:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],注意不包含 10 哦。


5. 目测以下程序会打印什么?

1. while True:

2.     while True:

3.         break

4.         print(1)

5.     print(2)

6.     break

7. print(3)

复制代码

会打印:
2
3

因为 break 只能跳出一层循环,记住咯!
        
    
6. 什么情况下我们要使循环永远为真?
     
while Ture:
    循环体
    
同样用于游戏实现,因为游戏只要运行着,就需要时刻接收用户输入,因此使用永远为真确保游戏在线。操作系统也是同样的道理,时刻待命,操作系统永远为真的这个循环叫做消息循环。另外,许多通讯服务器的客户端/服务器系统也是通过这样的原理来工作的。
     
所以永远为虽然是死循环,但不一定是坏事,再说了,我们可以随时用 break 来跳出循环!
   
   
7. 【学会提高代码的效率】你的觉得以下代码效率方面怎样?有没有办法可以大幅度改进(仍然使用while)

1. i = 0

2. string = 'ILoveFishC.com'

3. while i < len(string)):

4.     print(i)

5.     i += 1

复制代码


这段代码之所以效率比较低是因为每次循环都需要调用一次 len() 函数(我们还没有学到函数的概念,小甲鱼这里为零基础的朋友形象的解释下:就像你打游戏打得正HIGH的时候,老妈让你去买盐......你有两种选择,一次买一包,一天去买五次,或者一次性买五包回来,老妈要就直接给她。)

1. i = 0

2. string = 'ILoveFishC.com'

3. length = len(string)

4. while i < length:

5.     print(i)

6.     i += 1  

复制代码


小甲鱼希望学习咱的课程的朋友不是只为了可以把程序写出来,而是追求把代码写好,写漂亮,做一个有理想、有追求的程序猿!



  
  
动动手答案:
  

0. 设计一个验证用户密码程序,用户只有三次机会输入错误,不过如果用户输入的内容中包含"*"则不计算在内。

1. count = 3

2. password = 'FishC.com'

3.

4. while count:

5.     passwd = input('请输入密码:')

6.     if passwd == password:

7.         print('密码正确,进入程序......')

8.         break

9.     elif '*' in passwd:

10.         print('密码中不能含有"*"号!您还有', count, '次机会!', end=' ')

11.         continue

12.     else:

13.         print('密码输入错误!您还有', count-1, '次机会!', end=' ')    

14.     count -= 1

复制代码



1. 编写一个程序,求 100~999 之间的所有水仙花数。

如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数

1. for i in range(100, 1000):

2.     sum = 0

3.     temp = i

4.     while temp:

5.         sum = sum + (temp%10) ** 3

6.         temp //= 10         # 注意这里要使用地板除哦~

7.     if sum == i:

8.         print(i)

复制代码



2. 三色球问题

有红、黄、蓝三种颜色的求,其中红球 3 个,黄球 3 个,绿球 6 个。先将这 12 个球混合放在一个盒子中,从中任意摸出 8 个球,编程计算摸出球的各种颜色搭配。

1. print('red\tyellow\tblue')

2. for red in range(0, 4):

3.     for yellow in range(0, 4):

4.         for green in range(2, 7):

5.             if red + yellow + green == 8:

6.                 # 注意,下边不是字符串拼接,因此不用“+”~

7.                 print(red, '\t', yellow, '\t', green)

复制代码

注释:range(2, 7)是产生[2, 3, 4, 5, 6]5个数,绿球不能是1个,因为如果绿球是1个的话,红球 + 黄球需要有7个才能符合题意,而红球和黄球每种只有3个,因此是range(2, 7)

第十课

测试题:
   
0. 列表都可以存放一些什么东西?
  
1. 向列表增加元素有哪些方法?
  
2. append() 方法和 extend() 方法都是向列表的末尾增加元素,请问他们有什么区别?
  
3. member.append(['竹林小溪', 'Crazy迷恋']) member.extend(['竹林小溪', 'Crazy迷恋']) 实现的效果一样吗?
  
4. 有列表 name = ['F', 'i', 'h', 'C'],如果小甲鱼想要在元素 'i' 'h' 之间插入元素 's',应该使用什么方法来插入?
  
  
动动手:
  
0. 自己动手试试看,并分析在这种情况下,向列表添加数据应当采用哪种方法比较好?

假设给定以下列表:

member = ['小甲鱼', '黑夜', '迷途', '怡静', '秋舞斜阳']

要求将列表修改为:

member = ['小甲鱼', 88, '黑夜', 90, '迷途', 85, '怡静', 90, '秋舞斜阳', 88]

方法一:使用 insert() append() 方法修改列表。

方法二:重新创建一个同名字的列表覆盖。
    
   
1. 利用 for 循环打印上边 member 列表中的每个内容,如图:

 
  
  
2. 上一题打印的样式不是很好,能不能修改一下代码打印成下图的样式呢?【请至少使用两种方法实现】

 
  
  
3. 请写下这一节课你学习到的内容:格式不限,回忆并复述是加强记忆的好方式!
  
  
回复您的答案即可查看参考答案!
  
  
测试题答案:
  

0. 列表都可以存放一些什么东西?
  
我们说 Python 的列表是一个打了激素的数组,如果把数组比喻成集装箱,那么 Python 的列表就是一个大仓库,Ta 可以存放我们已经学习过的任何数据类型。

>>> mix = [1, ‘小甲鱼’, 3.14, [1, 2, 3]]
  
  
1. 向列表增加元素有哪些方法?
  
这节课我们教过大家三种方法想列表增加元素,分别是:append()extend() insert()
  
  
2. append() 方法和 extend() 方法都是向列表的末尾增加元素,请问他们有什么区别?
  
append() 方法是将参数作为一个元素增加到列表的末尾。
extend() 方法则是将参数作为一个列表去扩展列表的末尾。
  
请看以下示例:

1. >>> name = ['F', 'i', 's', 'h']

2. >>> name.append('C')

3. >>> name

4. ['F', 'i', 's', 'h', 'C']

5. >>> name.extend(['.', 'c'])

6. >>> name

7. ['F', 'i', 's', 'h', 'C', '.', 'c']

8. >>> name.append(['o', 'm'])

9. >>> name

10. ['F', 'i', 's', 'h', 'C', '.', 'c', ['o', 'm']]

复制代码



3. member.append(['竹林小溪', 'Crazy迷恋']) member.extend(['竹林小溪', 'Crazy迷恋']) 实现的效果一样吗?
  
不一样,因为怕大家没有仔细看上一题的示例,所以不懂的请看上一题解释。
  
  
4. 有列表 name = ['F', 'i', 'h', 'C'],如果小甲鱼想要在元素 'i' 'h' 之间插入元素 's',应该使用什么方法来插入?
  
name.insert(2, 's')



  
  
动动手答案:
  

0. 自己动手试试看,并分析在这种情况下,向列表添加数据应当采用哪种方法比较好?

假设给定以下列表:

member = ['小甲鱼', '黑夜', '迷途', '怡静', '秋舞斜阳']

要求将列表修改为:

member = ['小甲鱼', 88, '黑夜', 90, '迷途', 85, '怡静', 90, '秋舞斜阳', 88]

方法一:使用 insert() append() 方法修改列表。

方法二:重新创建一个同名字的列表覆盖。


解答:

方法一:

1. member.insert(1, 88)

2. member.insert(3, 90)

3. member.insert(5, 85)

4. member.insert(7, 90)

5. member.append(88)

复制代码

方法二:

1. member = ['小甲鱼', 88, '黑夜', 90, '迷途', 85, '怡静', 90, '秋舞斜阳', 88]

复制代码

对于这种情况,明显是第二种方法看起来要好一些嘛。

不过对于大型的列表,第一种方法可能更合适,所以我们说永远没有最好的,只有最合适的。
  
  
  
1. 利用 for 循环打印上边 member 列表中的每个内容

1. member = ['小甲鱼', 88, '黑夜', 90, '迷途', 85, '怡静', 90, '秋舞斜阳', 88]

2. for each in member:

3.     print(each)

复制代码



2. 上一题打印的样式不是很好,能不能修改一下代码打印成下图的样式呢?【请至少使用两种方法实现】

1. 方法一:

2. count = 0

3. length = len(member)

4. while count < length:

5.     print(member[count], member[count+1])

6.     count += 2

7.

8. 方法二:    

9.     

10. for each in range(len(member)):

11.     if each%2 == 0:

12.         print(member[each], member[each+1])

复制代码

0. 注意,这道题跟上节课的那道题有点儿不同,回答完请上机实验或参考答案。

1. >>> old = [1, 2, 3, 4, 5]

2. >>> new = old

3. >>> old = [6]

4. >>> print(new)

复制代码

如果不上机操作,你觉得会打印什么内容?

第十二课


1. 请问如何将下边这个列表的'小甲鱼'修改为'小鱿鱼'

1. list1 = [1, [1, 2, ['小甲鱼']], 3, 5, 8, 13, 18]

复制代码


  
2. 要对一个列表进行顺序排序,请问使用什么方法?
  
  
3. 要对一个列表进行逆序排序,请问使用什么方法?
  
  
4. 列表还有两个内置方法没给大家介绍,不过聪明的你应该可以自己摸索使用的门道吧:copy() clear()
  
  
5. 你有听说过列表推导式或列表解析吗?
  
没听过?!没关系,我们现场来学习一下吧,看表达式:

1. >>> [ i*i for i in range(10) ]

复制代码

你觉得会打印什么内容?

1. >>> [i*i for i in range(10)]

2. [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

复制代码

居然分别打印了09各个数的平方,然后还放在列表里边了有木有?!
  
列表推导式(List comprehensions)也叫列表解析,灵感取自函数式编程语言 HaskellTa 是一个非常有用和灵活的工具,可以用来动态的创建列表,语法如:
  
[有关A的表达式 for A in B]
  
例如

1. >>> list1 = [x**2 for x in range(10)]

2. >>> list1

3. [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

复制代码

相当于

1. list1 = []

2. for x in range(10):

3.     list1.append(x**2)

复制代码


问题:请先在 IDLE 中获得下边列表的结果,并按照上方例子把列表推导式还原出来。

1. >>> list1 = [(x, y) for x in range(10) for y in range(10) if x%2==0 if y%2!=0]

复制代码



6. 活学活用:请使用列表推导式补充被小甲鱼不小心涂掉的部分
  
  
 
  
  
7. 请写下这一节课你学习到的内容:格式不限,回忆并复述是加强记忆的好方式!
   
   
回复您的答案即可查看参考答案!
  
  
测试题答案:

0. 注意,这道题跟上节课的那道题有点儿不同,回答完请上机实验或参考答案。

1. >>> old = [1, 2, 3, 4, 5]

2. >>> new = old

3. >>> old = [6]

4. >>> print(new)

复制代码


会打印:[1, 2, 3, 4, 5]
  
如有不理解的朋友请看上一讲课后作业的详细答案。
  
  
1. 请问如何将下边这个列表的'小甲鱼'修改为'小鱿鱼'

1. list1 = [1, [1, 2, ['小甲鱼']], 3, 5, 8, 13, 18]

2. list1[1][2][0] = '小鱿鱼'

复制代码



2. 要对一个列表进行顺序排序,请问使用什么方法?

1. >>> 列表名.sort()

复制代码



3. 要对一个列表进行逆序排序,请问使用什么方法?

1. >>> 列表名.sort()

2. >>> 列表名.reverse()

复制代码

或者

1. >>> 列表名.sort(reverse=True)

复制代码



4. 列表还有两个内置方法没给大家介绍,不过聪明的你应该可以自己摸索使用的门道吧:copy() clear()
  
copy() 方法跟使用切片拷贝是一样的:

1. >>> list2 = list1.copy()

2. >>> list2

3. [1, [1, 2, ['小甲鱼']], 3, 5, 8, 13, 18]

复制代码


clear() 方法用于清空列表的元素,但要注意,清空完后列表仍然还在哦,只是变成一个空列表。

1. >>> list2.clear()

2. >>> list2

3. []

复制代码



5. 问题:请先在 IDLE 中获得下边列表的结果,并按照上方例子把列表推导式还原出来。

1. >>> list1 = [(x, y) for x in range(10) for y in range(10) if x%2==0 if y%2!=0]

复制代码

1. list1 = []

2. for x in ragne(10):

3.     for y in range(10):

4.         if x%2 == 0:

5.             if y%2 != 0:

6.                 list1.append((x, y))

复制代码



6. 活学活用:请使用列表推导式补充被小甲鱼不小心涂掉的部分
    

1. >>> list3 = [name + '' + slogan[2:] for slogan in list1 for name in list2 if slogan[0] == name[0]]

复制代码

第十三课

测试题:
   
0. 请用一句话描述什么是列表?再用一句话描述什么是元组?
    
1. 什么情况下你需要使用元组而不是列表?
  
2. 当元组和列表掉下水,你会救谁?
  
3. 请将下图左边列表的内置方法与右边的注释连线,并圈出元组可以使用的方法。
  
 
  
4. 创建一个元组,什么情况下逗号和小括号必须同时存在,缺一不可?
  
5. x, y, z = 1, 2, 3 请问x, y, z是元组吗?
  
6. 请写出以下情景中应该使用列表还是元组来保存数据:
  

1) 游戏中角色的属性:

2) 你的身份证信息:

3) 论坛的会员:

4) 团队合作开发程序,传递给一个你并不了解具体实现的函数的参数:

5) 航天火箭各个组件的具体配置参数:
  
6) NASA系统中记录已经发现的行星数据:


7. 上节课我们通过课后作业的形式学习到了列表推导式,那请问如果我把中括号改为小括号,会不会得到元组推导式呢?
  
8. 请写下这一节课你学习到的内容:格式不限,回忆并复述是加强记忆的好方式!
   
   
回复您的答案即可查看参考答案!
  
  
测试题答案:
  

0. 请用一句话描述什么是列表?再用一句话描述什么是元组?
  
列表:一个大仓库,你可以随时往里边添加和删除任何东西。
  
元组:封闭的列表,一旦定义,就不可改变(不能添加、删除或修改)。
  
  
1. 什么情况下你需要使用元组而不是列表?
  
当我们希望内容不被轻易改写的时候,我们使用元组(把权力关进牢笼)。
  
当我们需要频繁修改数据,我们使用列表。
  
  
2. 当元组和列表掉下水,你会救谁?
  
如果是我,我会救列表,因为列表提供了比元组更丰富的内置方法,这相当大的提高了编程的灵活性。
  
回头来看下元组,元组固然安全,但元组一定创建就无法修改(除非通过新建一个元组来间接修改,但这就带来了消耗),而我们人是经常摇摆不定的,所以元组只有在特殊的情况才用到,平时还是列表用的多。
  
综上所述,小甲鱼会救列表(列表是美眉)。
  
  
3. 请将左边列表的内置方法与右边的注释连线,并圈出元组可以使用的方法。
  
 
  
看吧,元组果然比较悲剧吧,仅有两个方法元组可以使用,其他方法都不行,不信你试试?
  
  
4. 创建一个元组,什么情况下逗号和小括号必须同时存在,缺一不可?
  
在拼接只有一个元素的元组的时候,例如我们课上举的例题:

1. >>> temp = (‘小甲鱼’, ‘黑夜’, ‘迷途’, ‘小布丁’)

2. # 如果我想在黑夜迷途之间插入怡静,我们应该:

3. >>> temp = temp[:2] + (‘怡静’,) + temp[2:]

复制代码



5. x, y, z = 1, 2, 3 请问x, y, z是元组吗?
  
所有的多对象的、逗号分隔的、没有明确用符号定义的这些集合默认的类型都是元组,自己在IDLE中键入以下代码,并体会一下:

1. >>> x, y, z = 1, 2, 3

2.

3. >>> type(x)

4.

5. >>> h = x, y, z

6.

7. >>> type(h)

复制代码



6. 请写出以下情景中应该使用列表还是元组来保存数据:
  

1) 游戏中角色的属性:列表
  
2) 你的身份证信息:元组
  
3) 论坛的会员:列表
  
4) 团队合作开发程序,传递给一个你并不了解具体实现的函数的参数:元组
  
5) 航天火箭各个组件的具体配置参数:元组
  
6) NASA系统中记录已经发现的行星数据:列表



7. 上节课我们通过课后作业的形式学习到了列表推导式,那请问如果我把中括号改为小括号,会不会得到元组推导式呢?自己动手试试看再看答案哦^_^
  
Python3 木有元组推导式,为嘛?没必要丫,有了列表推导式已经足够了。
  
那为什么“>>> tuple1 = (x**2 for x in range(10))”不会报错?
  
因为你误打误撞得到了一个生成器:

1. >>> type(tuple1)

2.

复制代码

关于生成器的概念小甲鱼今后会细讲,你可以尝试这么去访问我们刚刚的生成器:
  
# 注意,Python3 开始 next() 方法改为 __next__() ~

1. >>> tuple1.__next__()

2. 0

3. >>> tuple1.__next__()

4. 1

5. >>> tuple1.__next__()

6. 4

7. >>> tuple1.__next__()

8. 9

9. >>> tuple1.__next__()

10. 16

11. >>> tuple1.__next__()

12. 25

13. >>> tuple1.__next__()

14. 36

复制代码

第十四课

测试题:
   
0. 还记得如何定义一个跨越多行的字符串吗(请至少写出两种实现的方法)?
    
1. 三引号字符串通常我们用于做什么使用?
  
2. file1 = open('C:\windows\temp\readme.txt', 'r') 表示以只读方式打开“C:\windows\temp\readme.txt”这个文本文件,但事实上这个语句会报错,知道为什么吗?你会如何修改?
  
3. 有字符串:str1 = 'C资源打包',请问如何提取出子字符串:'www.fishc.com'
   
4. 如果使用负数作为索引值进行分片操作,按照第三题的要求你能够正确目测出结果吗?
  
5. 还是第三题那个字符串,请问下边语句会显示什么内容?

1. >>> str1[20:-36]

复制代码


6. 据说只有智商高于150的鱼油才能解开这个字符串(还原为有意义的字符串):str1 = 'i2sl54ovvvb4e3bferi32s56h;$c43.sfc67o0cm99'
   
  
动动手:
  
0. 请写一个密码安全性检查的脚本代码:check.py
  

# 密码安全性检查代码
#
# 低级密码要求:
#   1. 密码由单纯的数字或字母组成
#   2. 密码长度小于等于8
#
# 中级密码要求:
#   1. 密码必须由数字、字母或特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)任意两种组合
#   2. 密码长度不能低于8
#
# 高级密码要求:
#   1. 密码必须由数字、字母及特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)三种组合
#   2. 密码只能由字母开头
#   3. 密码长度不能低于16


程序演示:
  
 
    
  
1. 请写下这一节课你学习到的内容:格式不限,回忆并复述是加强记忆的好方式!
   
   
回复您的答案即可查看参考答案!
  
  
测试题答案:
  

0. 还记得如何定义一个跨越多行的字符串吗(请至少写出两种实现的方法)?
  
方法一:
   
>>> str1 = '''待我长发及腰,将军归来可好?
此身君子意逍遥,怎料山河萧萧。
天光乍破遇,暮雪白头老。
寒剑默听奔雷,长枪独守空壕。
醉卧沙场君莫笑,一夜吹彻画角。
江南晚来客,红绳结发梢。'''
   
方法二:
   
>>> str2 = '待卿长发及腰,我必凯旋回朝。\
昔日纵马任逍遥,俱是少年英豪。\
东都霞色好,西湖烟波渺。\
执枪血战八方,誓守山河多娇。\
应有得胜归来日,与卿共度良宵。\
盼携手终老,愿与子同袍。'
   
方法三:
   
>>> str3 = ('待卿长发及腰,我必凯旋回朝。'
'昔日纵马任逍遥,俱是少年英豪。'
'东都霞色好,西湖烟波渺。'
'执枪血战八方,誓守山河多娇。'
'应有得胜归来日,与卿共度良宵。'
'盼携手终老,愿与子同袍。')
    
    
1. 三引号字符串通常我们用于做什么使用?
   
三引号字符串不赋值的情况下,通常当作跨行注释使用,例如:

1. '''这是一个三引号字符串用于注释的例子,

2. 例子虽然只是简简单单的一句话,

3. 却毫无遮掩地体现了作者用情至深,

4. 所谓爱至深处情至简!'''

5.

6. print("I love FishC.com!")

复制代码



2. file1 = open('C:\windows\temp\readme.txt', 'r') 表示以只读方式打开“C:\windows\temp\readme.txt”这个文本文件,但事实上这个语句会报错,知道为什么吗?你会如何修改?
  
会报错是因为在字符串中,我们约定“\t”和“\r”分别表示横向制表符(TAB回车符(详见:http://bbs.fishc.com/thread-39140-1-1.html),因此并不会按照我们计划的路径去打开文件。
   
Python 为我们铺好了解决的道路,只需要使用原始字符串操作符(Rr)即可:

1. >>> file1 = open(r'C:\windows\temp\readme.txt', 'r')

复制代码



3. 有字符串:str1 = 'C资源打包',请问如何提取出子字符串:'www.fishc.com'

1. >>> str1[16:29]

复制代码



4. 如果使用负数作为索引值进行分片操作,按照第三题的要求你能够正确目测出结果吗?

1. >>> str1[-45:-32]

复制代码



5. 还是第三题那个字符串,请问下边语句会显示什么内容?

1. >>> str1[20:-36]

复制代码

'fishc',加入了负数索引,问题变得有些复杂,不过自己多尝试几次就可以熟练掌握了。
      
    
6. 据说只有智商高于150的鱼油才能解开这个字符串(还原为有意义的字符串):str1 = 'i2sl54ovvvb4e3bferi32s56h;$c43.sfc67o0cm99'

1. >>> str1[::3]

复制代码



  
动动手答案:
    

0. 请写一个密码安全性检查的脚本代码:check.py

1. # 密码安全性检查代码

2. #

3. # 低级密码要求:

4. #   1. 密码由单纯的数字或字母组成

5. #   2. 密码长度小于等于8

6. #

7. # 中级密码要求:

8. #   1. 密码必须由数字、字母或特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)任意两种组合

9. #   2. 密码长度不能低于8

10. #

11. # 高级密码要求:

12. #   1. 密码必须由数字、字母及特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)三种组合

13. #   2. 密码只能由字母开头

14. #   3. 密码长度不能低于16

15.

16. symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''

17. chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

18. nums = '0123456789'

19.

20. passwd = input('请输入需要检查的密码组合:')

21.

22. # 判断长度

23. length = len(passwd)

24.

25. while (passwd.isspace() or length == 0) :

26.     passwd = input("您输入的密码为空(或空格),请重新输入:")

27.

28. if length <= 8:

29.     flag_len = 1

30. elif 8 < length < 16:

31.     flag_len = 2

32. else:

33.     flag_len = 3

34.

35. flag_con = 0

36.

37. # 判断是否包含特殊字符

38. for each in passwd:

39.     if each in symbols:

40.         flag_con += 1

41.         break

42.     

43. # 判断是否包含字母

44. for each in passwd:

45.     if each in chars:

46.         flag_con += 1

47.         break

48.

49. # 判断是否包含数字

50. for each in passwd:

51.     if each in nums:

52.         flag_con += 1

53.         break    

54.

55. # 打印结果

56. while 1 :

57.     print("您的密码安全级别评定为:", end='')

58.     if flag_len == 1 or flag_con == 1 :

59.         print("")

60.     elif flag_len == 2 or flag_con == 2 :

61.         print("")

62.     else :

63.         print("")

64.         print("请继续保持")

65.         break

66.

67.     print("请按以下方式提升您的密码安全级别:\n\

68.     \t1. 密码必须由数字、字母及特殊字符三种组合\n\

69.     \t2. 密码只能由字母开头\n\

70.     \t3. 密码长度不能低于16'")

71.     break

复制代码


0. 根据说明填写相应的字符串格式化符号

  


1. 请问以下这行代码会打印什么内容?

1. >>> "{{1}}".format("不打印", "打印")

复制代码



2. 以下代码中,a, b, c是什么参数?

1. >>> "{a} love {b}.{c}".format(a="I", b="FishC", c="com")

2. 'I love FishC.com'

复制代码



3. 以下代码中,{0}, {1}, {2}是什么参数?

1. >>> "{0} love {1}.{2}".format("I", "FishC", "com")

2. 'I love FishC.com'

复制代码



4. 如果想要显示Pi = 3.14format前边的字符串应该怎么填写呢?

1. ''.format('Pi = ', 3.1415)

复制代码



动动手:

0. 编写一个进制转换程序,程序演示如下(提示,十进制转换二进制可以用bin()这个BIF):

 
    
    
1. 请写下这一节课你学习到的内容:格式不限,回忆并复述是加强记忆的好方式!

第十五课

     
测试题答案:
     

0. 根据说明填写相应的字符串格式化符号

  
   
    
1. 请问以下这行代码会打印什么内容?

1. >>> "{{1}}".format("不打印", "打印")

2. '{1}'

复制代码



2. 以下代码中,a, b, c是什么参数?

1. >>> "{a} love {b}.{c}".format(a="I", b="FishC", c="com")

2. 'I love FishC.com'

复制代码

关键字参数
   
    
3. 以下代码中,{0}, {1}, {2}是什么参数?

1. >>> "{0} love {1}.{2}".format("I", "FishC", "com")

2. 'I love FishC.com'

复制代码

位置参数
    
   
4. 如果想要显示Pi = 3.14format前边的字符串应该怎么填写呢?

1. >>> '{0}{1:.2f}'.format('Pi = ', 3.1415)

2. 'Pi = 3.14'

复制代码




动动手答案:

0. 编写一个进制转换程序

1. q = True

2. while q:

3.     num = input('请输入一个整数(输入Q结束程序)')

4.     if num != 'Q':

5.         num = int(num)

6.         print('十进制 -> 十六进制 : %d -> 0x%x' % (num, num))

7.         print('十进制 -> 八进制 : %d -> 0o%o' % (num, num))

8.         print('十进制 -> 二进制 : %d -> ' % num, bin(num))

9.     else:

10.         q = False

复制代码

第十六课

《零基础入门学习Python》视频下载地址:传送门
    
测试题:
   
0. 我们根据列表、元祖和字符串的共同特点,把它们三统称为什么?
  
1. 请问分别使用什么BIF,可以把一个可迭代对象转换为列表、元祖和字符串?
   
2. 你还能复述出迭代的概念吗?
  
3. 你认为调用 max('I love FishC.com') 会返回什么值?为什么?
   
4. 哎呀呀,现在的小屁孩太调皮了,邻居家的孩子淘气,把小甲鱼刚写好的代码画了个图案,麻烦各位鱼油恢复下啊,另外这家伙画的是神马吗?怎么那么眼熟啊!??
    
 
     
     
动动手:
   
0. 猜想一下 min() 这个BIF的实现过程
   
    
1. 视频中我们说 sum() 这个BIF有个缺陷,就是如果参数里有字符串类型的话就会报错,请写出一个新的实现过程,自动无视参数里的字符串并返回正确的计算结果
    
    
2. 请写下这一节课你学习到的内容:格式不限,回忆并复述是加强记忆的好方式!
     

回复您的答案即可查看参考答案!

     
测试题答案:
     

0. 我们根据列表、元祖和字符串的共同特点,把它们三统称为什么?
   
序列,因为他们有以下共同点:
    
1)都可以通过索引得到每一个元素
2)默认索引值总是从0开始(当然灵活的Python还支持负数索引)
3)可以通过分片的方法得到一个范围内的元素的集合
4)有很多共同的操作符(重复操作符、拼接操作符、成员关系操作符)
   
    
1. 请问分别使用什么BIF,可以把一个可迭代对象转换为列表、元祖和字符串?
     
list([iterable]) 把可迭代对象转换为列表
  
tuple([iterable]) 把可迭代对象转换为元祖
  
str(obj)  把对象转换为字符串
  
例如:

1. >>> temp = 'I love FishC.com!'

2. >>> list(temp)

3. ['I', ' ', 'l', 'o', 'v', 'e', ' ', 'F', 'i', 's', 'h', 'C', '.', 'c', 'o', 'm', '!']

复制代码



2. 你还能复述出迭代的概念吗?

所谓迭代,是重复反馈过程的活动,其目的通常是为了接近并到达所需的目标或结果。每一次对过程的重复被称为一次迭代,而每一次迭代得到的结果会被用来作为下一次迭代的初始值。
   
    
3. 你认为调用 max('I love FishC.com') 会返回什么值?为什么?
    
会返回:'v',因为字符串在计算机中是以ASCII码的形式存储(ASCII对照表:http://bbs.fishc.com/thread-41199-1-1.html),参数中ASCII码值最大的是'v'对应的118
   
    
4. 哎呀呀,现在的小屁孩太调皮了,邻居家的孩子淘气,把小甲鱼刚写好的代码画了个图案,麻烦各位鱼油恢复下啊,另外这家伙画的是神马吗?怎么那么眼熟啊!??

1. name = input('请输入待查找的用户名:')

2. score = [['迷途', 85], ['黑夜', 80], ['小布丁', 65], ['福禄娃娃', 95], ['怡静', 90]]

3. IsFind = False

4.

5. for each in score:

6.     if name in each:

7.         print(name + '的得分是:', each[1])

8.         IsFind = True

9.         break

10.     

11. if IsFind == False:

12.     print('查找的数据不存在!')

复制代码



   
    
动动手答案:
   

0. 猜想一下 min() 这个BIF的实现过程

1. def min(x):

2.     least = x[0]

3.

4.     for each in x:

5.         if each < least:

6.             least = each

7.

8.     return least

9.

10. print(min('123456789'))

复制代码

注:关于函数的定义和使用在下一讲的课程中讲解,目前只需要理解该BIF实现的原理即可。
   
    
1. 视频中我们说 sum() 这个BIF有个缺陷,就是如果参数里有字符串类型的话就会报错,请写出一个新的实现过程,自动无视参数里的字符串并返回正确的计算结果

1. def sum(x):

2.     result = 0

3.     

4.     for each in x:

5.         if (type(each) == int) or (type(each) == float):

6.             result += each

7.         else:

8.             continue

9.

10.     return result

11.

12. print(sum([1, 2.1, 2.3, 'a', '1', True]))

复制代码



2. 请写下这一节课你学习到的内容:格式不限,回忆并复述是加强记忆的好方式!

第十七课

      
0. 你有听说过DRY吗?
       
1. 都是重复一段代码,为什么我要使用函数(而不使用简单的拷贝黏贴)呢?
     
2. 函数可以有多个参数吗?
     
3. 创建函数使用什么关键字,要注意什么?
     
4. 请问这个函数有多少个参数?

1. def MyFun((x, y), (a, b)):

2.     return x * y - a * b

复制代码


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

1. >>> def hello():

2.         print('Hello World!')

3.         return

4.         print('Welcome To FishC.com!')

复制代码



动动手:
     
0. 编写一个函数power()模拟内建函数pow(),即power(x, y)为计算并返回xy次幂的值。
     
    
1. 编写一个函数,利用欧几里得算法(脑补链接)求最大公约数,例如gcd(x, y)返回值为参数x和参数y的最大公约数。
    
    
2. 编写一个将十进制转换为二进制的函数,要求采用2取余脑补链接)的方式,结果与调用bin()一样返回字符串形式。
     
      
3. 请写下这一节课你学习到的内容:格式不限,回忆并复述是加强记忆的好方式!
     

回复您的答案即可查看参考答案!      

测试题答案:
     

0. 你有听说过DRY吗?
       
DRY是程序员们公认的指导原则:Don't Repeat Yourself. 
快快武装你的思维吧,拿起函数,不要再去重复拷贝一段代码了!
    
   
1. 都是重复一段代码,为什么我要使用函数(而不使用简单的拷贝黏贴)呢?
     
使用函数:

0) 可以降低代码量(调用函数只需要一行,而拷贝黏贴需要N倍代码)
1) 可以降低维护成本(函数只需修改def部分内容,而拷贝黏贴则需要每一处出现的地方都作修改)
2) 使序更容易阅读(没有人会希望看到一个程序重复一万行“I love FishC.com”


2. 函数可以有多个参数吗?
      
可以的,理论上你想要有多少个就可以有多少个,只不过如果函数的参数过多,在调用的时候出错的机率就会大大提高,因而写这个函数的程序员也会被相应的问候祖宗,所以,尽量精简吧,在Python的世界里,精简才是王道!
     
     
3. 创建函数使用什么关键字,要注意什么?
    
使用“def”关键字,要注意函数名后边要加上小括号“()”,然后小括号后边是冒号“:”,然后缩进部分均属于函数体的内容,例如:

1. def MyFun():

2.     # 我是函数体

3.     # 我也是函数体

4.     # 我们都属于函数MyFun()

5.

6. # 噢,我不属于MyFun()函数的了

复制代码



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

1. def MyFun((x, y), (a, b)):

2.     return x * y - a * b

复制代码


如果你回答两个,那么恭喜你错啦,答案是0,因为类似于这样的写法是错误的!
我们分析下,函数的参数需要的是变量,而这里你试图用元祖的形式来传递是不可行的。
     
我想你如果这么写,你应该是要表达这么个意思:

1. >>> def MyFun(x, y):

2.         return x[0] * x[1] - y[0] * y[1]

3.

4. >>> MyFun((3, 4), (1, 2))

5. 10

复制代码



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

1. >>> def hello():

2.         print('Hello World!')

3.         return

4.         print('Welcome To FishC.com!')

复制代码


会打印:

1. >>> hello()

2. Hello World!

复制代码


因为当Python执行到return语句的时候,Python认为函数到此结束,需要返回了(尽管没有任何返回值)。


    
          
动动手答案:
   

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

1. def power(x, y):

2.     result = 1

3.     

4.     for i in range(y):

5.         result *= x

6.

7.     return result

8.

9. print(power(2, 3))

复制代码



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

1. def gcd(x, y):

2.     while y:

3.         t = x % y

4.         x = y

5.         y = t

6.

7.     return x

8.     

9. print(gcd(4, 6))

复制代码



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

1. def Dec2Bin(dec):

2.     temp = []

3.     result = ''

4.     

5.     while dec:

6.         quo = dec % 2

7.         dec = dec // 2

8.         temp.append(quo)

9.

10.     while temp:

11.         result += str(temp.pop())

12.     

13.     return result

14.

15. print(Dec2Bin(62))

第十八课

第十九课

20

21

22

2324

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

本文来源:https://www.2haoxitong.net/k/doc/98afc21c66ec102de2bd960590c69ec3d4bbdb4c.html

《零基础学python全套课后题带目录.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式