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

本学习笔记为阿里云天池龙珠计划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。取该整数的绝对值的二进制,再加上符号位。原码只是为了让我们看二进制更直观,直接看出正负数和比较大小。但原码不是计算机保存的二进制,所以不能直接参与计算。例:
  • 整数绝对值绝对值的二进制值原码
    55000010100000101
    -55000010110000101
  • 反码:反码主要是针对负数的处理,非负数的反码就是原码。在原码的基础上,符号位不变,其他数值位取反,即把1变成0,把0变成1。反码是为了在计算机中存储二进制,但非真正的二进制值,所以也不直接参与计算。例如:
  • 整数绝对值原码反码
    550000010100000101
    -551000010111111010
  • 补码:补码主要也是针对负数。非负数不变,而负数是在反码的基础上加1。
  • 整数绝对值反码补码
    550000010100000101
    -551111101011111011

2.按位运算

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

运算符&|^~>><<
表达式5&35|35^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来表示这个整数在不在集合里,然后那些运算也就能看明白了。

四、学习思考与总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/387413.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python回收机制

目录 Python的垃圾回收机制引子:一、什么是垃圾回收机制&#xff1f;二、为什么要用垃圾回收机制&#xff1f;三、垃圾回收机制原理分析1、什么是引用计数&#xff1f;2、引用计数扩展阅读&#xff1f;&#xff08;折叠&#xff09;Python的垃圾回收机制 引子: 我们定义变量会申…

安装openssl-devel命令

centos&#xff1a; yum install openssl-devel ubuntu&#xff1a; sudo apt-get install openssl sudo apt-get install libssl-dev

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

本学习笔记为阿里云天池龙珠计划Python训练营的学习内容&#xff0c;学习链接为&#xff1a;https://tianchi.aliyun.com/specials/promotion/aicamppython?spm5176.22758685.J_6770933040.1.6f103da1tESyzu 目录 一、学习知识点概要 二、学习内容 I.列表&#xff08;list…

windows文件与Linux文件互转

使用命令 unix2dos filename dos2unix filename

1G.小a的排列(C++)

小a的排列&#xff08;C&#xff09; 点击做题网站链接 题目描述 小a有一个长度为n的排列。定义一段区间是"萌"的&#xff0c;当且仅当把区间中各个数排序后相邻元素的差为1现在他想知道包含数x,y的长度最小的"萌"区间的左右端点 也就是说&#xff0c;我们…

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

本学习笔记为阿里云天池龙珠计划Python训练营的学习内容&#xff0c;学习链接为&#xff1a;https://tianchi.aliyun.com/specials/promotion/aicamppython?spm5176.22758685.J_6770933040.1.6f103da1tESyzu 目录 一、学习知识点概要 二、学习内容 I.函数 1.定义自己的函…

C# 获取句柄程序

这个小程序需要用到系统API&#xff0c;也就是需要用到user32中的三个函数。 第一个&#xff1a;WindowFromPoint 返回一个窗口句柄 第二个&#xff1a;GetWindowText 获取窗口标题 第三个&#xff1a;GetClassName 获取类名 当然&#xff0c;最重要的一点就是要引用命名空间…

HBase安装配置

HBase的安装配置&#xff1a; 4台主机&#xff1a;hdp0 hdp1 hdp2 hdp3 hdp0 hdp1 跑HMaster hdp2 hdp3 跑HRegionServer 将HBase解压之后 1、确保安装ZooKeeper&#xff1b; 2、修改hbase-env.sh export JAVA_HOME/.../jdk export HBASE_MANAGES_ZKfalse //使用外部的…

python cook读书笔记第2章字符串和文本

使用多个界定符分割字符串 line asdf fjdk; afed, fjek,asdf, fooimport re# line re.split(r[;,\s]\s*,line)# print(line)# [asdf, fjdk, afed, fjek, asdf, foo]"""当你使用 re.split() 函数时候&#xff0c;需要特别注意的是正则表达式中是否包含一个括号…

centos7安装oracle12c 一

本文 基本参考了下面这篇文章http://blog.csdn.net/gq5251/article/details/42004035 和http://www.linuxidc.com/Linux/2017-08/146528.htm 但是改正了一些错误操作系统:CentOS Linux release 7.2.1511 (Core) oracle: oarcle (12.1.0.2.0) - Standard Edition (SE2)几点要注…

Bigtable的些许重点

分布式数据库系统 针对于海量数据&#xff0c;可扩展&#xff0c;高吞吐量&#xff0c;低时延 不支持关系模型 通过row和column进行索引&#xff0c;row和column可以是任意字符串 所存储的数据也是字符串 Bigtable是一个map&#xff0c;value是array of bytes&#xff0c;通…

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

本学习笔记为阿里云天池龙珠计划Python训练营的学习内容&#xff0c;学习链接为&#xff1a;https://tianchi.aliyun.com/specials/promotion/aicamppython?spm5176.22758685.J_6770933040.1.6f103da1tESyzu 一、学习知识点概要 本次主要通过阿里云天池的赛题【Python入门系…

JMETER从JSON响应中提取数据

如果你在这里&#xff0c;可能是因为你需要使用JMeter从Json响应中提取变量。 好消息&#xff01;您正在掌握掌握JMeter Json Extractor的权威指南。作为Rest API测试指南的补充&#xff0c;您将学习掌握Json Path Expressions 所需的一切。 我们走吧&#xff01;并且不要惊慌&…

centos7安装oracle12c 二

环境&#xff1a;CentOS7VMware12&#xff0c;分配资源&#xff1a;CPU&#xff1a;2颗&#xff0c;内存&#xff1a;4GB&#xff0c;硬盘空间&#xff1a;30GB Oracle 12C企业版64位 下载地址&#xff1a;http://www.oracle.com/technetwork/database/enterprise-edition/down…

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

一、学习知识点概要 本次是Python训练营的测试&#xff0c;在45分钟内完成25题&#xff0c;满分100分及格80分。题目主要考察Task1到Task3里面的Python基础知识。在我随到的25道题里&#xff0c;知识点有&#xff1a; 变量&#xff08;包括数据类型和容器类型&#xff09;运算…

centos7安装oracle12c 三

场景描述&#xff1a;我在自己电脑的虚拟机上linux环境下安装oracle11g数据库。 Linux版本为&#xff1a;CentOS release 6.8 (Final)&#xff0c;Oracle版本为&#xff1a;linux.x64_11gR2 问题描述&#xff1a;在oracle安装到Prerequisite Checks这一步的时候&#xff0c;出现…

mysql删除一条记录

mysql如何删除一条记录delete from 表名 where 条件实例&#xff1a;use db1delete from tb1 where id 1; 转载于:https://www.cnblogs.com/effortsing/p/10393229.html

HBase体系结构

HBase HBase是Apache Hadoop的数据库&#xff0c;基于HDFS文件系统 random,realtime read/write access to Big Data 开源、分布式、可扩展、面向列 larger tables--billions of rows X millions of columns 不支持表链接操作 不支持事务处理 HBase存储的数据从逻辑上来…

《属性数据分析引论》 部分课后习题R语言实践(第三章、第四章)

目录 前言 第三章 广义线性模型 习题3.18 a小题 b小题 c小题 d小题 习题3.19 a小题 b小题 c小题 第四章 Logistic回归 习题4.1 a小题 b小题 c小题 d小题 e小题 习题4.2 a小题 b小题 c小题 d小题 小结 前言 习题选自高等教育出版社译制&#xff0c;Alan A…

Linux下SVN搭建

在Linux系统中搭建svn服务所需要用到的软件叫做subversion&#xff0c;可以通过yum来进行安装&#xff0c;如图 安装好软件后第一件事就是创建一个仓库目录 [rootserver1 ~]# mkdir /svn 使用svn自带命令建立仓库 [rootserver1 ~]# svnadmin create /svn 进入该仓库&#xff0c…