python基础

目录

第一章 起步

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

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

也让脚本语言另有一些属于脚本语言的特性:
语法和结构通常比较简单
学习和使用通常比较简单
通常以容易修改程序的“解释”作为运行方式,而不需要“编译”
程序的开发产能优于运行性能

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

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

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

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

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

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

在 Python 中不能把两个完全不同的东西加在一起,比如说数字和文本,正是这个原因,>>>print('I love fishc.com ’ + 5) 才会报错。不过乘以一个整数来翻倍就具有一定的意义了,前边的例子就是将 “I love fishc.com” 这个字符串打印五次。

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

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

5. 输入5+8 与输入print(5+8) 有何不同?

输入’I love fishc.com!’ 与输入print(‘I love fishc.com!’) 有何不同?

>>> 5+8
13
>>> print(5+8)
13
>>> 'I love fishc.com!'
'I love fishc.com!'
>>> print('I love fishc.com!')
I love fishc.com!

直接输入是将结果及类型打印到屏幕上,而print是将结果打印到屏幕上。

6. 什么是BIF?

BIF 就是 Built-in Functions,内置函数。为了方便程序员快速编写脚本程序(脚本就是要编程速度快快快!!!),Python 提供了非常丰富的内置函数,我们只需要直接调用即可.

7. Python3 提供了多少个 BIF?

在 Python 或 IDLE 中,输入 dir( __ builtins __) 可以看到 Python 提供的内置方法列表(注意,builtins 前后是两个下划线哦)其中小写的就是 BIF。如果想具体查看某个 BIF 的功能,比如 input(),可以在 shell 中输入 help(input),就会得到这个 BIF 的功能描述。哦,答案应该是 68 个。

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

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

9. Python 中什么是最重要的?

缩进是 Python 的灵魂,缩进的严格要求使得 Python 的代码显得非常精简并且有层次。如果在正确的位置输入冒号“:”,IDLE 会自动将下一行缩进!

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

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

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

temp = input("请输入1到100之间的数字:")
num = int(temp)
if 1 <= num <= 100:
    print('你妹好漂亮^_^')
else:
    print('你大爷好丑T_T')

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

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

>>> print('I love fishc');print('very much!')

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

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

>>> 3 > 4 and \
  1 < 2

或者

>>> ( 3 > 4 and
  1 < 2 )

14. Python的 and 操作符 和C语言的 && 操作符 有何不同?

看下图(C\C++ 对比 Python):

在这里插入图片描述

对比
在这里插入图片描述

15. 听说过“短路逻辑(short-circuit logic)”吗?

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

这种行为被称为短路逻辑(short-circuit logic)或者惰性求值(lazy evaluation),这种行为同样也应用与 or 操作符。

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

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

在这里插入图片描述
错误做法:

i=8
while i>0:
    print(" "*i)
    print("*"*i)
    i=i-1

正确答案:

i=8
while i>0:
    print(" "*i,end='')
    print("*"*i)
    i=i-1

在这里插入图片描述
因为print会自动换行,加end=’'之后print才不会自动换行

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

(a < b) and (b < c)

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

答案是: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

温馨提示:为了更好的表达你的程序,有些括号还是不能省下的。

第二章 变量和数据类型

0. 以下哪个变量的命名不正确?为什么? (A) MM_520 (B) MM520 (C)520_MM (D) _520_MM

(c)选项不正确,因为 Python 中的变量名不能以数字开头。

1. 在不上机的情况下,以下代码会打印什么内容?

>>>first = 520
>>>second = '520'
>>>first = second
>>>print(first)

会打印:520,注:这里没有单引号括起来,但是他是一个字符串,因为使用 print() 打印,所以不包含单引号。可以试试直接>>>first,它是一个字符串的。

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

使用r前缀。

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

3. 变量的命名需要注意一些地方,你能看得出哪里有问题吗?

在这里插入图片描述

在例子中有 str 名字的变量,但我们发现,str 的颜色跟普通变量不同?没错,str() 和 print() 都是内置函数,但 Python 不介意我们对内置函数进行赋值操作,所以这点我们以后就要注意啦,否则可能会出现以下的 BUG:

>>> print = 1
>>> print("I love FishC")
Traceback (most recent call last):
  File "<pyshell#37>", line 1, in <module>
    print("I love FishC")
TypeError: 'int' object is not callable

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

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

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

小数的正数向下取整。(5.5 向下取整为 5)
小数的负数向上取整。(-5.5 向下取整为- 5)

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

int() 固然没那么“聪明”,但机器是死的,人是活的!
5.4 “四舍五入”结果为:5,int(5.4+0.5) == 5
5.6 “四舍五入”结果为:6,int(5.6+0.5) == 6

7. 取得一个变量的类型,可以使用 type() 和 isinstance(),你更倾向于使用哪个?

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

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

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

>>> 小甲鱼 = '我爱你'  
>>> print(小甲鱼)
>>> 我爱你

第三章 字符串

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


temp=int(input("请输入一个年份:"))#Python把所有输入当作字符串处理,所以如果想要作为其他类型的数据处理,需要加一个类型转变
if temp%4==0 and temp%100!=0:
    print("是闰年")
else:
    if temp%400==0:
        print("是闰年")
    else:
        print("不是闰年")

1.字符串的函数

s 为字符串

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

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

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

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

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

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

s.isspace() 所有字符都是空白字符,为真返回 True,否则返回 False。

例如:

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

2. 还记得如何定义一个跨越多行的字符串吗(请至少写出两种实现的方法)?

方法一:

>>> str1 = '''待我长发及腰,将军归来可好?
醉卧沙场君莫笑,一夜吹彻画角。
江南晚来客,红绳结发梢。'''

方法二:

>>> str2 = '待卿长发及腰,我必凯旋回朝。\
应有得胜归来日,与卿共度良宵。\
盼携手终老,愿与子同袍。'

方法三:

>>> str3 = ('待卿长发及腰,我必凯旋回朝。'
'应有得胜归来日,与卿共度良宵。'
'盼携手终老,愿与子同袍。')
   

3. 三引号字符串通常我们用于做什么使用?

三引号字符串不赋值的情况下,通常当作跨行注释使用,例如:

'''这是一个三引号字符串用于注释的例子,
例子虽然只是简简单单的一句话,
却毫无遮掩地体现了作者用情至深,
所谓爱至深处情至简!'''

4. file1 = open(‘C:\windows\temp\readme.txt’, ‘r’) 表示以只读方式打开“C:\windows\temp\readme.txt”这个文本文件,但事实上这个语句会报错,知道为什么吗?你会如何修改?

会报错是因为在字符串中,我们约定“\t”和“\r”分别表示“横向制表符(TAB)”和“回车符”(详见:http://bbs.fishc.com/thread-92997-1-1.html),因此并不会按照我们计划的路径去打开文件。

Python 为我们铺好了解决的道路,只需要使用原始字符串操作符(R或r)即可:

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

第四章 分支和循环

0. assert 的作用是什么?

assert这个关键字我们称之为“断言”,当这个关键字后边的条件为假时,程序自动崩溃并抛出AssertionError的异常。

什么情况下会需要这样的代码呢?在测试程序的时候就很好用,因为与其让错误的条件导致程序今后莫名其妙地崩溃,不如在错误条件出现的那一瞬间我们实现“自爆”。

一般来说我们可以用Ta在程序中置入检查点,当需要确保程序中的某个条件一定为真才能让程序正常工作的话,assert关键字就非常有用了。

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

x, y, z = z, y, x

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

这其实是 Python 的作者还没有为 Python 加入三元操作符之前,Python 社区的小伙伴们灵活的使用 and 和 or 搭配来实现三元操作符的功能,这里边有涉及到列表和切片的知识。

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

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

>>> name = '小甲鱼'
>>> '鱼' in name
True
>>> '肥鱼' in name
False

4. 请将以下代码修改为三元操作符实现:

```python
x, y, z = 6, 5, 4
if x < y:
    small = x
    if z < small:
        small = z
elif y < z:
    small = y
else:
    small = z

答案:上面代码只是让我们知道求最小值的功能,并不是要代码一一对应。

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

5. 这个循环 表达什么意识 for i in range(0, 10, 2)?

5 次,因为从 0 开始,到 10 结束,步进为 2。

6. for i in 5:print(‘I Love FishC’)会打印多少次"I Love FishC"?

会报错,上节课的课后习题我们提到了 in 是“成员资格运算符”,而不是像 C 语言那样去使用 for 语法。Python 的 for 更像脚本语言的 foreach。

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

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

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

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

我们可以随时用 break 来跳出循环!

9. 【学会提高代码的效率】你的觉得以下代码效率方面怎样?有没有办法可以大幅度改进(仍然使用while)?

i = 0
string = 'ILoveFishC.com'
while i < len(string)):
    print(i)
    i += 1

这段代码之所以“效率比较低”是因为每次循环都需要调用一次 len() 函数

i = 0
string = 'ILoveFishC.com'
length = len(string)
while i < length:
    print(i)
    i += 1  

10. 三色球问题

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

print('red\tyellow\tgreen')
for red in range(0, 4):
    for yellow in range(0, 4):
        for green in range(2, 7):
            if red + yellow 
  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值