零基础5天入门Python数据分析:第三课(上)

明月AI 2021-10-28 11:16:44
Python 数据 入门 基础 零基

第一第二课已经讲了notebook的基础使用,python的基础语法及常用的数据结构及其运算,包括:

  • 整型: int
  • 浮点型: float
  • 布尔型: bool
  • 字符串: str
  • 元组: tuple
  • 列表: list
  • 集合: set
  • 字典: dict

其中,前五种类型是不可变类型,后三种是可变类型,而不可变类型才能作为集合的元素或者字典的键。

python的语法除了赋值语句,还有一些基础的结构,这是这次课的主体内容,包括:

  • 格式化输出
  • 错误信息
  • 条件语句
  • 循环语句
  • 函数

在学习python的基础结构时,可以多多使用 http://pythontutor.com/visualize.html 这个工具去理解python时怎么进行的。

在开始之前,我们先补充一下前面两课缺失的内容。

0. 补充前两课的内容

0.1 空类型 :None

python里还有一个特殊的类型:空类型,这个类型只有一个值:None,在比较的时候经常会用到。

a = None
# 判断变量值是否为None
print(a == None)
# 通常我们使用下面的写法:is
print(a is None)

0.2 求和函数 :sum

我们已经讲过了min和max函数,还有一个求和的函数,这个对于元组,列表,集合都通用使用的。

a = (3, 2, 1, 5, 4)
print(sum(a)) # 求和

0.3 元组解封装

有些文章也会叫元组解包,使用起来很方便简洁:

# 例如我们定义一个平面上的坐标点
point = [10, 12]
# 如果没有解封装的话,需要这样
# 这写法就啰嗦了
x = point[0]
y = point[1]
# 但是我们可以使用解封装,则简洁优美
# 注意左边的变量数量需要跟右边元组的元素数量相同
x, y = point

这个解封装对于下面所讲的列表也是一样的。

0.4 把一个列表赋值给另一个列表

前面已经讲到一部分这个问题,把一个列表直接赋值给另一个列表,其实它们指向的是同一个列表。改变其中 一个,则另一个也会跟着改变。

那我们有没有办法改变呢?

a = [1, 2, 3]
# 将a的所有元素赋值给b
b = a[:]
# 这个赋值和这个的效果是一致的:b = a.copy()
# 改变a的某个元素值
a[1] = 4
print(a)
print(b)

我们看一下图示就清楚了:

很显然,这时变量a和变量b是完全独立的。

但是,这种方式的赋值也并不是完全独立的,后续还会涉及。

这个方式对于下面要讲的集合和字典都是适用的。

(下面正式进入这次课的内容)


1. 打印语句

前面已经讲了print的基础用法,这里再讲一下怎么使用print语句来进行格式化输出。

# 定义变量
name = "张三"
age = 18
is_boy = True
print('一个叫%s的人,今年%d岁,TA是一个男孩吗?%s' % (name, age, is_boy))

上面会输出:

一个叫张三的人,今年18岁,TA是一个男孩吗?True

格式化有几种常用的形式:

  • %d: 格式化成整数
  • %f:格式化成浮点数
  • %s: 格式化成字符串

对于浮点数,可能还有一个是大家比较常用的,就是控制小数点后的位数。

pi = 3.1415926
print('PI的近似值是:%.2f' % pi) # 保留两位小数

当然,格式化还有很多很复杂的写法,需要用到的时候,大家可以再去深入学习。

这个格式化字符串,其实也可以用于定义字符串:

pi = 3.1415926
s = 'PI的近似值是:%.2f' % pi
print(s)

2. 错误信息

要学好编程,学会处理异常,学会处理问题,那是非常重要的,而要更好的处理出现的异常与问题,读懂错误信息就非常关键。

python的错误类型非常多,这里只提供一些常见的。

2.1 语法错误: SyntaxError

这是初学者经常遇到的问题,如下:

解读一下这个信息:

  • 错误类型:SyntaxError是语法错误的意思,就是语句不符合python的语法,常见的就是中文符号的问题。
  • 错误信息:invalid character in identifier,这是非法字符的意思
  • 错误位置:“a = (1, 2)”这行代码出错,出错的位置在左括号的位置。

python的语法使用都是英文的符号,如果不小心使用了中文符号,则会报语法错误,还有像括号是需要配对出现的,引号也是需要配对出现的,否则也会报语法错误。

2.2 类型错误: TypeError

通常是函数参数类型出错。

“bad operand type for abs(): 'str'”:对于abs函数,str是错误的类型

"abs() takes exactly one argument (0 given)" : abs函数需要一个参数,但是只提供了0个(0 given)

2.3 索引错误:IndexError

list index out of range: 列表的索引超出了范围。我们往回看变量a只有3个元素,现在取下标5,那肯定是超出范围了

2.4 零不能作为分母:ZeroDivisionError

这个是比较容易理解的

2.5 值错误:ValueError

too many values to unpack:太多的值需要解封装,但是只提供了2个。碰到这个问题,可以在解封装之前,把该变量打印出来看看。

2.6 未定义变量

变量需要遵循先定义后使用的原则,否则就会报错。

3. 条件语句

条件语句(也称为分支语句,都是一样的意思)通常是这样模式:

  • 如果什么(条件) ,就做什么
  • 如果什么(条件),就做什么;否则做什么

这是我们组织语言的常用结构,对于的python中:

# 第一种:
if 条件:
do some things ...
# 第二种:
if 条件:
do some things ...
else:
do other things ...
# 第三种:
if 条件:
do some things ...
elif 条件:
do some things ...
else:
do other things ... 

上面的只是伪代码,并不能实际运行。

  • 条件:就是布尔值,或者是一个能得到布尔值的运算。条件的后面需要由一个冒号
  • 动作(do some things):这是if语句的嵌套子语句,必须通过缩进,通常缩进是4个空格

注意:在python语法中,当一个行的最后出现冒号时,下一行通常时需要进行缩进的,例如条件语句,循环语句,函数等。

条件语句的图示,如下图:

3.1 if结构

# 一个叫张三的人,考试成绩82分,是班干部,父母是医生
name = '张三'
score = 82
parent = 'doctor'
is_cadre = True # 是否是班干部
print('加分之后,%s的分数是:%d' % (name, score))
# 定义可以加分的类型
# 这里使用集合,其实还可以使用元组,列表等。
point_types = {'doctor'}
# 判断是否可以加分
# parent in point_types 这个就是判断条件
if parent in point_types:
score += 10 # 等同于:score = score + 10
print('加分之后,%s的分数是:%d' % (name, score))

如果我们在if之后没有进行缩进,则会产生缩进错误(IndentationError):

python是依赖缩进来表示语句的层级的,初学者也比较容易出现类似的错误。

3.2 if...else结构

如果我们把上面if的地方改成如下:

# 判断是否可以加分
# 如果满足我们的加分条件,则加10分,否则加5分
if parent in point_types:
score += 10
else:
score += 5

3.3 if...elif...else结构

我们的加分条件进一步复杂,如果父母满足条件,且是班干部,则加10分;如果只满足其中一个条件,则加5分;如果都不满足,则加2分。实现如下:

if parent in point_types and is_cadre:
score += 10
elif parent in point_types or is_cadre:
score += 5
else:
score += 2

当然elif之后不一定需要else的。

elif可以理解为else if的缩写。

3.4 变量类型判断

获取变量类型的函数时type:

a = 1
b = 3.14
c = False
s = 'string'
n = None
tu = (2, b, c, s)
ls = [a, b, c, s, tu, 6.18]
st = {a, b, c, s, tu, 3.14}
dt = {
'a': a,
'b': b,
}
print(type(a), type(b), type(c), type(s), type(n))
print(type(tu), type(ls), type(st), type(dt))
a = 1
if type(a) is int:
print('a is int')
else:
print('a is not int')

判断某个变量是否是某种类型时,通常使用is操作符。当然这里使用==比较符也是可以的,只是使用is更加直观。

注意:is和==并不是完全一致的,但是这里暂时不去深究。

4. 循环语句

例如,如果我们需要将1到10的数字逐一打印出来,当然我们可以写10个print,那就有10行代码,非常啰嗦。这时,我们就有必要引入循环语句了。

说明:python的循环除了有for循环,其实也有while循环,但是实际上基本能用while实现的,都可以使用for进行实现,自己在使用python的过程中,几乎很少用到while,所以并不准备讲while,感兴趣的可以自己去学习。

For循环:

for 循环变量 in 可循环变量:
循环体
  • 循环体需要进行缩进,通常时4个空格
  • 在循环体中可以使用循环变量
  • 可循环变量,例如元组,列表等

4.1 对值进行循环

把1到10打印出来:

a = (1,2,3,4,5,6,7,8,9,10)
# 依次从元组a中取出一个值,赋值给val
for val in a: # val是循环变量
print(val) # 循环体
print("The last value: ", val) # 注意:这个变量在循环体的外部是可以使用的

不过就这个问题而言,最简单的还不是这样,后面会讲到另一个函数。

对值进行循环适用于字符串,元组,列表,集合等。现在我们一步一步来看其执行过程:

第一次执行到for循环时,取出元组的第一个值:

执行完循环体之后,因为元组还有元素,继续取出一个元素:

以此类推,直到遍历完元组所有的元素。

4.2 对键进行循环

如果需要对键进行循环,则需要使用一个range的函数,该函数会生成一个类似元组的结构,可以进行循环。

range(n)生成的是从0到n-1的整数的元组(暂时可以理解为元组,但是并不是元组)。

a = (1,2,3,4,5,6,7,8,9,10)
for k in range(len(a)):
print(a[k])

对键进行循环适合于字符串,元组和列表等,但不能用于集合(因为集合是无序的)。

为了能看清楚range的作用,我们把range的结果赋值给data变量:

range(n)可以暂时简单理解为返回一个0到n-1的整数元组。

4.3 对字典进行循环

字典本身是无序的,好像并不应该进行循环,不过事实上,字典是可以循环的。在python中,字典三个函数是可以用来循环的:

  • d.keys(): 这样可以得到字典d的键的列表
  • d.values(): 这样可以得到字典d的值的列表
  • d.items(): 这样可以得到字典d的键值对的列表

我们看一下这三个内置函数的作用:

可见,这三个函数返回的都是元组或者列表一样的结构。

# 定义一个字典
d = {
'a': 1,
'b': 2,
'c': 3,
}
for k in d.keys():
print(k)
for v in d.values():
print(v)
for k, v in d.items():
print("键: %s, 值: %d" % (k, v))
for item in d.items():
print("键: %s, 值: %d" % (item[0], item[1]))

4.4 打印九九乘法表

九九乘法表大家都见过,我们尝试将它用python打印出来:

for i in range(1, 10):
# 子循环
for j in range(1, i+1):
print("%d * %d = %d" % (i, j, i*j))

range函数只有一个参数的时候,前面已经介绍过了,如果有两个参数:

range(start, end): 会生成一个从start到end-1的整数元组(同样,这里说元组只是方便理解)。

说明:这里打印的乘法表,跟我们小时候看到的格式差别比较大,练习题里有个题目。

4.5 循环中的几个常用的函数

4.5.1 zip函数

如果我们有一个姓名的列表,也有一个对应的成绩的列表,如果现在要将姓名和成绩对应起来,这时使用zip函数就很方便:

names = ['张三', '李四', '王五']
scores = [66, 89, 59]
# 循环打印出来
# name对应names
# score对应scores
for name, score in zip(names, scores):
print('%s的成绩是:%d' % (name, score))
# 我们也可以使用一个字典来保持姓名和成绩的对应起来
name_scores = {} # 先定义一个字典
for name, score in zip(names, scores):
name_scores[name] = score
print(name_scores)

输出如下:

张三的成绩是:66
李四的成绩是:89
王五的成绩是:59
{'张三': 66, '李四': 89, '王五': 59}

4.5.2 enumerate函数

上面我们已经有了对键的循环,也有对值的循环,那么能不能同时对键值进行循环呢?例如:如果我们需要打印列表的偶数下标对应的值:

a = [1,2,3,4,5,6,7,8,9,10]
# 按照前面,我们可以使用对键的循环来实现
for i in range(len(a)):
if i % 2 == 0: # 取余运算
print(a[i])
# 但是如果使用enumerate函数,则会简单很多
for k, v in enumerate(a):
if k % 2 == 0:
print(v)

显然,enumerate函数返回一个键值对,类似字典的items函数。这个对于元组也是一样的。

5. 练习

在学完变量和基础结构之后,我们就可以来完成一些练习题了:

  1. 计算10的阶乘。
  2. 计算100以内所有奇数的和。
  3. 使用循环的方式实现一个类似copy的功能,将一个字典完整复制到另一个变量。
  4. 打印一个比较好的乘法表。

未完待续。。。

本文分享自微信公众号 - 野生AI架构师(Moon-CV)

原文出处及转载信息见文内详细说明,如有侵权,请联系 [email protected] 删除。

原始发表时间: 2020-04-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

版权声明
本文为[明月AI]所创,转载请带上原文链接,感谢
https://cloud.tencent.com/developer/article/1894155

  1. 保姆级教程!将 Vim 打造一个 IDE (Python 篇)
  2. python给定两个函数和定义域,判定两个函数是否构造为复合函数。
  3. 求 python3.8 有条件的递增方法
  4. 如何让python的//运算得到一个小数点不是0的结果
  5. 关于#matlab# #算法# #python#的问题:校园导航制作
  6. python的字典编程练习。!
  7. Python类的实例化应用实现输入打印
  8. python的字典编程练习,!
  9. 调试来自于逐飞的MM32F3277移植有MicroPython开发板
  10. 求 python3.8 有条件的递增递减算法
  11. 如何才能在python中实现动态宽度对齐输出
  12. 14道Python基础练习题(附答案)
  13. python写一个正则,匹配内容以“关于”,(代转)开头的那句话,要怎么写正则?
  14. 来个Python能做的救救孩子.
  15. Python爬虫,写完程序获取不到结果,
  16. python for循环和while循环打印九九乘法表
  17. Python异常
  18. Python请设计一能产生某月份月历的程序,能提示用 户输入某月份第1天是星期几,并将该月份的月历打印出来,求
  19. Python入门语法(简洁不啰嗦)
  20. Python入门与各种系统安装部署应用
  21. 你只认识大众汽车的车标怎么能行?赶紧用python采集所有车标学习一下
  22. python回文词如何以文件形式解决python问题
  23. 工作排程中Bat调用Python 程式无发打开(一闪而过)?
  24. python题目不会写求朋友们帮帮忙
  25. pythonwx内进行for循环导致窗体未响应
  26. Python自动化测试框架,谁才是你的唯一?
  27. 如何删除anaconda文件夹里的python.exe
  28. python爬取数据报错求解决一下
  29. Python编写程序求复利率,复利计算公式为
  30. 每周最怕编程课,懂python的朋友看看我吧
  31. 使用python批量将csv文件转为txt文件
  32. 用python写程序!!救命!!
  33. Python编写程序,输入年龄和出生年份,输入姓名和年龄
  34. Python爬虫,关于Xpath定位与预期不符
  35. python 批量计算的数据 print()到console的数据如何全部保存到指定路径文档,目前只能保存最后一个文件的
  36. 安装Python时出现错误:显示发现windows7 怎么弄
  37. 关于python中的PiP升级,尝试过很多遍了还是这个问题
  38. 这个怎么整啊,刚接触python
  39. 用python做图形旋转,opencv如何自动旋转图片到正常的水平位置
  40. Python零基础入门:字符串使用详解(常用方法及使用案例)
  41. Python Qt GUI设计:QPrinter打印图片类(基础篇—21)
  42. python中一维数组怎么转置
  43. 遇到一个问题,关于Python的复数的
  44. python批量将文件夹里的csv文件转成txt文件
  45. Python 彻底搞懂列表推导式|初级到进阶(实例30+)
  46. python爬虫,遇到urllib.error.URLError: <urlopen error [Errno 11001] getaddrinfo failed>错误
  47. Python程序设计输入五到十之间的整数n,生成并输出一个n位的验证码,不能把大小写字母和数字全写出来
  48. python程序打包之后没运行tkinter
  49. python提取多个Excel文件内目的格内容按一定格式写入新的Excel。
  50. pandas读取csv文件文件末尾都是NaN值,发生了什么?
  51. Python使用matplotlib可视化自定义背景色实战:自定义可视化图像的背景色(Background Color)
  52. 大学生Python实验的列表与元组
  53. python 关于线程的参数args的问题
  54. 如何用python将pdf转成网页html的格式
  55. python基础题 运行后卡在某一步 随后电脑疯狂运转发声 等待无果
  56. 求大神教怎么用python写字
  57. 云计算开发:Python3-expandtabs()方法详解
  58. 9000字深度整理: 全网最详细 Pandas 合并数据集操作总结!
  59. python这个代码有错误,请帮我修改
  60. python redis自带门神 lock 方法