天池龙珠训练营Python_Task1:从变量到异常处理

1.简介

Python是一种通用编程语言,其在和学计算和机器学习领域具有广泛的应用。发果我们打算利用Python来执行机器学习,那么对Python有一些基本的了解就是至关重要的。本Python入门系列体验就是为这样的初学者精心准备的。

本实验包括以下内容:

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

  • 1.注释
  • 2.运算符
  • 3.变量和赋值
  • 4.数据类型与转换
  • 5.print() 函数

3.位运算

  • 1.原码、反码和补码
  • 2.按位非操作 ~
  • 3.按位与操作 &
  • 4.按位或操作 |
  • 5.按位异或操作 ^
  • 按位左移操作 <<
  • 按位右移操作 >>
  • 利用位运算实现快速计算
  • 利用位运算实现整数集合

4.条件语句

  • 1.if 语句
  • 2.if - else 语句
  • 3.if - elif - else 语句
  • 4.assert 关键词

5.循环语句

  • while 循环
  • while - else 循环
  • for 循环
  • for - else 循环
  • range() 函数
  • enumerate()函数
  • break 语句
  • continue 语句
  • pass 语句
  • 推导式

6.异常处理

  • Python 标准异常总结
  • Python 标准警告总结
  • try - except 语句
  • try - except - finally 语句
  • try - except - else 语句
  • raise语句


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

1.注释

#后的内容是对代码的注释

例单行注释

 

#这是一个注释

print('Hellow world')

例:多行注释 ''' 注释内容''' 或者 """注释内容“”“

 

'''

这是多行注释内容

这是多行注释内容

这是多行注释内容

'''

print(“Hello”)

2. 运算符

算术运算符

操作符

名称

示例

+

1+1

-

2-1

*

3*4

/

3/4

//

整除(地板除)

3//4

%

取余

3%4

**

2**3

运算示例

print(1 + 1) # 2

print(2 - 1) # 1

print(3 * 4) # 12

print(3 / 4) # 0.75

print(3 // 4) # 0

print(3 % 4) # 3

print(2 ** 3) # 8

比较运算符:运算结果只有True, False 两个值

操作符

名称

示例

>

大于

2>1

>=

大于等于

2>=4

<

小于

1<2

<=

小于等于

5<=4

==/

等于

3==4

!=

**

不等于

3​!=5

关系运算示例

print(2 > 1) # True

print(2 >= 4) # False

print(1 < 2) # True

print(5 <= 2) # False

print(3 == 4) # False

print(3 != 5) # True

逻辑运算符:

操作符

名称

示例

And

(3>2)and (3<5)

or

(1>3) or (9<2)

not

not(2>1)

位运算符:

操作符

名称

示例

~

按位取反

~4

&

按位与

4&5

|

按位或

|

^

按位异或

4^5

<<

左移

4<<2

>>

右移

4>>2

运算示例 :

print(bin(4)) # 0b100

print(bin(5)) # 0b101

print(bin(~4), ~4) # -0b101 -5

print(bin(4 & 5), 4 & 5) # 0b100 4

print(bin(4 | 5), 4 | 5) # 0b101 5

print(bin(4 ^ 5), 4 ^ 5) # 0b1 1

print(bin(4 << 2), 4 << 2) # 0b10000 16

print(bin(4 >> 2), 4 >> 2) # 0b1 1

三元运算符

x,y=4,5 

If x

small=x

Else:

small=y

print(small)

4

使用三元运算符,可以用一条语句来完成以上条件判断和赋值操作

 

x,y=4,5

small=x if x

print(small)

其他运算符

运算符

名称

示例

In

存在

'A' in ['A','B','C']

Not in

不存在

'h' not in ['A','B','C']

Is

"hellow" is "hello"

Not is

不是

"hello" is not "hello"

 

letters=['A','B','C']

if 'A' in letters:

print('A'+'exists')

if 'h' in letters:

print('h'+' not exists')

示例:比较两个变量均指向不可变类型

 

a​="hello"

b="hello"

print(a is b ,a ==b) # True True

print(a is not b, a !=b) # False Flase

示例:比较两个变量均指向可变类型

 

a=["hello"]

b=["hello"]

print(a is b, a==b) #False True

print(a is not b, a !=b)# True False

注意:

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

运算符的优先级

大致:单目,算术,位,关系,逻辑,不背诵,使用时查文档

3变量和赋值

变量在使用前,必须要赋值

变量名命名可由字母、数字、下划线组合,但变量名不能以数字头

Python变量名的大小写敏感,foo 与Foo 是两个不同的变量

示例 :

 

tea="毛峰"

print(tea)

num1=56

num2=32

num3=num1+num2

print(num3)

s1="小明学编程"

s2="小琴学编程"

wes=s1+','+s1

pirnt(wes) #小明学编程,小琴学编程

set_1={"爱上","Python","编程"}

print(set_1.pop) #欢迎

4.数据类型与转换

类型

名称

示例

Int

整型

895

Float

浮点型

3.01445

bool

布尔型

True,False

整型

 

a=1031

print(a,type(a))

通过print可看出a的值,以及类 (class) 是int。Python 里面万物皆对象(object),整型也不例外,只要是对象,就有相应的属性(attributes)和方法(methods)

 

b=dir(int)

print(b) #把整型对象的属性与方法全部打印出来。

例:找出一个整数的二进制表示,并返回其长度。

 

a=1030

print(bin(a)) #00b100000001111

print (a.bin_length()) #11 这里使用bin_length()这一方法

 

#查看浮点型数据类型

print(1,type(2.33))

#2.33

例:使用decimal包中的Decimal对象和getcontext()方法来实现。

 

import decimal

from deciaml import Decimal

????没完成

3.位运算

1.原码、反码和补码

2.按位运算

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

4.利用位运算实现整数集合

4.条件语句

1.if 语句 (是执行还是不执行)

格式

 

if expression:

expr_true_suite

只有expression的值 为true时,expr_true_suite才会被执行,否则将继续执行紧跟在该代码块后面的语句。

expresion可以由布尔操作,and ,or 和not 实现多重条件判断的表达式。

 

#例

if 2>1 and not 2 >3:

print('Correct Judgement!') #输出Correrct Judgement!

2.if - else 语句(二选一执行)

语法格式:

 

if expression:

expr_true_suite

else:

expr_false_suite

Expression值为真,执行expr_true_suite,否则为假,执行expr_false_suite .

 

temp=input("猜猜小姐姐想的是哪个数字?")

guess=int(temp) #input 的返回数据类型为str,这里做数据类型的转换

if guess==666:

print("你太了解小姐姐的心思了!")

else:

print("铺错了,现在心里想的是666!")

print("游戏结束,不玩儿啦!")

if与else 后面的代码,只能二选一个执行,选谁执行,由if 后的表达式值是true还是false 来决定.

If-else 的选择结构可以进行嵌套,可以在if-else各自后面的语句又可是if 或 if-else语句,从而构成多层次的选择控制执行结构。

例:

 

hi=6

if hi>2:

if hi>7:

print("好棒!好棒!")

else:

print("切~") #无输出

例:

 

temp=input("猜猜小姐姐想的是哪个数字?")

guess=int(temp) #input 的返回数据类型为str,这里做数据类型的转换

if guess>8:

print("大了,大了")

else:

if guess==8:

print("你太了解小姐姐的心思了!")

print("猜对了也没奖励!")

else:

print("铺错了,现在心里想的是666!")

print("游戏结束,不玩儿啦!")

#这里:外层的if-else 语句的else控制的子句嵌入了一个if-elsey语句。

3.if -elif -else 语句

语法格式:

 

if expression1:

expr1_true_suite

elif expression2:

expr2_true_suite

.

.

elif expressionN:

exprN_true_suite

else:

expr_false_suite

  • elif 语句即为 else if,用来检查多个表达式是否为真,并在为真时执行特定代码块中的代码。
 

temp = input('请输入成绩:')

source = int(temp)

if 100 >= source >= 90:

print('A')

elif 90 > source >= 80:

print('B')

elif 80 > source >= 60:

print('C')

elif 60 > source >= 0:

print('D')

else:

print('输入错误!')

输入成绩:99

A

这里要注意写程序时条件判断的冗余。

4.assert 关键词

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

例:在进行单元测试时,可以用来在程序中置入检查点,只有条件为 True 才能让程序正常工作。

 

assert 7 > 3 #这个条件满足时才执行

print('1')

print('2')

# 1 2

##修改为以下面的代码

assert 7 > 9 #这个条件满足时才执行

print('1')

print('2') #程序给出异常AssertionError

5.循环语句

1.while 循环

2.while -else 循环

3.for 循环

4.for -else 循环

#在java与C中没看到for-else 函数

格式:

for 迭代变量 in 可迭代对象:

代码块

   else:

 代码块

例:列10-20之间合数与质数。对于合数定出其因数的乘积。

 

for num in range(10,20):

for i in range(2,num):

if num%i==0: #确定第一个因子

j=num/i #计算第二个因子

print('%d 等于%d *%d ' %(num,i,j)

else: #循环else部分

print(num,'是一个质数')

5.range()函数

格式: range([start,] stop[, step=1])

Built-in function 有三个参数,其中用中括号括起来的两个表示可选.

step:是默认步长.

Range: 生成从[start stop)的数值序列

6.enumerate ()函数

格式: enumrate(sequece,[start=0])

Sequence: 一个序列、迭代器或其他支持迭代对象

Start: 下标起始位置

返回enumearte(枚举)对象

例:enumerate (seasons)返回了 seasons列表中的所有元素,和元素相应的索引值(从0开始)。

 

seasons=['Spring','Summer','Fall','Winter']

lst=list(enumerate(seasons)) #用enumerate()函数获得列表中的元素

print(lst)

lst=list(enumerate(seasons, start=1)) #使用enumerate函数获得列表中的元素,并且设置起始值为1

print(lst)

例:enumerate ()与for 一起使用

格式:for i a in enumerate (A)

do something with a

例如:字符串组合

 

#第一种方式用for 循环

languages=['Python', 'R', 'Matlab', 'C++']

for language in languages:

print('I love',language)

print('Done!')

#第二种方用 enumerate()函数来完成。.

languages=['Python', 'R', 'Matlab', 'C++']

for language in enumerate(languages):

#用下面的这种方式也可以

#for i,language in enumerate(languages,2): #2的解释

print("I love",language)

I love Python

I love R

I love Matlab

I love C++

Done!

2 I love Python

3 I love R

4 I love Matlab

5 I love C++

Done!


7.break语句

中断循环执行

例:

 

import random

secret=random.randit(1,10) #[1,10]之间的随机数

while True:

temp=input("猜一猜 小姐姐想的是哪个数字?")

guess=int(temp)

if guess>secret:

print("大了")

else:

if guess==screet:

print("你猜中了")

print("猜对也没有奖励!")

break

else:

print("小了")

print("游戏结束了")

8.Continue 语句

continue终止本轮循环并开始下一轮循环。

 

#如筛选出1-10中的奇数

for i in range(10):

if i%2!=0:

print(i)

continue

9.pass语句

pass 语句的意思是“不做任何事”,如果你在需要有语句的地方不写任何语句,那么解释器会提示出错,而 pass 语句就是用来解决这些问题的。

在编写程序时,可以用pass语句来替代还未完成的代码

 

def a_func():

# 不写pass 会出错 SyntaxError: unexpected EOF while parsing

#改写在加上pass的空函数

def a_func():

pass

#pass是空语句,不做任何操作,只起到占位的作用,其作用是为了保持程序结构的完整性。尽管pass语句不做任何操作,但如果暂时不确定要在一个位置放上什么样的代码,可以先放置一个pass语句,让代码可以正常运行

10.推导式

列表推导式:利用列表,for , if-else,in 语句组合在推导式解决复杂问题

格式:[ expr for value in collection [if condition] ]

例:计算X列表中的元素,全部*2 构成y列表

 

x=[-4,-2,0,2,4]

y=[a*2 for a in x] #X列表中的元素,全部*2 构成y列表

print(y)

[-8, -4, 0, 4, 8]

例:计算1-9 每个整数的平方

 

x=[i**2 for i in range(1,10)] #1-9 每个整数的平方

print(x)

[1, 4, 9, 16, 25, 36, 49, 64, 81]

例:1-100中除的通3,但除不通2的数

 

x=[i for i in range(100) if (i%2)!=0 and (i%3)==0]

print(x)

#[3, 9, 15, 21, 27, 33, 39, 45, 51, 57, 63, 69, 75, 81, 87, 93, 99]

例:形成数对列表(x,y) x in (0,3),y in (0,3),对两个变量进行了范围说明分别是

for i in range(0,3)

for j in range(0,3)

 

a=[(i,j) for i in range(0,3) for j in range(0,3)]

print(a)

[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

例 :类似,得到元素为列表的列表

 

a=[[i,j] for i in range(0,3) for j in range(0,3)]

print(a)

#[[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]]

例:对参数进行大小限定,其中i<1, j>1。两个参数进行限定范围,并加上条件筛选。

 

a=[(i,j) for i in range(0,3) if i<1 for j in range(0,3) if j>1]

print(a)

#a=[(i,j) for i in range(0,3) if i<1 for j in range(0,3) if j>1]

print(a)

元组推导式

格式:(expr for value in collection [if condition])

例:

 

a=(x for x in range(10)) #得到0-9之间的整数构成的元组

print(a) #这里会出错,#怎么解释???

at 0x000002D23AAB2938>

修改为:

 

a=(x for x in range(10))

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]}

#c={i: for i in [1,2,3,4,5,5,6,4,3,2,1]} 也可以

print(c)

#{1, 2, 3, 4, 5, 6}

其它

next ( iterator [ , default ] ) Return the next item from the iterator. If default is given

And the iterator is exhausted, it is returned instead of raising StopIteration.

返回迭代器中下一项,默认返回迭代器中所有项,

 

e=(i for i in range(10)) #这里是推导式建立了一个元组print(tuple(e))可以将数据全部输出

print(e) # at 0x000002D23AA6F468>

#修改为

print (next(e)) #0 解释:next()得到迭代器中的一项,指针指向下一项

print(next(e)) #1

#下方采用迭代器将e中的数据全部读出

for each in e:

print(each,end='')

'''

输出结果为

at 0x000002D23A667BF8>

0

1

23456789

'''

例:求一个列表的和,分别以列表和元素的行式用推导式实现

 

s = sum([i for i in range(101)])

print(s) # 5050

s = sum((i for i in range(101)))

print(s) # 5050

6.异常处理

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

1.Python 标准异常总结

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

Python异常体系的内部关系如图所示

 

2.位运算标准警告总结

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

3.try-except 语句

语法:

Try:

检测范围

Except Exception[as reason]:

出现异常后的处理代码

工作步骤:

  • 首先,执行try子句(try 与except之间的代码)
  • 如果没有异常发生,忽略except子句,try 子句执行后结束。
  • 如try后检测的代码发生异常,那么这部分语句将被忽略 。而且如异常类型和except之后的名称相符,那么except后的子句将被执行。
  • 如果一个异常没有任何一个except匹配 ,那么这个异常将会传递给上层的try中。 ????
 

#1-打开文件出错

try:

f=open('test.text')

print(f.read())

f.close()

excpet OSError:

print('打开文件出错')

# 运行结果

# 打开文件出错

# 原因是:[Errno 2] No such file or directory: 'test.txt'

 

#2-给出具体的出错描述

try:

f=open('test.text')

print(f.read())

f.close()

excpet OSError as error:

print('打开文件出错的原因是: '+str(error)) #将错误描述输出

# 运行结果

# 打开文件出错的原因是:[Errno 2] No such file or directory: 'test.txt'

#例2-try语句包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支被执行。

 

try:

int("abc")

s=1+'1'

f=open('text.txt')

print(f.read())

f.close()

except OSError as error:

print('打开文件出错\n原因是:'+str(error))

except TypeError as error:

print('类型出错\n原因是:'+str(error))

except ValueError as error:

print('数值出错\n原因是:'+str(error))

# 数值出错

# 原因是:invalid literal for int() with base 10: 'abc'

 

dict1={'a':1,'b':2,'v':22}

try:

x=dict1['y'] #在字典中是没有该项,出现查询错误

except LookupError:

print('查询错误')

except KeyError:

print('键错误')

else:

print(x)

#查询错误

Try-except-else 语句尝试在查询不存于dict中的键值对,会引发异常。该异常称为KeyError。 因为keyError是 LookupError的子类,且LookupError置于keyError之前【?】,所以程序优先执行该except代码块。所以,使用多个except代码块时,必须坚持对其进行规范排序,要从最针对性的异常到最通用的异常。

 

dict={'a':1,'b':2,'v':22}

try:

x=dict1['y']

except KeyError: #针对性的在前

print('键错误 ')

except LookupError:

print('键错误 ')

else:

print(x)

#运行:键错误

例:一个 except子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组。

 

try:

S=1+'1'

int("abc")

f=open('test.txt')

print(f.read())

f.close()

except(OSError, TypeError,ValueError) as error: #多个异常同时处理

print('出错了!\n原因是:'+str(error))

#出错了!

#原因是:unsupported operand type(s) for +:'int' and 'str'

4.try_except -finally语句

try:

检测范围

Except Exception [as reason]:出现异常后的处理代码

finally:无论如何都会被执行的代码

不管try子句里面有没有发生异常,finally 子句都会执行.

例:如果一个异常在try子句里被抛出,而又没有任何的except把它截住,那么这个异常会在finally 子句执行后被抛出。

 

def divide(x, y):

try:

result = x / y

print("result is", result)

except ZeroDivisionError:

print("division by zero!")

finally:

print("executing finally clause")

divide(2, 1)

# result is 2.0

# executing finally clause

divide(2, 0)

# division by zero!

# executing finally clause

divide("2", "1")

# executing finally clause

# TypeError: unsupported operand type(s) for /: 'str' and 'str'

5.try-except-else语句

try检测的子句没有发生异常,Python将执行elsey语句后的语句

 

try:

检测范围

except: #这里没有任何异常类型,不是一个很好的方式,不能识别出具体异常信息,因为将捕获所有的异常。

出现异常后的处理代码

else:

如果没有异常执行这块代码

try:

检测范围

except(Exception1[, Exception2[,...ExceptionN]]]):

发生以上多个异常中的一个,执行这块代码

else:

如果没有异常执行这块代码

例:

 

try:

fh = open("testfile.txt","w")

fh.write("这是一个测试文件,用于测试异常!!")

except IOError:

print("Error:没有找到文件或读取文件失败")

else:

print("内容写入文件成功")

fh.close()

#

注意:else语句的存在必须以except语句的存在为前提,在没有except语句的try语句中使用else语句,会引发语法错误。

6.Raise 语句

Python 使用raise语句抛出一个指定的异常。

 

try:

raise NameError('HiThere')

except NameError:

print('An exception flew by!')

#An exception flew by !

你可能感兴趣的:(Ali训练营,python,编程语言)