博主学习过C语言和C++,在学校寒假期间第一次接触python,利用书写博客,来整理当天所学,方便后期的复习和回顾,在这个过程中会不断的进行学习和补充
以下文章根据博主在中国大学MOOC上的陈斌教授的网课学习整理
————————————————————————————————————————
if x>3:
return x
return y
在if控制的条件下,仅有‘return x’的条件存在,而return y 并不在if控制的范围之内。因此可知在python中,语句的缩进有着至关重要的作用。
pycharm相对于python2,3而言更利于开发使用,因此在已经安装python2或者python3的情况下,可以安装pycharm更利于学习和使用。
以下是pycharm在使用时的注意事项:
print("HELLO WORLD")
python语言是一种最热门的大数据分析处理语言
整数int、浮点数float、复数complex、逻辑值bool,字符串str
各种类型简介 int表示的是整数类型 它不再像C,C++中分为long、short和int,在python中只有一个整数类型int;同浮点数也不再区分double和float,只有一个float类型;复数complex多用于数学中的复杂运算;逻辑值bool型,仅有两种情况即逻辑真和逻辑假;str就是字符串类型,当然也可以包含一个字符的情况。
不管是哪一种类型,在表示变量类型意义的同时,里面也封装了很多相关的函数,比如字符串型就可以用 type(str)来检验
不限制大小,无论多复杂的算是都可以直接得到结果
PS:两个int型相除 就会直接转换为float
以及大小比较,连续比较判断
代码
7>3>=3
TURE
12<23<22
FLASE
最常用的是二进制八进制和十六进制来表示整数,使用时只要加一个前缀用以标识几进制即可
print(hex(33))#十六进制
print(oct(33))#八进制
print(bin(33))#二进制
#输出结果
0x21
0o41
0b100001
print(eval(input()))
科学计数法
进制转换导致精度误差。因为这个特点 会导致误差的产生,因此判断的是皇后尽量避免相等的判断,只要小于一个很小的误差即可。因此浮点数再也不能用等号来判断,例如两个浮点数A和B,A-B==0就不对了,我们要将它改成A-B<=10^-17就表示两个浮点数相等 。
python内置复数数据类型
支持所有常见运算
复数之间只能比较是都相等。复数相当于平面上的两个点,只能判断位置是否相等
圆周率Π,自然对数的底e等
三角函数、对数,最大公约数,最小公倍数等
专门面向复数计算
math模块中的数学函数用于计算整数和浮点数,对于复数就无能为力了
平面直角坐标和极坐标之间的转换
import cmath
cmath.polar(1+1j)#将直角坐标转换为极坐标
(1.4142135623730951, 0.7853981633974483)
cmath.rect(1,cmath.pi/2)#把用极坐标方式表示的转换为平面直角坐标
(6.123233995736766e-17+1j)
import math
dir(math)#运行可以查看math中存在的函数
非真即假的二值逻辑,逻辑值仅仅包括真(True)/假(Flase)两个,布尔型本质上也是int类型,可以通过强制转换转换成int
配合if/while等语句做条件判断
包括与运算(and),或运算(or),非运算(not)
定义:即为否定操作否定,not连接一个真值,非真即假非假即真,且not要写在值的前面
字符串就是把一个个文字的字符“串起来”的数据。文字字符包括有拉丁字母、数字、标点符号、特殊符号、以及各种语言文字字符,其实发展到现在中文等语言也可以作为字符串中的字符。
"sbwgguwgduwhdhwud"
'sbagscagcjhacgacc'
#两种字符串表示形式都可以
'''
ncjabcjabcjhabjcajbc
cnasjkbcjabjkcbakjbc
cdajbcjabcj
'''#多行字符串表示形式,三个连续的单引号或者双引号都可以
那假如字符串中单引号和双引号同时存在呢?
这就引入了新的问题 特殊字符用转移符号“\”表示
如果字符串中本身就存在反斜杠呢? 那么就用两个反斜杠代表字符串中的一个反斜杠
a='cdbscbebchbchb'
print(a[0])
print(a[1])
print(a[-1])
print(a[-2])
#输出结果
c
d
b
h
height=8848
mt=everest="珠穆朗玛峰"#可以传递赋值!
#一个数据对象可以挂好几个标签,而一个标签只能挂在一个数据上
print(type(height))
<class 'int'>
print(type(mt))
<class 'str'>
len函数
a='sjnjscbj'
print(a.__len__())
关于下划线:一个简单的字符a都有很多的方法支撑,引用方法时,前面有两个下划线,代表是系统中自带的方法。前面有一个表示是自己定义不愿意给别人用的。自己定义的不加下划线。
s[start:end:step] start和end就是我们刚刚说的位置数,整数复数都可以,step就是逐个取值时每次跨过的长度,如果没有step时,它的值就默认为1
且在[start:end]的区间中,实际上它是左闭右开区间,包括start不包括end
a='sjnjscbj'
print(a[::2])
#结果
snsb
利用这种方法还可以进行倒序输出
a='sjnjscbj'
print(a[::-1])
#运行结果
jbcsjnjs
“+”将两个字符串进行连接,得到新的字符串
a='sjnjscbj'
b='bdhebhe'
print(a+b)
#运行结果:sjnjscbjbdhebhe
“*”将字符串重复若干次,生成新的字符串
a='abc'
print(a*2)
#运行结果:abcabc
判断字符串内容是否相等(==)
一个等号是赋值语句,两个等号是左右两边的数值判断,判断结果是true或者false
如果是相同的字符串就返回true,否则就返回false
判断字符串中是否包含某个字符串(in)
既可以判断一个字符,也可以判断多个字符
a='bsdegfewgfjewgfg'
print('h'in a)
print('bs'in a)
False
True
str.strip:去掉字符串前后的所有空格,内部的空格不受影响
str.lstrip:去掉字符串前部(左部)的所有空格
str.rstrip:去掉字符串后部(右部)的所有空格
a=' a b c '
print(a.strip())
print(a.lstrip())
print(a.rstrip())
#运行结果
a b c
a b c
a b c
str.isalpha:判断字符串是否全部由字母构成
str.isdigit:判断字符串是否全部由数字构成
str.isalnum:判断字符串是都仅包含字母和数字,而不包含特殊字符
a='qwe123 '
print(a.isalpha())
print(a.isdigit())
print(a.isalnum())
#运行结果
False
False
False
ord()函数主要用来返回对应字符的ascii码,括号内放的是待转换的字符。
chr()主要用来表示ascii码对应的字符他的输入时数字,可以用十进制,也可以用十六进制,括号内放的是待转换的二进制码数字。
print(ord(' '))
print(chr(97))
#运行结果
32
a
spilt就是按照所给的字符对字符串进行分割,如例子所示,就是按照空格对字符串进行分割
print('YOU ARE MY SUNSHINE.'.split(' '))
['YOU', 'ARE', 'MY', 'SUNSHINE.']#经过split的分割,它就变成了一个列表,包含四个单词
而join就是对split的反操作,就是将所给的列表,将其中的字符用所给的字符进行连接
print('-'.join(["ONE","TWO","THREE"]))
ONE-TWO-THREE
upper 小写变成大写
lower 大写变成小写
swapcase 大小写颠倒
print('abc'.upper())
ABC
print('ABC'.lower())
abc
print('Abc'.swapcase())
aBC
或者可以在一个固定的宽度里,左对齐,右对齐或者居中对齐
print('HELLO WORLD!'.center(20))
#在宽度为20的长度下,字符串居中对齐
HELLO WORLD!
print('Tom smiled, Tom cried, Tom shouted'. replace('Tom','Jane'))
Jane smiled, Jane cried, Jane shouted
其实在python中,序列是字符串中的一种特殊的情况。序列的定义是,能够按照整数顺序排列的数据,由于字符串是按照0123排列的字符,故字符串是序列。
print(int(44.7))
print(bool(1))
print(str(45678))
print(float(9))
#运行结果
44
True
45678
9.0
——————这里是分割线——————其后就是容器型的数据类型———————————
str1="123456"
list1=[11,2.3,5,6,7]#方括号法
tup1=(123,789,2929)
a=list(str1)#指明类型法
b=list(list1)
c=list(tup1)
print(a,b,c)`
列表和元组中保存的各个数据称作元素,类型没有限制
append在后面加上一个数据对象,insert在中间加上,extend是拼接
member = ['小甲鱼', 88, '黑夜', 90, '迷途', 85, '怡静', 90, '秋舞斜阳', 88]
member.append('字符串')
member.extend(('1234'))
member.insert(3,'python')#序号从0开始
print(member)
#运行结果
['小甲鱼', 88, '黑夜', 'python', 90, '迷途', 85, '怡静', 90, '秋舞斜阳', 88, '字符串', '1', '2', '3', '4']
pop指定一个序号,从中间提取出来删除,不带任何序号就是把最后一个移走,
remove就是根据数据对象本身的值来移除的,剩余的对象还是从0开始的排列,但是长度缩减1
clear就是将整个列表变成空列表
pop运行示意
member = ['小甲鱼', 88, '黑夜', 90, '迷途', 85, '怡静', 90, '秋舞斜阳', 88]
member.pop()
print(member)
#运行结果
['小甲鱼', 88, '黑夜', 90, '迷途', 85, '怡静', 90, '秋舞斜阳']
remove运行示意
member = ['小甲鱼', 88, '黑夜', 90, '迷途', 85, '怡静', 90, '秋舞斜阳', 88]
member.remove('小甲鱼')
print(member)
#运行示意
[88, '黑夜', 90, '迷途', 85, '怡静', 90, '秋舞斜阳', 88]
clear运行示意
member = ['小甲鱼', 88, '黑夜', 90, '迷途', 85, '怡静', 90, '秋舞斜阳', 88]
member.clear()
print(member)
#运行结果
[]
reverse:把列表中的数据元素从头到尾反转重新排列
sort:把列表中的数据元素按照大小顺序重新排列
reserved/sorted操作:得到重新排序的列表,而不影响原来的列表0
reverse、sort运行示意
reverse
member = [1,9,0,3,4,5]
member.reverse()
print(member)
#运行结果
[5, 4, 3, 0, 9, 1]
sort
member = [1,9,0,3,4,5]
member.sort()
print(member)
#运行结果
以上是sort的一般操作 更加深入的请结合
https://blog.csdn.net/liudsl/article/details/79980625
https://www.cnblogs.com/huchong/p/8296025.html
reversed
a=[12,34,564,424]
b=reversed(a)
print(a)
print(list(b))
#运行结果
[12, 34, 564, 424]
[424, 564, 34, 12]
请看https://www.jb51.net/article/136728.htm
sorted
a=[12,34,564,424]
b=sorted(a)
print(a)
print(b)
#运行结果
[12, 34, 564, 424]
[12, 34, 424, 564]
加法运算+:连接两个列表/元组
乘法运算*:赋值次,生成新列表/元组
a=[12,34,564,424]
b=[1,2,3]
c=a+b
d=a*2
print(c,d)
#运行结果
[12, 34, 564, 424, 1, 2, 3] [12, 34, 564, 424, 12, 34, 564, 424]
len():列表/元组中元素的个数
a=[12,34,564,424]
print(len(a))
#运行结果
4
s="abcdefghk"
print(s[0]) a
print(s[-1]) k
print(s[2]) c
元组列表操作相同
alist[start: end:step]
atuple[start: end:step]
s="abcdefgh"
print(s[:]) abcdefgh
print(s[0:]) abcdefgh
print(s[0:-1]) abcdefg
print(s[0:-2]) abcdef
print(s[1:3]) bc
print(s[1:4]) bcd
print(s[0:4]) abcd
print(s[0:0]) 空字符
print(s[0:5:2]) ace 步长为2
print(s[4:0:-1]) 从4到0,取倒数值,不顾尾。edcb
print(s[4::-1]) edcba
print(s[-1::-1]) hgfedcba
print(s[:]) abcdefgh
print(s[::-1]) hgfedcba
in操作:判断某刻元素是否在列表/元组中
index:只当的数据在列表/元组的哪一个位置
count操作:指定的数据在列表/元组中出现过几次
in
a=[12,34,564,424]
b= 12 in a
print(b)
#True
index
a=[12,34,564,424]
b=a.index(12)
print(b)
#0
count
a=[12,34,564,424]
b=a.count(12)
print(b)
#1
a=[12,34,564,424]
b=sum(a)
print(b)
#1034
sum补充https://www.runoob.com/python/python-func-sum.html
min/max
a=[12,34,564,424]
b=min(a)
c=max(a)
print(b,c)
#12 564
a=(1,2,3,4)
b=tuple(a)=
花括号法和指明类型法
student={}
student=dict()
数据类型
字典中保存的各个标签-数据值
标签和数据值之间用冒号“:”连接
批量添加数据项
seq = ('Google', 'Runoob', 'Taobao')
dict = dict.fromkeys(seq)
print("新字典为 : %s" % str(dict))
dict = dict.fromkeys(seq, 10)#有初始值10
print("新字典为 : %s" % str(dict))
字典是可变类型,可以添加、删除、替换元素
字典中的元素value没有顺序,可以是任意类型,甚至也可以是字典
字典的键值key可以是任意不可变类型(数值/字符串/元组)
student={}#创造一个空的字典
student["name"]="Tom"
student["age"]="20"
student["gender"]='male'
print(student)
bar={"course":["数学","英语"]}
student.update(bar)
print(student)
#运行结果
{'name': 'Tom', 'age': '20', 'gender': 'male'}
{'name': 'Tom', 'age': '20', 'gender': 'male', 'course': ['数学', '英语']}
创造一个空的字典,然后和另外一个字典相等,即为和它的关联
student={}#创造一个空的字典
teacher={}
student["name"]="Tom"
student["age"]="20"
student["gender"]='male'
teacher=student
print(teacher)
#运行结果
#{'name': 'Tom', 'age': '20', 'gender': 'male'}
上面的update操作是直接增加了一个数据库,而这个是增加一个key-value的组合
student={}#创造一个空的字典
student.update(fridends=["Mike","Alice"])
print(student)
#运行结果
#{'fridends': ['Mike', 'Alice']}
del操作:删除指定标签的数据项
pop操作:删除指定标签的数据项并返回数据值
popitem操作:删除并且返回任意一个数据项
student={}#创造一个空的字典
student.update(fridends=["Mike","Alice"])
print(student)
del student["fridends"]
print(student)
#运行结果
{'fridends': ['Mike', 'Alice']}
{}
返回的是删除的值,用pop可以将字典中的数据项逐个移走
A、默认移除最后一个元素
list = [1, 2, 3, 4, 5]
a = list.pop()#当括号内没有参数时,就默认删除最后一个元素
print (list, a)
B、移除list中的某一个元素:pop(元素序号)
list = [1, 2, 3, 4, 5]
a = list.pop(2)
print (list, a)
#输出结果
[1, 2, 4, 5] 3
其他具体情况参考https://www.cnblogs.com/volcao/p/8696306.html
删除并且返回任意一个数据项,括号内没有任何参数,在字典内删除任何一个删除
student={}
student["name"]='madongmei'
student["gender"]='women'
student['age']=20
print(student)
print(student.popitem())
print(student)
student.clear()
print(student)
#运行结果
{'name': 'madongmei', 'gender': 'women', 'age': 20}
('age', 20)
{'name': 'madongmei', 'gender': 'women'}
{}
清空字典内的所有内容,移走所有的数据项
代码示例见popitem代码
len函数
student={}
student["name"]='madongmei'
student["gender"]='women'
student['age']=20
print(len(student))
#运行结果
3
dict[key]#基本格式
student={"name":"Tom","age":20,"gender":"male"}
print(student["name"])
#输出结果
'Tom'
student={"name":"Tom","age":20,"gender":"male"}
print(student.get("name"))
#输出结果
'Tom'
虽然和上一种方法形式上相似,但是不能作为变量使用,get出来的value就不能去实时更新它了,是一个只能看的状态
keys函数:返回字典中的所有标签
values函数:返回字典中的所有数据值
items函数,将每个数据项表示为二元元组,返回所有的数据项
student={}
student["name"]='madongmei'
student['age']=40
student['gender']='woman'
print(student.keys())
print(student.values())
print(student.items())
#输出结果
dict_keys(['name', 'age', 'gender'])
dict_values(['madongmei', 40, 'woman'])
dict_items([('name', 'madongmei'), ('age', 40), ('gender', 'woman')])
判断字典中是否存在某个标签
代码示例见下一个部分
判断字典中是都存在某个数据值
student={"name":"Tom","age":20,"gender":"male","courses":['math','computer']}
print('name' in student)
print('city' in student)
print(20 in student.values())#values和in的结合
#输出结果
True
False
True
a = set('abracadabra')
# b = set('alacazam')
print(a)
# print(b)
a.add(1.23)
print(a)
#输出结果
{'b', 'c', 'r', 'd', 'a'}
{1.23, 'b', 'c', 'r', 'd', 'a'}#无序
a = set('abracadabra')
print(a)
a.update('123')
print(a)
#运行结果
{'c', 'b', 'a', 'd', 'r'}
{'c', '2', 'b', 'a', 'd', 'r', '3', '1'}
remove/discard:删除指定数据
discard和remove的功能一样,但是如果输入一个不存在的参数时,discard不会出错
pop:删除任意数据并返回值
clear
len
aset=set('abc')
print(aset)
print('a'in aset)
print(aset|set('bcd'))
print(aset&set(['b','c','d']))
print(aset-set(('b','c','d')))
print(aset^set('bcd'))
print(aset<=set('abcd'))
print(aset>set('abcd'))
#输出结果
{'b', 'c', 'a'}
True
{'b', 'c', 'a', 'd'}
{'b', 'c'}
{'a'}
{'d', 'a'}
True
False
<=,=,>:子集(<=)/真子集(<)/超集(>=)/真超集(>)
isdishoint:两个集合交集是否为空
不可变类型 一旦创建就无法修改数据值的数据类型。如整数、浮点数、复数、字符串、逻辑值、元组
可变类型:可以随时改变的数据类型。如列表、字典、集合。灵活性强会花费一些计算或者存储的代价去维持这些强大的功能。
可变类型的变量操作需要注意,多个变量通过赋值引用同一个可变类型的对象时,通过其中任何一个变量改变了可变类型的对象,其他变量也随之改变,因为它们用的是同一个对象。
a=[1,2,3,4]
print(a)
b=a
print(b)
print(id(a))
print(id(b))#id是python内置函数,用来查看它所指向数据对象的地址的
a[0]='hello'
print(a)
print(b)
#输出结果
[1, 2, 3, 4]
[1, 2, 3, 4]
2668622248832#两个变量的存储地址相同!
2668622248832
['hello', 2, 3, 4]
['hello', 2, 3, 4]
使用方括号[]创建的列表
使用圆括号()创建的元组
使用花括号创建的字典和集合
每种类型中,都可以通过方括号对单个单元元素进行访问。
对于列表和元组,方括号里是**整数的偏移量**
对于字典,方括号里是**键**
都是返回**元素的值**
将这些内置的数据结构自由的组合成更大、更加复杂的结构
创建自定义数据结构的过程中,唯一的限制来自于这些内置数据本身
alist=[1,2,3]
blist=['HELLO','PYTHON']
clist=[True,False]
list_of_lists=[[1,2,3],['HELLO','PYTHON'],[True,False]]
tuple_of_lists=([1,2,3],['HELLO','PYTHON'],[True,False])
dict_of_lists={'num':[1,2,3],'word':['HELLO','PYTHON'],'bool':[True,False]}
字典的元素可以是任意类型,甚至也可以是字典
字典的键值可以是任意不可变类型
例如:用元组作为坐标,索引坐标
alist=[[25,34,45],[True,'ab']]
alist[0][2]
bands={'Marxes':['Moe','Curly'],'KK':[True,'moon']}
bands['KK'][0]
poi={(100,100):'zhongguancun',(123,23):'Pizza'}
poi[(100,100)]
input(prompt)
#prompt 为提示符
打印各个变量的值输出。
print([object,...][,sep=' '][,end='\n'][,file=sys.stdout])
yname= input("please input your name")
print(yname)
print(1,23,'Hello')
print(1,23,'Hello',end=' ')
print(1,23,'Hello',sep=',')
print('%d %s'%(23,'Hello'))
print('%d'%(23,))
print('(%4d):K:%s'%(12,'Hello'))
print('(%04d):K:%s'%(13,'HELLO'))
#输出格式
please input your nameliu
liu
1 23 Hello
1 23 Hello 1,23,Hello
23 Hello
23
( 12):K:Hello
(0013):K:HELLO
名字=数据
与数值关联的名字也称作变量,表示名字的值和类型可以随时发生变化。
变量的值类型可以随着引用不同的变量类型而发生变化
变量随时可以指向任何一个数据对象
python是一个动态的语言,名字和数值是一个引用的关系,而在C语言和C++中,变量的类型在产生时就已经定义好了
名字和数值关联的过程,称作赋值
“==”是对数值的相等性进行判断
“=”则是对计算等号右边式子的值,赋值给等号左边的变量
通过赋值号将变量和表达式左右相连的语句
赋值语句the_sum=0,实际上是创建了名为the_sum的变量,然后指向数据对象“0”
名字=数值
a=b=c=1
a,b,c=7,8,9
a+=1
a*=2
a/=3+4
对现实世界处理和过程的抽象
各种类型的数据对象,可以通过运算组织成复杂的表达式
表达式计算
n=12*34
函数调用
p2=math.sqrt(2)
赋值
pfg=math.sqrt
pfg(2)
控制流语句用来组织语句的描述过程
几乎所有地程序设计语言都提供了着三种流程控制
不再像else和if结合的语句一样需要缩进,时python设计的更为便捷美观的形式
a=12
if a>10:
print("Great!")
elif a>6:
print("Middle!")
else:
print("Low!")
#输出结果
Great!
根据需要对一系列操作进行设定次数或者设定条件的重复,这样的控制流程,就称作循环结构
循环前提的类型
while<逻辑表达式>
<语句块>
break #跳出循环
continue #略过余下的循环语句
<语句块>
else:#条件不满足退出循环,则执行
<语句块>
else语句仅仅在不满足while条件时才会执行,在用break跳出时,不能运行else后面的语句
n=5
while n>0:
n=n-1
if n<2:
continue
print(n)
else:
print('END!')
#运行结果
4
3
2
END!
多重甚至多重的循环
for i in range(1,10000):
n=i
step=0
while n!=1:
if n%2==0:
n=n//2
else:
n=n*3+1
step+=1
else:
print(i,"Traped",step,"steps")
#答案太多 此处不罗列了
终端程序运行:ctrl+C
通过修改程序中range函数的参数,还可以验证其他范围的连续整数
迭代循环语句
python语言中的for语句实现了循环结构的第一种循环前提
for<循环变量> in<可迭代对象>
<语句块1>
break#跳出循环
continue#略过余下循环语句
else:#迭代完毕,则执行
<语句块2>
#程序1
for n in range(5)
print(n)
#输出结果
0
1
2
3
4
#程序2
alist=['a',123,True]
for v in alist
print(v)
#输出结果
a
123
True
#程序3
adic={'name':'Tom','age':18,'gender':'Man'}
for k in adic:
print(k,adic[k])
#运行结果
name Tom
age 18
gender Man
#程序4
adic={'name':'Tom','age':18,'gender':'Man'}
for k,v in adic.items():
print(k,v)
#运行结果
name Tom
age 18
gender Man
range(<终点>)
返回一个从0开始到终点的数列
range(<起点>,<终点>)
从0叽歪的任何整数开始构建的数列
range(<起点>,<终点>,<步长>)
修改数列的补偿,通过将补偿设置为复数能够实现反向数列
range构建的数列,包含起点整数,而不包含终点整数
range类型对象
print(list(range(10)))
print(range(10))
print(tuple(range(10)))
print(list((range(5,10))))
print(list(range(1,10,2)))
print(list(range(10,1,-2)))
#运行结果
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
range(0, 10)
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
[5, 6, 7, 8, 9]
[1, 3, 5, 7, 9]
[10, 8, 6, 4, 2]
continue语句和break语句