本学习笔记为阿里云天池龙珠计划Python训练营的学习内容,学习链接为:https://tianchi.aliyun.com/specials/promotion/aicamppython?spm=5176.22758685.J_6770933040.1.6f103da1tESyzu

目录

一、学习知识点概要

二、学习内容

I.变量、运算符与数据类型

II.位运算

III.条件语句

IV.循环语句

V.异常处理

三、学习问题与解答

四、学习思考与总结


一、学习知识点概要

Python 是一种通用编程语言,其在科学计算和机器学习领域具有广泛的应用。

本次学习包括以下内容:

  • 变量、运算符与数据类型
  • 位运算
  • 条件语句
  • 循环语句
  • 异常处理

二、学习内容

I.变量、运算符与数据类型

1.注释

在Python中,#表示注释,作用于整行,''' '''或""" """表示区间注释,在三个引号之间的信息为注释,例如:

"""
多行注释
三个双引号
"""
print('Hello World!')
#单行注释'''
多行注释
三个单引号
'''

2.位运算符

位运算符
运算符 含义 功能
& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1;否则为0
| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1
^ 按位异或 若参加运算的两个二进制位同号则结果为0(假)异号则结果为1(真)
~ 取反 ~是一个单目(元)运算符,用来对一个二进制数按位取反,即将0变1,将1变0
>> 左移 左移运算符是用来将一个数的各二进制位全部左移n位,右补0
<< 右移 表示将a的各二进制位右移n位,移到右端的低位被舍弃,对无符号数,高位补0

对位运算符的运用见后文“位运算”部分

3.三目运算符

对分支语句,例如:

a=2
b=5
if a>b:value=a
else:value=b
print(value)   #输出结果为5

在Python中可以运用更简洁的写法:

a=2
b=5
value=a if a>b else b
print(value)

使用 if else 实现三目运算符(条件运算符)的格式如下:

exp1 if contion else exp2

condition 是判断条件,exp1 和 exp2 是两个表达式。如果 condition 成立(结果为真),就执行 exp1,并把 exp1 的结果作为整个表达式的结果;如果 condition 不成立(结果为假),就执行 exp2,并把 exp2 的结果作为整个表达式的结果。

4.其他运算符

运算符 名称

示例

in 存在 1 in [1,2,3]
not in 不存在 4 not in [1,2,3]
is 'hello' is 'hello'
is not 不是 'hello' is not 'Hello'

运算结果为布尔型数据,以上示例结果都为True。

注:

  • 比较的两个变量,指向的都是地址不可变的类型(str等),那么is,is not 和 ==,!= 是完全等价的。
  • 对比的两个变量,指向的是地址可变的类型(list,dict,tuple等),则两者是有区别的。

5.基本数据类型与转换

基本数据类型有整形(int)、浮点型(float)、布尔型(boolean),可通过type()方法查看对象的数据类型,还可以用isinstance()方法查看两种数据的类型是否相同。

  • 整形(int)即为内容为整数的数据,如:5,112,-32等;
  • 浮点型(float)为含有小数点的数据,如:1.0,2.3e-07等;
  • 布尔型(boolean)数据只能取两个值,True和False。但布尔型的数据参与数字运算时,用1和0分别代表True和False。

如果我们想保留浮点型的小数点后n位,可以引入decimal包里的Decimal对象和getcontext()方法来实现,Decimal对象的默认精度为28位,例如:

import decimal
from decimal import Decimal
x=Decimal(2)/Decimal(7)
print(x)#结果为0.2857142857142857142857142857,有28位小数decimal.getcontext().prec=5
x=Decimal(2)/Decimal(7)
print(x)#结果为0.28571,有5位小数

创建布尔型变量除了直接给变量赋值和用运算符之外,还可以用bool(x)方法创建。其中x可以是

  • 基本类型:整型、浮点型、布尔型
  • 容器类型:字符串、元组、列表、字典和集合

当x为整形或浮点型时,若x=0或x=0.0,bool(x)就为False,否则为True;

当x为容器类型的数据时,若x为空,bool(x)为False,若x 为非空,bool(x)为True。

类型转换

  • 转换为整型,用int(x)
  • 转换为浮点型,用float(x)
  • 转换为字符串,用str(object=' ')

II.位运算

位运算是直接对整数在二进制中进行操作。我们的电脑电路设计都是基于二进制的,所以在二进制层面效率很高。通常位运算多用在对程序效率要求很高的场景。

1.原码、反码、补码

二进制有三种不同的表示形式:原码、反码和补码,计算机内部用补码表示。

  • 原码:就是对象的二进制表示。原码的首位为符号位,用于表示数据的正负,当对象为非负数时符号位为0,负数时符号位为1。取该整数的绝对值的二进制,再加上符号位。原码只是为了让我们看二进制更直观,直接看出正负数和比较大小。但原码不是计算机保存的二进制,所以不能直接参与计算。例:
  • 整数 绝对值 绝对值的二进制值 原码
    5 5 0000101 00000101
    -5 5 0000101 10000101
  • 反码:反码主要是针对负数的处理,非负数的反码就是原码。在原码的基础上,符号位不变,其他数值位取反,即把1变成0,把0变成1。反码是为了在计算机中存储二进制,但非真正的二进制值,所以也不直接参与计算。例如:
  • 整数 绝对值 原码 反码
    5 5 00000101 00000101
    -5 5 10000101 11111010
  • 补码:补码主要也是针对负数。非负数不变,而负数是在反码的基础上加1。
  • 整数 绝对值 反码 补码
    5 5 00000101 00000101
    -5 5 11111010 11111011

2.按位运算

上文提到的位运算符就是对两个数的补码直接进行操作。主要是在对应的位置上进行逻辑运算。以5和3为例:

运算符 & | ^ ~ >> <<
表达式 5&3 5|3 5^3

~5

5<<2

3>>1

二进制表示

00000101

&

00000011

00000101

|

00000011

00000101

^

00000011

~00000101

00000101<<2

00000011>>1

运算结果

00000001

1

00000111

7

00000110

6

11111010

-6

00010100

20

00000001

1

3.利用位运算实现快速计算

  • 通过 <<,>> 快速计算2的倍数问题:
n << 1  #计算 n*2
n >> 1  #计算 n/2,负奇数的运算不可用
n << m  #计算 n*(2^m),即乘以 2 的 m 次方
n >> m  #计算 n/(2^m),即除以 2 的 m 次方
1 << n  #计算 2^n,即2的n次方
  • 通过 ^ 快速交换两个整数:
a^=b
b^=a
a^=b
  • 通过 a&(-a) 快速获取a的最后为 1 位置的整数

III.条件语句

Python的条件语句为if-elif-else语句,与其他语言的用法相似,此处不多赘述。

assert关键词

这个关键词我们称之为“断言”,当这个关键词后边的条件为 False 时,程序自动崩溃并抛出AssetionError的异常。在进行单元测试时,可以用来在程序中置入检查点,只有条件为 True 才能让程序正常工作。

a=5
b=6
assert a>b#AssertionError

IV.循环语句

Python中的While循环和For循环与其他语言中的用法相似,此处只写一些不同的地方。

1.while - else循环

while - else循环的结构如下:

while  布尔表达式:代码块
else:代码块

当while循环正常执行完的情况下,执行else输出,如果while循环中执行了跳出循环的语句(如break),将不执行else代码块的内容。

2.for - else循环

与while - else循环类似,当for循环正常执行完的情况下,执行else输出,如果在循环途中执行了跳出循环的语句,则不会执行else的内容。例如:

for 循环变量 in 可迭代对象:代码块
else:代码块

3.range()方法

range() 返回的是一个可迭代对象(类型是对象),而不是列表类型, 所以打印(print)的时候不会打印列表。

range(start=0,stop,step=1),range()方法有三个参数:start,stop,step

  • start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
  • stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
  • step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)

4.enumerate()方法

enumerate(sequence,start=0),参数start可省略,默认为0

  • sequence:一个序列、迭代器或其他支持迭代对象。
  • start:下标起始位置。
  • 返回 enumerate(枚举) 对象

enumerate(X)不仅返回了X中的元素,还顺便给该元素一个索引值 (默认从 0 开始)。此外,用enumerate(X,j)还可以确定索引起始值为j

enumerate()方法可与for循环配合使用:

seq=['one', 'two', 'three']
for i, element in enumerate(seq):print(i, element)'''
0 one
1 two
2 three
'''

5.continue语句

continue语句用于终止本轮循环并开始下一轮循环,如:

for i in range(1,11):if i != 10:print('i不是10')continueprint('i是10')'''
i不是10
i不是10
i不是10
i不是10
i不是10
i不是10
i不是10
i不是10
i不是10
i是10
'''

6.pass语句

pass语句的意思是“跳过”,如果你在需要有语句的地方不写任何语句,那么解释器会提示出错,pass语句就是用来解决这个问题的。其作用是为了保持程序结构的完整性。尽管pass语句不做任何操作,但如果暂时不确定要在一个位置放上什么样的代码,可以先放置一个pass语句,让代码可以正常运行。

7.推导式

  • 列表推导式
#推导式结构:[ expr for value in collection [if condition] ]x = [-4, -2, 0, 2, 4]
y = [a * 2 for a in x]
print(y)# [-8, -4, 0, 4, 8]
  • 元组推导式
#推导式结构( expr for value in collection [if condition] )a = (x for x in range(10))
print(a)# <generator object <genexpr> at 0x0000025BE511CC48>print(tuple(a))# (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
  • 字典推导式
#推导式结构{ key_expr: value_expr for value in collection [if condition] }b = {i: i % 2 == 0 for i in range(10) if i % 3 == 0}
print(b)# {0: True, 3: False, 6: True, 9: False}
  • 集合推导式
#推导式结构{ expr for value in collection [if condition] }c = {i for i in [1, 2, 3, 4, 5, 5, 6, 4, 3, 2, 1]}
print(c)# {1, 2, 3, 4, 5, 6}

V.异常处理

异常就是运行期检测到的错误。计算机语言针对可能出现的错误定义了异常类型,某种错误引发对应的异常时,异常处理程序将被启动,从而恢复程序的正常运行。

1.Python标准异常总结

  • BaseException:所有异常的 基类
  • Exception:常规异常的 基类
  • StandardError:所有的内建标准异常的基类
  • ArithmeticError:所有数值计算异常的基类
  • FloatingPointError:浮点计算异常
  • OverflowError:数值运算超出最大限制
  • ZeroDivisionError:除数为零
  • AssertionError:断言语句(assert)失败
  • AttributeError:尝试访问未知的对象属性
  • EOFError:没有内建输入,到达EOF标记
  • EnvironmentError:操作系统异常的基类
  • IOError:输入/输出操作失败
  • OSError:操作系统产生的异常(例如打开一个不存在的文件)
  • WindowsError:系统调用失败
  • ImportError:导入模块失败的时候
  • KeyboardInterrupt:用户中断执行
  • LookupError:无效数据查询的基类
  • IndexError:索引超出序列的范围
  • KeyError:字典中查找一个不存在的关键字
  • MemoryError:内存溢出(可通过删除对象释放内存)
  • NameError:尝试访问一个不存在的变量
  • UnboundLocalError:访问未初始化的本地变量
  • ReferenceError:弱引用试图访问已经垃圾回收了的对象
  • RuntimeError:一般的运行时异常
  • NotImplementedError:尚未实现的方法
  • SyntaxError:语法错误导致的异常
  • IndentationError:缩进错误导致的异常
  • TabError:Tab和空格混用
  • SystemError:一般的解释器系统异常
  • TypeError:不同类型间的无效操作
  • ValueError:传入无效的参数
  • UnicodeError:Unicode相关的异常
  • UnicodeDecodeError:Unicode解码时的异常
  • UnicodeEncodeError:Unicode编码错误导致的异常
  • UnicodeTranslateError:Unicode转换错误导致的异常

2.Python标准警告总结

  • Warning:警告的基类
  • DeprecationWarning:关于被弃用的特征的警告
  • FutureWarning:关于构造将来语义会有改变的警告
  • UserWarning:用户代码生成的警告
  • PendingDeprecationWarning:关于特性将会被废弃的警告
  • RuntimeWarning:可疑的运行时行为(runtime behavior)的警告
  • SyntaxWarning:可疑语法的警告
  • ImportWarning:用于在导入模块过程中触发的警告
  • UnicodeWarning:与Unicode相关的警告
  • BytesWarning:与字节或字节码相关的警告
  • ResourceWarning:与资源使用相关的警告

3.try - except语句

'''
try - except语句结构如下:try:检测范围
except Exception[as reason]:出现异常后的处理代码
'''
try:f = open('test.txt')print(f.read())f.close()
except OSError:print('打开文件出错')# 打开文件出错
  • 首先执行try子句(即“检测范围”那块代码)
  • 若无异常发生,则忽视except语句
  • 若发生异常,那try子句的余下部分会被忽略。同时如果异常的类型和except后的异常类型相同,则会执行except子句
  • 如果一个异常没有与任何的except匹配,这个异常将会被传递到上层的try中
  • 一个try语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行
  • 一个except子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组。

4.try - except - finally语句

无论try子句执行时有没有发生异常,最终都会执行finally子句。如果执行try子句时发生异常,且没有任何except语句把异常拦截的话,会先执行finally子句再抛出异常。结构为:

try:检测范围
except:出现异常后的处理代码
finally:无论结果如何都执行这块代码

5.try - except - else语句

如果在执行try子句时没有发生异常,则执行else子句。结构为:

try:检测范围
except:出现异常后的处理代码
else:如果没有异常执行这块代码

6.raise语句

raise语句用于抛出一个指定的异常。例如:

try:raise NameError('HiThere')
except NameError:print('An exception flew by!')# An exception flew by!

三、学习问题与解答

在学习Task1时,出现的主要问题在于对位运算的不了解,例如在用位运算实现整数集合时,就不知道为什么那些整数集合可以表示为01的长串信息。通过在网上搜索才了解到是以01长串的位置来表示这个整数位置上的符号是否是1来表示这个整数在不在集合里,然后那些运算也就能看明白了。

四、学习思考与总结

现在还有的问题基本上都是例程里出现的一些陌生的函数方法不知道什么作用,我还需要通过继续学习才能弄明白。

阿里云天池 Python训练营Task1:从变量到异常处理相关推荐

  1. 阿里云天池Python训练营(day10打卡)

    [ML&Py]×阿里云天池Python训练营(day10打卡)--Python数据分析:从0完成一个宝可梦数据分析实战 一.学习内容概览 1.1 学习地址:[阿里云天池python训练营](h ...

  2. 阿里云天池Python训练营

    阿里云天池Python训练营 本节主要介绍python中的数据分析方法,结合之前的学习内容,对于宝可梦精灵中的各种精灵数据进行分析,找寻其中的最强精灵.   一.数据分析实战 1. 数据集下载 !wg ...

  3. 阿里云天池 Python训练营Task3: Python基础进阶:从函数到高级魔法方法 学习笔记

    本学习笔记为阿里云天池龙珠计划Python训练营的学习内容,学习链接为:https://tianchi.aliyun.com/specials/promotion/aicamppython?spm=5 ...

  4. 阿里云天池 Python训练营Task2: Python基础练习:数据结构大汇总 学习笔记

    本学习笔记为阿里云天池龙珠计划Python训练营的学习内容,学习链接为:https://tianchi.aliyun.com/specials/promotion/aicamppython?spm=5 ...

  5. 阿里云天池Python训练营任务一

    变量.运算符与数据类型 注释 运算符 变量和赋值 数据类型与转换 print() 函数 位运算 原码.反码和补码 按位非操作 ~ 按位与操作 & 按位或操作 | 按位异或操作 ^ 按位左移操作 ...

  6. 阿里云天池 Python训练营Task4: Python数据分析:从0完成一个数据分析实战 学习笔记

    本学习笔记为阿里云天池龙珠计划Python训练营的学习内容,学习链接为:https://tianchi.aliyun.com/specials/promotion/aicamppython?spm=5 ...

  7. 阿里云天池 Python训练营Task5:Python训练营测试 学习笔记

    一.学习知识点概要 本次是Python训练营的测试,在45分钟内完成25题,满分100分及格80分.题目主要考察Task1到Task3里面的Python基础知识.在我随到的25道题里,知识点有: 变量 ...

  8. 阿里云天池Python训练营(第8天)

    宝可梦数据分析-平民最强宝可梦选择方案 数据集下载 !wget -O pokemon_data.csv https://pai-public-data.oss-cn-beijing.aliyuncs. ...

  9. 阿里云天池SQL训练营学习记录

    SQL训练营任务 打卡目录 SQL训练营任务 前言 一.Task01打卡 二.Task02打卡 三.Task03打卡 总结 一.算术函数 二.字符串函数 三.日期函数 四.转换函数 五.LIKE谓词 ...

最新文章

  1. MySQL-自定义函数
  2. 为衣服添加NFC功能:挥下袖子就能安全支付,打开车门坐进去就能启动汽车|Nature子刊...
  3. sklearn adaboost_集成学习-从零推导和实现adaboost与3D可视化
  4. 2017二级c语言选择题,2017年9月计算机二级C语言考试选择题
  5. 九.激光SLAM框架学习之LeGO-LOAM框架---速腾Robosense-16线雷达室外建图和其他框架对比、录包和保存数据
  6. ubuntu下安装pythoncharm_Ubuntu下安装、激活并配置Pycharm
  7. JAVA重要基础之反射
  8. 列文伯格-马夸尔特拟合算法(Levenberg Marquardt Fitting)的C#实现
  9. python报错记录No.1
  10. python键值对是什么意思_python键值对
  11. 手机上万里挑一的CAD看图软件,好用到颠覆你的世界观!
  12. html比赛项目,趣味运动会项目
  13. 小学生可以学java编程吗_小学生学编程都要学习哪些内容 家长们知道吗
  14. 分布式动态路由的实现
  15. VUE常用问题hack修改
  16. 如何用C#+WinRAR 实现压缩
  17. URI中有关@符号的一些猥琐idea
  18. E-puck机器人-小白学习笔记(二)代码浅解读
  19. vue过滤器使用方法
  20. TIFS_2013_Empirical Evaluation and New Design for Fighting Evolving Twitter Spammers

热门文章

  1. 单例模式的七种实现方法(java版)
  2. C ++ STL中的set :: upper_bound()函数
  3. Java——网络编程练习
  4. 32接上拉5v_51单片机P0口上拉电阻的选择
  5. 缓冲文件系统(fopen/fread/fwrite)和非缓冲文件系统(open/read/write)
  6. linux操作系统之线程同步及互斥量
  7. linux信号学习02
  8. C++ STL 容器之queue
  9. Bellman-Ford算法和SPFA算法
  10. #if/#else/#endif