Python是一种通用编程语言,其在和学计算和机器学习领域具有广泛的应用。发果我们打算利用Python来执行机器学习,那么对Python有一些基本的了解就是至关重要的。本Python入门系列体验就是为这样的初学者精心准备的。
本实验包括以下内容:
#后的内容是对代码的注释
例单行注释
#这是一个注释
print('Hellow world')
例:多行注释 ''' 注释内容''' 或者 """注释内容“”“
'''
这是多行注释内容
这是多行注释内容
这是多行注释内容
'''
print(“Hello”)
算术运算符
操作符 |
名称 |
示例 |
+ |
加 |
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
注意:
运算符的优先级
大致:单目,算术,位,关系,逻辑,不背诵,使用时查文档
变量在使用前,必须要赋值
变量名命名可由字母、数字、下划线组合,但变量名不能以数字头
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) #欢迎
类型 |
名称 |
示例 |
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
????没完成
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语句。
语法格式:
if expression1:
expr1_true_suite
elif expression2:
expr2_true_suite
.
.
elif expressionN:
exprN_true_suite
else:
expr_false_suite
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
这里要注意写程序时条件判断的冗余。
Assert 称之为“断言”,当这个关键词后边的条件为False时,程序自动崩溃并抛出AssertionError的异常。
例:在进行单元测试时,可以用来在程序中置入检查点,只有条件为 True 才能让程序正常工作。
assert 7 > 3 #这个条件满足时才执行
print('1')
print('2')
# 1 2
##修改为以下面的代码
assert 7 > 9 #这个条件满足时才执行
print('1')
print('2') #程序给出异常AssertionError
#在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,'是一个质数')
格式: range([start,] stop[, step=1])
Built-in function 有三个参数,其中用中括号括起来的两个表示可选.
step:是默认步长.
Range: 生成从[start stop)的数值序列
格式: 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!
中断循环执行
例:
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("游戏结束了")
continue终止本轮循环并开始下一轮循环。
#如筛选出1-10中的奇数
for i in range(10):
if i%2!=0:
print(i)
continue
pass 语句的意思是“不做任何事”,如果你在需要有语句的地方不写任何语句,那么解释器会提示出错,而 pass 语句就是用来解决这些问题的。
在编写程序时,可以用pass语句来替代还未完成的代码
def a_func():
# 不写pass 会出错 SyntaxError: unexpected EOF while parsing
#改写在加上pass的空函数
def a_func():
pass
#pass是空语句,不做任何操作,只起到占位的作用,其作用是为了保持程序结构的完整性。尽管pass语句不做任何操作,但如果暂时不确定要在一个位置放上什么样的代码,可以先放置一个pass语句,让代码可以正常运行
列表推导式:利用列表,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) #这里会出错,#怎么解释???
修改为:
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) #
#修改为
print (next(e)) #0 解释:next()得到迭代器中的一项,指针指向下一项
print(next(e)) #1
#下方采用迭代器将e中的数据全部读出
for each in e:
print(each,end='')
'''
输出结果为
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
异常就是运行期检测到的错误。计算机语言针对可能出现的错定义了异常类型,某种错误引发对应的异常时,异常处理程序将被启动,从而恢复程序的正常运行。
Python异常体系的内部关系如图所示
语法:
Try:
检测范围
Except Exception[as reason]:
出现异常后的处理代码
工作步骤:
#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'
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'
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语句,会引发语法错误。
Python 使用raise语句抛出一个指定的异常。
try:
raise NameError('HiThere')
except NameError:
print('An exception flew by!')
#An exception flew by !