第一课
0.Python 是什么类型的语言?
Python 是脚本语言,脚本语言(Scriptinglanguage)是电脑编程语言,因此也能让开发者藉以编写出让电
脑听命行事的程序。以简单的方式快速完成某些复杂的事情通常是创造脚本语言的重要原则,基于这项原
则,使得脚本语言通常比 C 语言、C++语言或 Java 之类的系统编程语言要简单容易。也让脚本语言另有一
些属于脚本语言的特性:
语法和结构通常比较简单
学习和使用通常比较简单
通常以容易修改程序的“解释”作为运行方式,而不需要“编译”
程序的开发产能优于运行性能
一个脚本可以使得本来要用键盘进行的相互式操作自动化。一个 Shell 脚本主要由原本需要在命令行
输入的命令组成,或在一个文本编辑器中,用户可以使用脚本来把一些常用的操作组合成一组串行。主要
用来书写这种脚本的语言叫做脚本语言。很多脚本语言实际上已经超过简单的用户命令串行的指令,还可
以编写更复杂的程序。
1.IDLE 是什么?
IDLE 是一个 PythonShell,shell 的意思就是“外壳”,基本上来说,就是一个通过键入文本与程序交互
的途径!像 Windows 的 cmd 窗口、Linux 的黑色命令窗口都是 shell,利用他们,我们就可以给操作系统下
达命令。同样我们可利用 IDLE 这个 shell 与 Python 进行互动。
2.print()的作用是什么?
print()会在输出窗口中显示一些文本,例如在 IDLEshell 窗口的提示符>>>后键入:
>>>print(“hello world!”)
hello world! # 输出结果
3.Python 中表示乘法的符号是什么?
乘法符号是*。如 5 乘 3 运算:5*3
4.为什么>>>print('Ilovefishc.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.为什么我们要使用 Python3?Python2 到底有什么问题?看起来很多程序员依然都在使用 Python2?
确实还有相当多的程序员在使用 Python2,不过 Python3 才是 Python 发展的未来,就像 XP 和 WIN7
一样。在《零基础入门学习 Python》的系列教程准备中,小甲鱼发觉 Python3 中的新特性确实很妙,很值
得进行深入学习!你也不用担心,如果你了解了 Python3,Python2 的代码阅读对于你来说根本不成问题!
0.什么是 BIF?
第二课
BIF 就是 Built-inFunctions,内置函数。为了方便程序员快速编写脚本程序(脚本就是要编程速度快),
Python 提供了非常丰富的内置函数,我们只需要直接调用即可,例如 print()的功能是“打印到屏幕”,input()
的作用是接收用户输入(注:Python3 用 input()取代了 Python2 的 raw_input(),用法问度娘)。
1.用课堂上小甲鱼教的方法数一数 Python3 提供了多少个 BIF?
68 个。在 Python 或 IDLE 中,输入 dir(__builtins__)可以看到 Python 提供的内置方法列表(注:builtins
前后是两个下划线)其中小写的就是 BIF。如果想具体查看某个 BIF 的功能,比如 input(),可以在 shell
中输入 help(input),就会得到这个 BIF 的功能描述。
2.在 Python 看来:'FishC'和'fishc'一样吗?
不一样,因为 Python 对字母大小写很敏感,对 Python 来说,fishc 和 FishC 是完全不同的两个名字。
测试:
>>> 'Fishc'=='FishC'
False
3.在小甲鱼看来,Python 中什么是最重要的?你赞同吗?
缩进!缩进是 Python 的灵魂,缩进的严格要求使得 Python 的代码显得非常精简并且有层次。在 Python
里对待缩进代码要十分小心,如果没有正确地缩进,代码所做的事情可能难以达到你的要求。如果在正确
的位置输入冒号“:”,IDLE 会自动将下一行缩进!
4.这节课的例子中出现了“=”和“==”,他们表示不同的含义,你在编程的过程中会不小心把“==”误写成
“=”吗?有没有好的办法可以解决这个问题呢?
在 C 语言中,如果 if (c==1)写成 if (c=1),程序就完全不按程序员原本的目的去执行,但在 Python 这
里,会报语法错误!因为 Python 不允许 if 条件中赋值,所以 if c=1:会报错!
5.你听说过“拼接”这个词吗?
将两个字符串“相加”在一起,如:'I' + 'Love' + 'FishC.com'会得到'I Love FishC.com',在 Python 里,这
种做法叫做拼接字符串。
第三课
编程题
0.编写程序:hello.py,要求用户输入姓名并打印“你好,姓名!”
name = input("Please input your name:")
print('你好,%s!' %name) # 或 print('你好,'+ name +'!')
1.编写程序:calc.py 要求用户输入 1 到 100 之间数字并判断,输入符合要求打印“你妹好漂亮”,不符合要
求则打印“你大爷好丑”
nums = input("猜猜我喜欢的数字是多少:")
guess = int(nums)
if 1<= guess <= 100: # if (guess >= 1) & (guess <= 100):
print('你妹好漂亮')
else:
print('你大爷好丑')
2.如果非要在原始字符串结尾输入反斜杠,可以如何灵活处理?
>>>str1 = 'C:\ProgramFiles\FishC\Good''\\'
>>>str2 = 'C:\ProgramFiles\FishC\Good\\'
>>>str3 = r'C:\ProgramFiles\FishC\Good''\\'
第四课
0.请问以下代码会打印多少次“我爱鱼 C!”
while 'C':
print('我爱鱼 C!')
无数次。因为 while 'C':条件总是 True,故程序陷入死循环, 直到崩溃或用户按下快捷键 CTRL+C(强
制结束)。
1.请问以下代码会打印多少次“我爱鱼 C!”
i=10
while i:
print('我爱鱼 C!')
i=i-1
打印 10 次
2.请写出与 10 10) and (cost < 50)
3. Python3 中,一行可以书写多个语句吗?
可以,如>>> print("abc");print("abc")。但是不建议使用,在循环和判断中容易出错。
4.Python3 中,一个语句可以分成多行书写吗?
可以;一个过长的语句可以使用反斜杠或者括号分解成几行, 如:
print\
("happy\
")
5.请问 Python 的 and 操作符和 C 语言的&&操作符有何不同?
C: 1 && 3 –> 1;0 && 1 --> 0
python: 1 and 3 –> 3;0 and 1 –> 0
6.听说过“短路逻辑(short-circuitlogic)”吗?
逻辑操作符有个有趣的特性:在不需要求值的时候不进行操作。例如,表达式 x and y,需要 x 和 y 两
个变量同时为真(True)的时候,结果才为真。因此,如果当 x 变量得知是假(False)的时候,表达式就会立刻
返回 False,而不用去管 y 变量的值。这种行为被称为短路逻辑(short-circuit logic)或惰性求值(lazy
evaluation),这种行为同样也应用与 or 操作符.
动动手:
0.完善第二个改进要求(为用户提供三次机会尝试,机会用完或者用户猜中答案均退出循环)并改进视频
中小甲鱼的代码。
import random
secret = random.randint(1,10)
max_time = 3
i=0
while i < max_time:
temp = input("猜一下小甲鱼现在心里想的是哪个数字:")
guess = int(temp)
i=i+1
if guess == secret:
print("卧槽,你是小甲鱼心里蛆虫吗?!")
print("哼,猜中了也没有奖励!")
break # 或 i = max_time
elif guess > secret:
print("哥,大了大了!!")
else:
print('哥,小啦小啦~~')
print("游戏结束,不玩啦~")
1. 尝试写代码实现以下截图功能:
num = int(input('请输入一个数:'))
i = 1
while num:
print(i)
i = i + 1
num = num – 1
1.尝试写代码实现以下截图功能:
num = int(input("请输入一个整数:"))
while num:
print((num-1) * ' ' + num * '*')
num = num - 1
第五课
0.在 Python 中,int 表示整型,那你还记得 bool、float 和 str 分别表示什么吗?
bool:布尔类型,只有两个值,True 或 False,在 Python 中这两个值首字母均大写;
int:整型,在 Python3 中长整形和整形归为一类,所有的整数都属于整型,例如 1,1000,1203 等;
float:浮点型,数字中有小数点的数,如 12.1,10.0 等,另外 1e10 也表示浮点数;
str:字符串,所有以单引号或双引号括起来的值都叫做字符串,例如“小马” ‘123’等。
1.你知道为什么布尔类型(bool)的 True 和 False 分别用 1 和 0 来代替吗?
计算机只认识二进制数,所以所有的编程语言最终都会转换成简单的二进制序列给 CPU 按照一定的
规则解析。由于二进制只有两个数:0 和 1,因此用 0 和 1 来表示 False 和 True 再适合不过了,因为不用
浪费资源在转换的过程上!
2.使用 int()将小数转换为整数,结果是向上取整还是向下取整呢?
向下取整,如 int(12.56)为 12
3.我们人类思维是习惯于“四舍五入”法,你有什么办法使得 int()按照“四舍五入”的方式取整吗?
int(num + 0.5)
4.取得一个变量的类型,视频中介绍可以使用 type()和 isinstance(),你更倾向于使用哪个?
更倾向于使用 type()
5.Python3 可以给变量命名中文名,知道为什么吗?
因为 python3 里面默认是 utf-8 编码
动动手:
0. 针对视频中小甲鱼提到的小漏洞,再次改进我们的小游戏:当用户输入错误类型的时候,及时提醒用
户重新输入,防止程序崩溃。
import random
secret = random.randint(1, 10)
print('------------------我爱鱼 C 工作室------------------')
guess=0
times = 3
# print()默认是打印完字符串会自动添加一个换行符,end=""参数告诉 print()用空格代替换行
print("不妨猜一下小甲鱼现在心里想的是哪个数字:",end="")
while (guess!=secret) and (times>0):
temp=input()
times=times-1#用户每输入一次,可用机会就-1
## --------------判断输入是否有效-------------------------
while (not temp.isdigit()) and (times > 0):
temp=input("抱歉,您的输入有误,请输入一个整数:")
times=times-1 #用户每输入一次,可用机会就-1
## -------------------------------------------------------
if times >= 0:
guess=int(temp)
if guess==secret:
print("我草,你是小甲鱼心里的蛔虫吗?!")
print("哼,猜中了也没有奖励!")
break
elif guess > secret:
print("哥,大了大了~~~")
else:
print("嘿,小了,小了~~~")
print("再试一次吧:",end="")
print("机会用光咯 T_T")
print("游戏结束,不玩啦^_^")
1.写一个程序,判断给定年份是否为闰年。(注意:请使用已学过的 BIF 进行灵活运用)
这样定义闰年的:能被 4 整除但不能被 100 整除,或者能被 400 整除都是闰年。
temp = input('请输入一个年份:')
while not temp.isdigit():
temp = input("抱歉,您的输入有误,请输入一个整数:")
year = int(temp)
if year/400 == int(year/400):
print(temp + '年是闰年!')
elif (year/4==int(year/4))and(year/100!=int(year/100)):
print(temp + '年是闰年!')
else:
print(temp + '年不是闰年!')
2.请写下这一节课你学习到的内容:格式不限,回忆并复述是加强记忆的好方式!
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
0.Python 的 floor 除法现在使用“//”实现,那 3.0//2.0 您目测会显示什么内容呢?
第六课
结果为 1.0
1.a 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 所有的奇数。
i=0
while i<=100:
if i % 2==1:
print(i,end=' ')
i=i+1
1.我们说过现在的 Python 可以计算很大很大的数据,但是......真正的大数据计算可是要靠刚刚的硬件滴,
不妨写一个小代码,让你的计算机为之崩溃?
print(2**2**32)
#一般很多机子都会在一会儿之后:MemoryOverflow,内存不够用。
2.爱因斯坦曾出过这样一道有趣的数学题:有一个长阶梯,若每步上 2 阶,最后剩 1 阶;若每步上 3 阶,
最后剩 2 阶;若每步上 5 阶,最后剩 4 阶;若每步上 6 阶,最后剩 5 阶;只有每步上 7 阶,最后刚好一阶
也不剩。(小甲鱼温馨提示:步子太大真的容易扯着蛋~~~)
题目:请编程求解该阶梯至少有多少阶?
求得的数必须是 7 的倍数,所以可以从 7 的倍数开始找
flag = True
i = 1
nums = 7
while flag:
if (nums % 2 == 1) and (nums % 3 == 2) and (nums % 5 == 4) and\
(nums % 6 == 5) and (nums % 7 == 0):
print('阶梯数是:',nums)
flag = False
i+=1
nums = 7 * i
第八课
0.if not (money < 100):上边这行代码相当于?
if money >= 100
1.assert 的作用是什么?
assert 这个关键字我们称之为“断言”,当这个关键字后边的条件为假的时候,程序自动崩溃并抛出
AssertionError 的异常。例如:
>>> assert 3 > 4
Traceback (most recent call last):
File "
", line 1, in
assert 3 > 4
AssertionError
什么情况下我们会需要这样的代码呢?当我们在测试程序的时候就很好用,因为与其让错误的条件导
致程序今后莫名其妙地崩溃,不如在错误条件出现的那一瞬间我们实现“自爆”。一般来说我们可以用它在
程序中置入检查点,当需要确保程序中的某个条件一定为真才能让程序正常工作的话,assert 关键字就非
常有用了。
2.假设有 x=1,y=2,z=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。
例如:
>>>name = '小甲鱼'
>>>'鱼' in name
True
>>>'肥鱼' in name
False
动动手:
0.视频中小甲鱼使用 if elif else 在大多数情况下效率要比全部使用 if 要高,但根据一般的统计规律,一个班
的成绩一般服从正态分布,也就是说平均成绩一般集中在 70~80 分之间,因此根据统计规律,我们还可以
改进下程序以提高效率。
题目备忘:按照 100 分制,90 分以上成绩为 A,80 到 90 为 B,60 到 80 为 C,60 以下为 D,写一个
程序,当用户输入分数,自动转换为 ABCD 的形式打印。
score = int(input('请输入成绩:'))
if 60 <= score < 80:
print('C')
elif 80 <= score <90:
print('B')
elif 90 <= score <=100:
print('A')
elif 0 <= score < 60:
print('D')
else:
print('输入错误!')
1.Python 的作者在很长一段时间不肯加入三元操作符就是怕跟 C 语言一样搞出国际乱码大赛,蛋疼的复杂
度让初学者望而生畏,不过,如果你一旦搞清楚了三元操作符的使用技巧,或许一些比较复杂的问题反而
迎刃而解。
请将以下代码修改为三元操作符实现:
x,y,z=6,5,4
if x