您的当前位置:首页正文

小甲鱼第1-4章(未整理)

2024-11-04 来源:个人技术集锦

第一课
题目与答案
0. Python 是什么类型的语言?

Python是脚本语言

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

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

语法和结构通常比较简单
学习和使用通常比较简单
通常以容易修改程序的“解释”作为运行方式,而不需要“编译”
程序的开发产能优于运行性能

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

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

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

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

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

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

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

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

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

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

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

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

第二课
题目及答案
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

  1. 在 Python 看来:‘FishC’ 和 ‘fishc’ 一样吗?

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

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

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

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

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

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

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

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

  1. 你听说过“拼接”这个词吗?

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

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

1.name = input(“请输入您的姓名:”)
2.print(‘你好,’ + name + ‘!’)
复制代码

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

1.temp = input(“请输入1到100之间的数字:”)
2.num = int(temp)
3.if 1 <= num <= 100:
4. print(‘你妹好漂亮_’)
5.else:
6. print(‘你大爷好丑T_T’)
复制代码

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

1.>>>str = r’C:\Program Files\FishC\Good’’\’
复制代码

第四课
题目及答案(答案不全)
测试题:

  1. 请问以下代码会打印多少次“我爱鱼C!”
    1.while ‘C’:

  2. print(‘我爱鱼C!’)
    复制代码
    无数次

  3. 请问以下代码会打印多少次“我爱鱼C!”
    1.i = 10
    2.while i:

  4. print(‘我爱鱼C!’)

  5. i = i - 1
    复制代码

  6. 请写出与 10 < cost < 50 等价的表达式
    10 < cost < 50 cost > 10 and cost < 50

  7. Python3 中,一行可以书写多个语句吗?
    可以 print(‘asdf’);print(‘asdf’)

  8. Python3 中,一个语句可以分成多行书写吗?
    可以
    可以,可以使用反斜杠或括号分解成几行
    print
    (“hh”)

  9. 请问Python的 and 操作符 和C语言的 && 操作符 有何不同?【该题针对有C或C++基础的朋友】
    Python语言支持逻辑运算符,以下假设变量 a 为 10, b为 20:
    运算符 逻辑表达式 描述 实例
    and x and y 布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。 (a and b) 返回 20。
    or x or y 布尔"或" - 如果 x 是非 0,它返回 x 的值,否则它返回 y 的计算值。 (a or b) 返回 10。
    not not x 布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。 not(a and b) 返回 False

  10. 听说过“短路逻辑(short-circuit logic)”吗?
    笼统的说,短路逻辑值得是在一个逻辑中,只判断前半部分,只要前半部分可以确定结果,就不会判断逻辑的后半部分。

动动手:

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

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

答案(不完整)

测试题答案:

  1. 请问以下代码会打印多少次“我爱鱼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 次。

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

(10 < cost) and (cost < 50)

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

可以,语句之间用分号隔开即可,不妨试试:

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

可以,一行过长的语句可以使用反斜杠或者括号分解成几行,不妨试试:
1.>>> 3 > 4 and
2. 1 < 2
复制代码
或者
1.>>> ( 3 > 4 and
2. 1 < 2 )
复制代码

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

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

VS

  1. 听说过“短路逻辑(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
复制代码

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

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
复制代码

第五课
题目
测试题:

  1. 在 Python 中,int 表示整型,那你还记得 bool、float 和 str 分别表示什么吗?

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

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

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

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

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

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

动动手:

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

如果你尝试过以下做法,请举下小手:
1.temp = input(“不妨猜一下小甲鱼现在心里想的是哪个数字:”)
2.# 这种想法是因为type(1)会返回<class ‘int’>,如果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)永远是<class ‘str’>!

其实有蛮多的做法可以实现的,不过就目前我们学习过的内容来看,还不足够。

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

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. 请写下这一节课你学习到的内容:格式不限,回忆并复述是加强记忆的好方式!

答案

  1. 在 Python 中,int 表示整型,那你还记得 bool、float 和 str 分别表示什么吗?

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

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

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

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

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

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

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

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

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

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

Pyhton3 源码文件默认使用utf-8编码(支持中文),这就使得以下代码是合法的:

小甲鱼 = ‘我爱你’
print(小甲鱼)
我爱你

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

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

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

动动手答案:

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

需要注意的地方在代码中已经注释!
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():
  2. temp = input(“抱歉,您的输入有误,请输入一个整数:”)

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 + ’ 不是闰年!’)
复制代码

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

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

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

第六课
测试题:

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

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

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

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

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

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

动动手:

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

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

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

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

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

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

测试题答案:

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

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

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

(a < b) and (b < c)

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

0.04,也就是 1/25

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

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

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

  1. 请用最快速度说出答案: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

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

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

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

动动手答案:

  1. 请写一个程序打印出 0~100 所有的奇数。
    1.i = 0
    2.while i <= 100:
  2. if i % 2 != 0:
  3.    print(i, end=' ')
    
  4.    i += 1
    
  5. else:
  6.    i += 1
    

复制代码

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

print(2 ** 2 ** 32)

一般很多机子都会在一会儿之后:Memory Overflow,内存不够用。

设计到幂操作,结果都是惊人滴。

  1. 题目:请编程求解该阶梯至少有多少阶?
    1.x = 7
    2.i = 1
    3.flag = 0

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 = 1,y = 2,z = 3,请问如何快速将三个变量的值互相交换?

  3. 猜猜 (x < y and [x] or [y])[0] 实现什么样的功能?

  4. 你听说过成员资格运算符吗?

动动手:

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

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

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

6.elif y < z:
7. small = y
8.else:
9. small = z
复制代码

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

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

测试题答案:

  1. if not (money < 100): 这行代码相当于?

if money >= 100:

  1. assert 的作用是什么?

assert这个关键字我们称之为“断言”,当这个关键字后边的条件为假的时候,程序自动崩溃并抛出AssertionError的异常。
什么情况下我们会需要这样的代码呢?当我们在测试程序的时候就很好用,因为与其让错误的条件导致程序今后莫名其妙地崩溃,不如在错误条件出现的那一瞬间我们实现“自爆”。
一般来说我们可以用Ta再程序中置入检查点,当需要确保程序中的某个条件一定为真才能让程序正常工作的话,assert关键字就非常有用了。

  1. 假设有 x = 1,y = 2,z = 3,请问如何快速将三个变量的值互相交换?

x, y, z = z, y, x

  1. 猜猜 (x < y and [x] or [y])[0] 实现什么样的功能?

这其实是 Python 的作者还没有为 Python 加入三元操作符之前,Python 社区的小伙伴们灵活的使用 and 和 or 搭配来实现三元操作符的功能,这里边有涉及到列表和切片的知识,这部分知识很快就会讲解,迫不及待的朋友可以先稍微预习下。

  1. 你听说过成员资格运算符吗?

Python 有一个成员资格运算符:in,用于检查一个值是否在序列中,如果在序列中返回 True,否则返回 False。

例如:
1.>>> name = ‘小甲鱼’
2.>>> ‘鱼’ in name
3.True
4.>>> ‘肥鱼’ in name
5.False
复制代码
当下节课我们讲解 for 语句的时候,你看到 in 会不会就有了更深入的理解?!

动动手答案:

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

  2. print(‘C’)
    4.elif 90 > score >= 80:

  3. print(‘B’)
    6.elif 60 > score >= 0:

  4. print(‘D’)
    8.elif 100 >= score >= 90:

  5. print(‘A’)
    10.else:

  6. print(‘输入错误!’)
    复制代码

  7. 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’)
    复制代码

  3. 回顾一下 break 和 continue 在循环中起到的作用?

  4. 请谈下你对列表的理解?

  5. 请问 range(10) 生成哪些数?

  6. 目测以下程序会打印什么?
    1.while True:

  7. while True:

  8.    break
    
  9.    print(1)
    
  10. print(2)

  11. break
    7.print(3)
    复制代码

  12. 什么情况下我们要使循环永远为真?

  13. 【学会提高代码的效率】你的觉得以下代码效率方面怎样?有没有办法可以大幅度改进(仍然使用while)?
    1.i = 0
    2.string = ‘ILoveFishC.com’
    3.while i < len(string)):

  14. print(i)

  15. i += 1
    复制代码

动动手:

细节决定成败,看答案前记得自己先敲代码!

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

程序演示如图:

  1. 编写一个程序,求 100~999 之间的所有水仙花数。
    如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数。

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

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

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

测试题答案:

  1. 下面的循环会打印多少次"I Love FishC"?
    1.for i in range(0, 10, 2):

  2. print(‘I Love FishC’)
    复制代码
    5 次,因为从 0 开始,到 10 结束,步进为 2。

  3. 下面的循环会打印多少次"I Love FishC"?
    1.for i in 5:

  4. print(‘I Love FishC’)
    复制代码
    会报错,上节课的课后习题我们提到了 in 是“成员资格运算符”,而不是像 C 语言那样去使用 for 语法。Python 的 for 更像脚本语言的 foreach。

  5. 回顾一下 break 和 continue 在循环中起到的作用

break语句的作用是终止当前循环,跳出循环体。
continue语句的作用是终止本轮循环并开始下一轮循环(这里要注意的是:在开始下一轮循环之前,会先测试循环条件)。

  1. 请谈下你对列表的理解

嗯,有些知识点需要自己总结才能加固,下节课小甲鱼将跟大家畅谈一个打了激素的数组:列表,不容错过哦_

  1. 请问 range(10) 生成哪些数?

会生成 range(0, 10),list(range(0, 10)) 转换成列表是:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],注意不包含 10 哦。

  1. 目测以下程序会打印什么?
    1.while True:
  2. while True:
  3.    break
    
  4.    print(1)
    
  5. print(2)
  6. break
    7.print(3)
    复制代码
    会打印:
    2
    3

因为 break 只能跳出一层循环,记住咯!

  1. 什么情况下我们要使循环永远为真?

while Ture:
循环体

同样用于游戏实现,因为游戏只要运行着,就需要时刻接收用户输入,因此使用永远为真确保游戏“在线”。操作系统也是同样的道理,时刻待命,操作系统永远为真的这个循环叫做消息循环。另外,许多通讯服务器的客户端/服务器系统也是通过这样的原理来工作的。

所以永远为“真”虽然是“死循环”,但不一定是坏事,再说了,我们可以随时用 break 来跳出循环!

  1. 【学会提高代码的效率】你的觉得以下代码效率方面怎样?有没有办法可以大幅度改进(仍然使用while)?
    1.i = 0
    2.string = ‘ILoveFishC.com’
    3.while i < len(string)):
  2. print(i)
  3. 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
复制代码

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

动动手答案:

  1. 设计一个验证用户密码程序,用户只有三次机会输入错误,不过如果用户输入的内容中包含"*"则不计算在内。
    1.count = 3
    2.password = ‘FishC.com’

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)
    

复制代码

  1. 三色球问题
    有红、黄、蓝三种颜色的求,其中红球 3 个,黄球 3 个,绿球 6 个。先将这 12 个球混合放在一个盒子中,从中任意摸出 8 个球,编程计算摸出球的各种颜色搭配。
    1.print(‘red\tyellow\tblue’)
    2.for red in range(0, 4):
  2. for yellow in range(0, 4):
  3.    for green in range(2, 7):
    
  4.        if red + yellow + green == 8:
    
  5.            # 注意,下边不是字符串拼接,因此不用“+”哦~
    
  6.            print(red, '\t', yellow, '\t', green)
    

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

Top