编程、数据类型、流程控制

编程

参考网站

语言:
	事物与事物之间沟通交流的媒介
	
计算机:
	解放人力,代替人力去工作
		古代,雇工代替自己工作
		现代,使用计算机代替自己工作
		
编程:
	1.什么是编程
		编程就是编写程序,人将自己的思维逻辑通过计算机能够识别的语言写下来,让计算机按照人的思维逻辑去干活的编辑代码
		电脑,人工智能是开发的一个方向
		编程的代码存放在文件中
		计算机是死的,不会主动去干活
		
编程语言:
	shell
	python
	go	
		
一套完整的计算机系统有以下三部分组成:(系统层面)
	1.应用程序		---- 程序员
	2.操作系统		---- 中间人,调用
	3.计算机硬件
	
	PS:
		1.程序员开发的程序都叫应用程序
		2.操作系统也叫应用程序,但是它针对的是计算机硬件
		
计算机硬件:
	CPU
	内存
	硬盘
	
操作系统:
	帮助人去操作硬件,操作系统本身已经封装好了一系列操作硬件的方法,程序员只需要按照操作系统提供的方法间接的操作硬件
	Windows
	linux

计算机五大组成部分:(硬件层面)

	1.控制器		计算机的控制系统
					
	2.运算器		计算机的运算系统
					逻辑运算
						判断事物对错
					数学运算
						数字运算
		控制器+运算器=计算器中央处理器(CPU)
	3.存储器		计算机的存储系统
					内存(10ns)
						优点:基于电工作,读取速度快
						缺点:断电数据丢失
					外存,硬盘(10s),靠磁针旋转读取数据(机械硬盘),SSD固态硬盘,磁带(便宜)
						优点:永久保存数据
						缺点:读取数据较内存慢
					高速缓存(2ns),<4MB
					寄存器(1ns),速度最快,容量最小<1KB
		PS:
		输入设备也称input,输出设备也叫output
		存储器也可以叫做IO设备
	4.输入设备
		键盘、鼠标、触摸板
	5.输出设备
		显示器、音响、打印机
		
BIOS:
	计算机主板出厂的时候自带的一个系统
	
python解释器运行一个py文件的步骤:
	1.将py解释器的代码由硬盘读取到内存
	2.将py文件以普通文件的形式读到内存,展示给用户
	3.python解释器读取文件内容,识别python语法,执行相应的操作
	ps:普通的文本编辑器与python解释器的前两步都是一样的
	
#双击一个图标	(告诉操作系统帮你去操作硬件)
	1.该软件对应的数据有硬盘读到内存
	2.CPU去内存中读取该软件对应的数据
	3.给用户的感觉,这个软件起来了
	
#文件的概念
	文件就是计算机暴露给用户的操作硬件的接口

CPU

计算机是基于电工作的,而电信号只有高低电平两种状态
	0100010001001010010	所以计算机里面存储的都是0101这样的二进制数据
	
CPU的工作流程:
	使用内存,读取命令,将命令解析成操作步骤,控制硬件执行
	
CPU分类:	
	精简指令集CPU
		这种CPU的微指令集较为精简,执行效果较好
	复杂指令集CPU
		
X86架构是CPU以80开头的代号的一个统称
	32位,CPU到内存中读取数据,一次最少读32位
	64位
		64位向下兼容32位的软件,而32为不能兼容64位的软件

操作系统

操作系统:
	操作系统也是一个应用软件,但是它是针对计算机硬件的
作用:
	将复杂的操作封装起来,暴露给用户简单快捷的操作接口,便于操作计算机硬件
	帮助用户协调、管理、调度计算机各个硬件
文件:
	操作文件就是在操作硬盘

注释

什么是注释
	注释就是对代码的解释或评论,通常在代码前面说明,注释是给人看的,计算机不会解析
分类:
	1.单行注释
		# 内容
	2.多行注释
		'''内容'''
        """内容"""

输入

1.python3中的输入
	关键字input()
    python3中的input()获取的用户输入,统一全部存成字符串类型
    
2.python2中的输入
	input()
    	需要人为的告诉python程序,输入的是什么数据类型 'str' 10 [1,2,3] {4,5,6}
    raw_input()
    	python2中的raw_input()和python3中的input()一样,无论用户输入的是什么数据类型,统一转变成字符串类型

输出

name = input('your name >>>:')
age = input('your age >>>:')

1.单行打印
	print(name,age)
2.多行打印
	print(name)
    print(age)
3.占位符,指定格式打印
	print('my name is',name,'my age is',age)
    print('my name is %s,my age is %s' %(name,age))
    	%s 既能给字符串占位,又能给整形占位(可以给任意数据类型占位),变量的个数不能多也不能少
    
    %d 只能给数字占位
    print('%08d' %123)
    	%08d 整数是8位,传入的数不够8位得到话默认用0补全,超出8位的话,是多少就是多少
        
#print() ,打印空行、换行

数据类型

什么是数据:
	衡量/记录事物的状态/特征
    
什么是类型:
	不同的数据应该用不同的数据类型存储,比如:文本,视频,音频...

整型、浮点型

int		整形,整数

age = 18			#本质上是 age = int(18)
#age = int('18')	#字符类型转换
print(type(age))	

float	浮点型,带小数位

salary = 1.11		#本质上是 salary = float(1.11)
#salary1 = float(3.11)
print(type(salary))

复数
a = 1-2j
type(a)
a.real		#查看实部
a.imag		#查看虚部

#只有python2中有长整型,python3中只有整形
#print(1+2)
#整型、浮点型可以统称为数字类型

#有返回值的时候,可以直接print()
#没有返回值的时候,只能print()作用对象

x = [1,2,3]
x.clear()
print(x)			#[]
print(x.clear())	#None,函数没有返回值

字符串类型

作用:
	保存描述信息,比如:个人简介、对他人的评价...
表示方法:
	1.单引号
    	s1 = '我是一个字符串' 		#本质上是 s1 = str('我是一个字符串')
        print(type(s1))
    2.双引号
    	s1 = "我是一个字符串"
    3.三引号
    	s1 = '''我是一个字符串'''
    	s1 = """我是一个字符串"""
        
#字符串之所以有三种定义方式,这是考虑到用户在输入的文本中也需要用到引号

print(hello+world)
print(hello*5)
#python中字符串可以加减乘除,原理是在内存中申请了名称空间

列表类型

作用:
	能够存储多个数据,并且可以方便的取出一个或多个
    
定义:
	[]内部通过逗号分隔多个元素,并且这多个元素可以是任意的数据类型
    
l = [123,3.1,'syy',[11,22]]     
    
#取值
	索引取值
    	print(l[0])
    	print(l[3][0])		#本质是 print([11,22][0]) 
        
#列表也可以直接相加减
print([1,2,3]+[4,5,6])

字典类型

作用:
	能够存储多组数据,存取的数据都有对应的描述
    
定义:
	大括号内存多个元素,元素的格式key:value形式存储,键值对与键值对之间使用逗号隔开,字符串加引号,整形、浮点型不用加引号
    key通常是描述value的描述性信息,所以key通常存的就是字符串(不可变类型、可hash)
    value通常就是描述性信息对应的真实的数据
    字典中的元素是没有顺序的
    字典暴露给用户的部分只有key,所以字典取值必须要知道key 

#字典的定义方式1
info = {
    'name': 'syy',
    'age':18,
    'hobby':['妹子',‘钱’]
}

#本质是
info = dict{
    ...
}

#字典的定义方式2
info = dict(name='syy',age=18)
print(info,type(info))		#{'name': 'syy', 'age': 18} <class 'dict'>

#字典的定义方式3
info = [
    ['name','syy'],
    ['age',18],
    ['hobby','qiu']
]
d = {}
for i in info:
    d[i[0]] = i[1]		#字典中不存在,就直接添加
print(d)

info = [
    ['name','syy'],
    ['age',18],
    ['hobby','qiu']
]
d = {}
for k,v in info:		#使用解压赋值,定义字典
    d[k] = v
print(d)

info = [
    ['name','syy'],
    ['age',18],
    ['hobby','qiu']
]
d = dict(info)			#该方法本质上使用的仍是for循环
print(d)

#字典取值,类似于列表取值
#但是必须指定key(字典的取值使用for循环比较方便),for循环可以不使用索引取值,可以更方便的取出字典中的value
emp_info = dict{
    'name':'syy',
    'age':18'
    'sex':'male',
    'company_info':{
        'cname':'OB',
        'emp_count':200,
        'addr':'SH'
    }
}
print(emp_info['company_info']['addr'])

d = {'name':'syy','age':18}
print(d.keys())				#keys()本质上是一个迭代器
for i in d.keys():
    print(i,d[i])
    
d = {'name':'syy','age':18}
print(d.values())
for i in d.values():		#使用value()函数,直接取值
    print(i)
    
d = {'name':'syy','age':18}
print(d.items())
for i in d.items():			#结果是一个列表(迭代器)
    print(i)				#dict_items([('name', 'syy'), ('age', 18)])
    
#字典中重复定义键,字典中的key唯一表示value,不能重复
d = {'name':'syy','name':'zhangsan','name':'lisi','age':18}
print(d)		#{'name': 'lisi', 'age': 18}

#使用len()函数,统计字典中键值对的个数
d = {'name':'syy','name':'zhangsan','name':'lisi','age':18}
print(len(d))

#字典和字符串、列表、元组一样,都是可变的数据类型
d = {'name':'syy','name':'zhangsan','name':'lisi','age':18}
print(id(d))
d[0] = 'wang'
print(id(d))

#在字典中添加键值对
d = {'name':'syy','age':18}
d['habby'] = 'qiu'
print(d)

#成员运算,注意字典暴露给用户的只有key,取值也要通过key
d = {'name':'syy','age':18}
print('name' in d)		#True

#删除字典,或者删除字典内的元素
d = {'name':'syy','age':18}
del d['name']
print(d)	#{'age': 18}

d = {'name':'syy','age':18}
d.pop('name')
print(d)

d = {'name':'syy','age':18}
print(d.pop('name'))	#syy,pop()的返回值是key对应的value

d = {'name':'syy','age':18}
print(d.pop('namesyy'))	#KeyError: 当键不存在的时候直接报错
-------------------------------------------------------------------------------
#get()函数,根据key获取value
d = {'name':'syy','age':18}
print(d.get('name'))	#syy
print(d.get('pas'))		#None,不报错

d = {'name':'syy','age':18}
print(d.get('name'))	#syy
print(d.get('pas','这个键不在字典中'))	#这个键不在字典中

#fromkeys()函数,快速生成字典
print(dict.fromkeys('wer',123))	#{'w': 123, 'e': 123, 'r': 123}
print({}.fromkeys('wer',123))	#{'w': 123, 'e': 123, 'r': 123}

d = ['name','syy','age',18]	#使用列表生成字典
print(dict.fromkeys(d,123))	#{'name': 123, 'syy': 123, 'age': 123, 18: 123}

#面试题
	#使用append()可以修改字典的value
    #注意使用forkeys()函数快速生成函数中,名值对的指向关系
x = {}.fromkeys(['name','pas'] ,[])
print(x)							#{'name': [], 'pas': []}
print(x['name'].append('zhangsan'))	#None
print(x)							#{'name': ['zhangsan'], 'pas': ['zhangsan']}

x = {}.fromkeys(['name','pas'] ,[])
print(x)
x['name'] = 'zhangsan'	
print(x)				#{'name': 'zhangsan', 'pas': []}

#popitem()函数,从字典尾部弹出键值对
d = {'name':'syy','age':18}
print(d.popitem())
print(d.popitem())

#setdefault()函数,返回值是键对应的key
d = {'name':'syy','age':18}
print(d.setdefault('name','zhangsan'))		#键存在就算了
print(d)
print(d.setdefault('hobby','qiu'))			#键不存在就添加键值对
print(d)

syy
{'name': 'syy', 'age': 18}
qiu
{'name': 'syy', 'age': 18, 'hobby': 'qiu'}

#update()函数,修改字典中的键值对
d = {'name':'syy','age':18}
d['age'] = 20		#存在就替换,不存在就添加
print(d)

d = {'name':'syy','age':18}
d.update(age=20)
print(d)

x = {}.fromkeys(['name','pas'] ,[])
y = {'name':'zhangsan'}
print(x)
x.update(y)
print(x)

布尔值

作用:
	表示事物的对错,通过true和false,判断事物的对错、是否可行
    
定义:
	tag1 = True			#本质是 tag1 = bool(True)
    tag2 = False
    
#计算机所有的逻辑运算,都要转化为布尔值
#True、False 首字母要大写

x = 10
y = 10
print(x == y)
#python中,一个等号'=' 是赋值,两个等号'=='是比较,注意比较的是value

print(x is y)
#is 比较的是两个变量对应的id(内存中的名称空间的名字)是否相等(注意相同的值的名的指向问题)
	id相等的情况下,值一定相等
    id不相等的情况下,值有可能相等
    
    a = 1
    b = 1
    print(id(a))
    print(id(b))
    print(a is b)		#True
    
#'变量名'和布尔值可以直接用于if判断
	'变量名'指向的值对应的就是True和False(a = True)
    整型、浮点型、字符串等都可以直接作为条件,用于if判断、while循环

元组

作用:
	能够存储多个元素,元素与元素之间使用逗号隔开
    元组一旦被定义,那么就不会再被修改,使用场景跟列表不同
    #元组内可以存放任意数据类型
    #如果元组内只有一个元素,定义的时候一定要加一个逗号
    #存储相同的资源,内存的使用列表较高
    
格式:
	x = ()		#空元组
	x = (int,float,str,list,dict...)
    
x = tuple([1])
print(x)		#(1,),该方式定义元组,后面只能跟容器类型

x = (1)
print(type(x))	#<class 'int'>,实际上是定义了整型

x = (1,)
print(type(x))	#<class 'tuple'>,定义元组

#元组中的元素是不能修改的
x = (['1'],)
x[0] = 1
print(x)		#TypeError: 元组是不能修改的

x = (['1'],)
x[0][0] = '哈哈'
print(x)		#(['哈哈'],),元组内的'容器类型内的数据'是可以修改的

x = (['1'],)
del x
print(x)		#NameError: 元组可以被删除

#元组的索引取值
x = (1,2,3)
print(x[0])			#返回的数据类型,即为元组内元素的数据类型

#元组的切片
x = (1,2,3)
print(x[0:1:])		#(1,),返回一个元组

#成员运算in/not in
x = (1,2,3)
print(1 in x)		#True

#元组的内置方法
x = (1,2,3)
print(x.count(1))

x = (1,2,3)
print(x.index(2))

#元组跟列表一样,都是可变的数据类型
x = (1,2,[3])
print(id(x))
x[-1].append(233)
print(x)
print(id(x))

#只要定义的是容器类型(列表、字典、元组),如果内部只有一个元素,那么,最好在后面加上一个逗号
#元组和列表对比:
	存储相同数据量的情况下,元组更加节省空间

集合

作用:
	群体之间作比较,不涉及单个元素 --- 关系运算(共同好友、共同关注)
    一个集合可以包含多个元素,元素之间使用逗号分隔
    集合中的每个元素必须是不可变类型(整型、浮点型、字符串、元组)
    集合中'没有'重复的元素 --- 去重
    集合中的元素是无序的
    
格式:
	{}					#空字典
    set{}				#空集合
    a = {1,2,'syy',()}
    print(type(a))		#set

#交集
python = ['jason','nick','syy','tank','egon','kevin','owen','alex']
linux = ['frank','jerry','tank','egon','alex']
for i in python:
    if i in linux:
        print(i)   
        
#差集,一个集合的非交集元素
python = ['jason','nick','syy','tank','egon','kevin','owen','alex']
linux = ['frank','jerry','tank','egon','alex']
for i in python:
    if i not in linux:
        print(i)

#把字符串转换成集合
print(set('111'))		#{'1'}

#把列表转化成集合
a = [1,2,3,3,2,1]
print(set(a))		#{1, 2, 3}

#把元组转换成集合
print(set((1,)))	#{1}

#交集
python = {'jason','nick','syy','tank','egon','kevin','owen','alex'}
linux = {'frank','jerry','tank','egon','alex'}
print(python & linux)	#{'egon', 'alex', 'tank'}

#差集,只报名python
python = {'jason','nick','syy','tank','egon','kevin','owen','alex'}
linux = {'frank','jerry','tank','egon','alex'}
print(python - linux)	#{'jason', 'owen', 'nick', 'syy', 'kevin'}

#差集,只报名linux
python = {'jason','nick','syy','tank','egon','kevin','owen','alex'}
linux = {'frank','jerry','tank','egon','alex'}
print(linux - python)	#{'frank', 'jerry'}

#对称差集,交集的补集
python = {'jason','nick','syy','tank','egon','kevin','owen','alex'}
linux = {'frank','jerry','tank','egon','alex'}
print(python ^ linux)	#{'jason', 'owen', 'nick', 'jerry', 'frank', 'kevin', 'syy'}

#两个集合相加,再去重
python = {'jason','nick','syy','tank','egon','kevin','owen','alex'}
linux = {'frank','jerry','tank','egon','alex'}
print(python | linux)	#{'jason', 'syy', 'owen', 'kevin', 'frank', 'egon', 'jerry', 'nick', 'tank', 'alex'}

python = {'jason','nick','syy','tank','egon','kevin','owen','alex'}
linux = {'frank','jerry','tank','egon','alex'}
print(python + linux)	#TypeError: 不能使用符号+

#集合中元素是没有顺序的
a = {1,2,3}
b = {3,2,1}
print(a == b)	#True

#父集
a = {1,2,3}
b = {1}
print(a >= b)	#True,集合a,包含集合b

a = {1,2,3}
b = {1}
print(a <= b)	#False

#向集合内添加元素
a = {1,2,3}
a.add(666)		#add()函数没有返回值
print(a)

a = {1,2,3}
a.add((666,))	#添加元组
print(a)

#在集合中删除元素
a = {1,2,3}
a.remove(1)		#元素不存在的话会报错
print(a)

a = {1,2,3}
a.discard(1)	#元素不存在的话不会报错
print(a)

数据类型的转换

其他数据类型转int类型

python中常见的数据类型有整型int、浮点型float、字符串str、列表list、字典dict

#字符串转int类型
res = int('str')	
print(res)

res = int('str111')
print(res)

res = int('1.11')
print(res)

res = int('111')	#字符串含有字母、特殊符号的类型不能转int类型,字符串纯数字字符串类型可以转int类型
print(res)
	

#浮点型转int类型
res = int('1.11')	#浮点型、列表、字典不能转int类型
print(res)

其他数据类型转浮点型

#字符串转float浮点型
res = float('111')
print(type(res))
print(res)	#111.0

res = float('1.11')
print(type(res))
print(res)	#1.11,整型、字符串(整型字符串、浮点型字符串)可以转浮点型,列表、字典不能转浮点型

其他数据类型转字符串

#整型转字符串类型
s1 = 111
print(type(str(s1)))
#浮点型转字符串类型
s2 = 11.1
print(type(str(s2)))
#列表转字符串类型
s3 = [1,2,3]
print(type(str(s3)))
#字典转字符串类型
s4 = {'name':'syy','age':18}
print(type(str(s4)))

#别的数据类型都可以转字符串类型

其他数据类型转列表

#整型、浮点型不能转列表类型
res = list(111)
print(type(res))
print(res)	#TypeError: 

#字符串转列表类型
res = list('111a')
print(type(res))
print(res)	#['1', '1', '1', 'a']

#字典类型转列表类型
res = list({'name':'syy','age':18})
print(type(res))
print(res)	#['name', 'age']

其他数据类型转元组

#整型、浮点型转元组
x = tuple(1)
print(x)	#TypeError: 

#字符串类型转元组
x = tuple('1')
print(x)	#('1',)

#列表转元组
x = tuple([1,])
print(x)	#(1,)

#字典转元组
x = tuple({'name':'syy' })
print(x)	#('name',)

进制转换

#二进制转十进制
规律:
	10	# 1*(2**1) + 0*(2**0) = 2 ,所以二进制数10用十进制数表示就是2
    
#八进制转十进制
规律:
	10	# 1*(8**1) + 0*(8**0) = 8,所以八进制数10用十进制数表示就是8
    
#十六进制转十进制,十六进制数由 0-9 a-f组成
规律:
	10	# 1*(16**1) + 0*(16**0) = 16 ,所以十六进制数10用十进制数表示就是16

-------------------------------------------------------------------------

#十进制转二进制,使用函数bin(),0b表示后面的数是二进制
print(bin(10))	#0b1010

#十进制转八进制,使用函数oct(),0o表示后面的数是八进制
print(oct(10))	#0o12

#十进制转十六进制,使用函数hex(),0x表示后面的数是十六进制
print(hex(10))	#0xa

-------------------------------------------------------------------------

#使用函数,其他进制转十进制
print(int('1010',2))
print(int('12',8))
print(int('a',16))

数据的可变类型与不可变类型

可变类型:
	值改变的情况下,id不变,说明改的是原值
不可变类型:
	值改变的情况下,id一定变,说明改的是名对值的指向
    
    
#整型是不可变类型
x = 10
print(id(x))
x = 11
print(id(x))

#浮点型是不可变类型
x = 10.1
print(id(x))
x = 11.1
print(id(x))

#字符串是可变数据类型
x = 'syy'
print(id(x))
x.replace('s','z')
print(id(x))

#列表是可变类型
x = [10.1]
print(id(x))
x[0] = 11.1
print(id(x))

#元组是可变数据类型
x = (1,2,[3,4])
print(id(x))
x[2][0] = 33
print(id(x))

#字典是可变类型
x = {'name':'syy','age':18}
print(id(x))
x[1] = 19
print(id(x))

索引取值

#整型的索引取值
s = 123
print(s[0])		#不支持

#浮点型的索引取值
s = 123.1
print(s[0])		#不支持

#字符串的索引取值
s = 'hello world'
print(s[0])	#h

#列表的索引取值
s = [1,2,3]
print(s[0])

s =[1,2,3]
print(s[0::])	#相当于print(s[0:3:1])

s =[1,2,3]
print(s[2::-1])		#[3, 2, 1],注意末尾索引可以不写

s =[1,2,3]
print(s[-1::-1])	#[3, 2, 1],注意,右索引从-1开始

#字典的取值,因为在字典中键值对是没有顺序的(没有索引),所以字典不能通过索引取值,只能通过key取值
s = {'name':'syy','age':18}
print(s['name'])

#列表、元组、字典等容器类型可以使用解压赋值
k,v = [1,2]
print(k,v)	#1 2

k,v = {'name':'syy','age':18}
print(k,v)	#name age

k,v = (1,2)
print(k,v)	#1 2

切片

#整型的切片
s = 1101111
print(s[0:3])	#不支持

#浮点型的切片
s = 110.11111
print(s[0:3])	#不支持

#字符串的切片
s = 'hello world'
print(s[0:3])		#hel,顾头不顾尾

s = 'hello world'
print(s[0:3:1])		#默认切片的步长为1,每个都取

s = 'hello world'
print(s[0:3:2])		#步长为2,那么隔一个取一个

#列表的切片
s = [1,2,3,4,5,6]
print(s[0:3:2])		#[1, 3]

#字典的切片
s = {'name':'syy','age':18,'habby':'qiu'}
print(s[0:2])		#不支持

#切片中的负数问题(索引、步长都支持负数)
s = 'hello world'
print(s[0:5:-1])	#代码没有返回值,原因是索引0左边没有索引

s = 'hello world'
print(s[5:0:-1])	# olle,从索引5开始,向左边数,顾头不顾尾(左头右尾)

s = 'hello world'
print(s[-1:-5:-1])	#dlro,从右边数的话,第一个索引为-1不是0

#数据类型支持索引,才能使用切片,所以,只有字符串、列表、元组支持切片

len()函数的使用对象

#整型
s = 111
print(len(s))	#不支持

#浮点型
s = 11.1
print(len(s))	#不支持

#字符串
s = 'hello world'
print(len(s))	#统计字符串中字符的个数(空格算一个字符)

#列表
s = [1,2,3]		#统计列表中元素的个数
print(len(s))

#字典
s = {'name':'syy','age':18}		#统计字典中键值对的个数
print(len(s))

成员运算 in和 not in

#整型
print('18' in 'syy is 18 year')		#True

#浮点型
print('18.1' in 'syy is 18.1 year')		#True

#字符串
print('sy' in 'syy is 18 year')
print('syy' in 'syy is 18 year')	#True
print('jason'  not in 'syy is 18 year')

#列表
print('[18]' in 'syy is [18] year')		#True

#字典
print('age' in {'age':18})		#True
print('18' in {'age':18})		#False

#在列表中,每个元素都是最小的单元
a = ['name','syy']
print('name' in a)		#True
print('n' in a)			#False
print('n' in a[0])		#True

#只有字符串才能使用in/not in 

字符串中的空格

#strip()作用:
	去除空格

#strip(),默认去除字符串首尾的空格,不能去除中间的空格
x = 'syy'
y = '   syy   '
print(x)
print(y.strip())

#使用strip()函数去除字符串首尾的指定字符,可以一次去除多个字符
x = 'syy'
y = '000syy000'
print(x)
print(y.strip('0s'))

#strip()函数的操作对象只能是字符串
#strip()函数可以接受多个字符,但是必须放到一个''内(想去除什么,就在里面加什么)
#strip()函数去除多个字符的时候,只能在首/尾去掉的前提下去除多个字符
#strip()函数通常与input()函数连用,input().strip(),防止用户输入的时候输入空格,导致程序匹配异常
#lstrip()函数,只作用于字符串的左边,直到遇到不是指定的去除字符
#rstrip()函数,只作用于字符串的右边

replace()函数

作用:
	替换

格式
	str.replace(old, new[, max])

参数
old -- 将被替换的子字符串。
new -- 新字符串,用于替换old子字符串。
max -- 可选字符串, 替换不超过 max 次,默认替换所有

#使用replace()函数,去除用户输入的空格
x = 111
y = '   syy   '
print(x)
print(y.replace(' ','',3))

#替换字符串中的字符
str = 'my name is syy,syy age is 18'
print(str.replace('syy','wang',1))

#整型、浮点型、列表、字典不能使用replace()函数,只有字符串可以使用replace()函数

split() 函数

作用:
	对指定字符串,指定字符切片
    
格式一:
	str = 'syy is age 18'
    print(str.split())	#['syy', 'is', 'age', '18']	,默认以空格为分隔符

格式二:
    data = 'syy|123|student'
    print(data.split('|'))		#['syy', '123', 'student']
    usernmae,password,info = data.split('|')	#解压赋值
    
格式三:
    data = 'syy|123|student'
    print(data.split('|',1)) 	#['syy', '123|student']

#整型、浮点型、列表、字典都不能使用split()函数
#split()函数对字符串切分,结果是一个列表 
#切割的顺序是从左向右
#默认num=-1,指定字符串切割所有
#lsplit()函数,从左边切字符串,默认
#rsplit()函数,从右边切字符串

join()函数

#把字符串中的字符拼接成字符串
data = 'syy'
print('$'.join(data))	#s$y$y

#把字符串切片,变成列表
data = 'syy|123|student'
print(data.split('|'))

#对字符串切片变成列表,在把列表拼接成字符串
s = data.split('|')
print('$'.join(s))		#字符串syy$123$student

#整型、浮点型不能使用join()函数拼接
#列表可以使用join()函数,但是里面的元素要注意不能是整型、浮点型
#字典也可以通过join()函数,拼接key

l = ['1','a','b']	#小心1
print('|'.join(l))

lower()、upper()函数

#字符串所有字母转小写
s = 'Syy'
print(s.lower())

#字符串所有字母组转大写
s = 'Syy'
print(s.upper())

#这两个函数只能针对字符串,包括含有数字的字符串、含有特殊字符的字符串
#这两个函数可以解决用户登录的时候输入的大小写的问题
#这两个函数没有改变字符串本身,改变的只是返回结果,该函数使用的是返回值

startswith()、endswith()函数

#判断字符串是不是以...开头
s = 'my name is syy'
print(s.startswith('my'))	#True

#判断字符串是不是以...结尾
s = 'my name is syy'
print(s.endswith('syy'))	#True

#这两个函数只能针对字符串,包括含有数字的字符串、含有特殊字符的字符串
#这两个函数没有改变字符串本身,改变的只是返回结果
#应用场景是,VIP用户、黑名单用户

format()函数的三种玩法

#按位置占位,跟%s原理一样
s = 'my name is {},my age is {}'.format('syy',18)
print(s)

#按索引占位
s = 'my name is {0},my age is {1}'.format('syy',18)
print(s) 

#指名道姓的占位,关键字传参
s = 'my name is {name},my age is {age}'.format(name='syy',age=18)
print(s)

find()函数

#判断字符串是否含有某个字符,
	如果返回值 n>=0,代表该字符串含有指定的字符,并且指定字符的索引为n
    如果返回值是 -1.代表该字符串没有指定的字符
    
#格式:(限制查找范围,顾头不顾尾)
	str.find('s',n,m)
    
str = 'my name is syy,syy age si 18'
print(str.find('syy'))	#11

#使用 in,可以判断一个字符串是否含有某个字符
str = 'my name is syy,syy age si 18'
if 'syy' in str:
    print('在')
else:
    print('不在')
    
#只有字符串才能使用find()函数,返回索引值
#该函数不报错

index()函数

#该函数类似于find()
#只能作用于字符串,返回索引值

str = 'my name is syy,o age is 18'
print(str.index('age',0,3))

#该函数会报错

count()函数

作用:
	计算字符串中某个字符出现的次数
    #只能作用于字符串、列表、元组,不能作用整型、浮点型、字典
  
格式:(限制查找范围,顾头不顾尾)
	str.count('s')

#统计字符串中某个字符的个数
str = 'my name is syy,o age is 18'
print(str.count('syy'))

#统计列表中某个元素的个数
x = [1,2,3,3,2,1]
print(x.count(1))

center()、ljust()、rjust()函数

作用:
	 center(),把字符串居中,然后填充指定字符
     ljust(),把字符串居左,然后填充指定字符,相当于左对齐
     rjust(),把字符串居右,然后填充指定字符
     zfill(),把字符串居右,然后填充0
     
格式:
	str.center(N.'*')
    
str = 'syy'
print(str.center(10,'*'))

str = 'syy'
print(str.zfill(10))	#0000000syy

#N的值随意,不报错,代表所有字符的总数
#当填充奇数位个字符的时候,左少右多

expandtabs()函数

作用:
	打印出指定个数的TAB键
    只能针对字符串中的	
    
格式:
	str.expandtabs(N)

str = 'syy	18'
print(str.expandtabs(2))

captalize()、swapcase()、title()函数

作用:
	captalize(),把字符串整合成首字母大写,其他位小写的格式
    swapcase(),把字符串大小写互换
    title(),每个字母首字母大写,其他位小写
    只能针对字符串
    
格式:
	str.capitalize()
    str.swapcase()
    str.title()

str = 'hELlo WoRld'
print(str.capitalize())		#Hello world

str = 'hELlo WoRld'
print(str.swapcase())		#HelLO wOrLD

str = 'hELlo WoRld'
print(str.title())			#Hello World

is数字系列

作用:
	判断字符串是否为数字,并且是纯数字,返回True/False
    isnumeric(),识别阿拉伯数字、中文数字
    is数字系列的作用与isdigit()函数类似,通常情况下使用isdigit()函数就可以满足需求
    
    
格式:
	num.isnumeric()
    num.isdecimal()
    num.isdigit()	#既支持普通的阿拉伯数字,也支持二进制数字

#isnumeric()函数
num1 = b'4'		#bytes,二进制数
num2 = u'4'		#Unicode,python3中无需加u就是Unicode
num3 = '肆'	   #中文数字
num4 = 'IV'		#罗马数字

print(num1.isnumeric())		#不识别
print(num2.isnumeric())     #True,识别
print(num3.isnumeric())     #True,识别
print(num4.isnumeric())     #False,不识别

isdigit() 函数

作用:
	判断用户的输入是否为纯数字字符串类型,可以直接作为条件,在if判断、循环

while True:
    age = input('请输入你的年龄>>>: ')
    if age.isdigit():
        age = int(age)
        if age > 30:
            print('阿姨好')
        else:
            print('小姐姐好')
    else:
        print('请你他妈的好好输!!!')

list()函数

作用:
    #作用对象只能是字符串、字典,不能是整型、浮点型
    #内部的原理就是for循环取值,再把值添加到列表中

l = 'syy'
print(list(l))	#['s', 'y', 'y']

l = [1,2,3]
print(list(l))	#[1, 2, 3]

l = {'name':'syy','age':18}
print(list(l))	#['name', 'age']

向列表中添加元素 --- 3中方法

#整型、浮点型、字符串、字典不能使用append(),列表可以
#append()一次只能向列表中添加一个元素,可以是整型、浮点型、列表、字符串、字典
#使用append()函数,向列表的'末尾'添加元素,列表本身改变
x = [8,9,10]
x.append(11)
print(x)	#[8, 9, 10, 11]

#整型、浮点型、字符串、字典不能使用insert(),列表可以
#insert()一次只能向列表中添加一个元素,可以是整型、浮点型、列表、字符串、字典
#使用insert()函数,使用索引向列表的任意位置'前'添加元素,列表本身改变
x = [8,9,10]
x.insert(1,110)
print(x)	#[8, 110, 9, 10]

x = [8,9,10]
x.insert(-1,110)
print(x)	#[8, 9, 110, 10]

#整型、浮点型、字符串不能使用extend(),列表、字典可以
#extend()一次可以向列表中添加多个元素,可以是整型、浮点型、列表、字符串、字典
#使用extend()函数,向列表的'末尾'添加元素,列表本身改变
#extend()函数本质上使用的是for循环+append()函数
x = [8,9,10]
x.extend([1,2,3])
print(x)		#[8, 9, 10, 1, 2, 3]

x = [8,9,10]
x.extend({'name':'syy'})
print(x)	#[8, 9, 10, 'name']
	
print([1,2,3]+[2,3,4])		#[1, 2, 3, 2, 3, 4]

在列表中删除元素 --- 3中方法

#整型、浮点型、字符串、列表、字典都可以使用关键字del删除字符、元素

#删除整型、浮点型本身
x = 111
del x
print(x)

#删除字符串本身
x = 'syy'
del x
print(x)

#删除列表中的元素
x = [8,9,10]
del x[1]
print(x)

#删除字典中的键值对
x = {'name':'syy'}
del x['name']
print(x)

#整型、浮点型不能使用pop()函数,列表、字典可以使用pop()函数
#作用是,默认从列表或字典的末尾弹出元素、键值对,删除的时候有返回值
#当pop(N)指定索引时,则弹出指定索引对应的元素
#可以使用在用户退出登录的界面
x = [1,2,3]
print(x.pop())	#3
print(x)		#[1, 2]
print(x.pop())	#2

#整型、浮点型、字符串、字典不能使用remove(),列表可以
#作用是删除列表中指定的元素,删除的时候没有返回值
x = [1,2,3]
x.remove(2)
print(x)	#[1, 3]

reverse()函数

作用:
	将列表中的元素、键值对反向排列
    #reverse()函数只能作用于列表,不能作用于整型、浮点型、字符串、字典
    #reverse()函数没有返回值
    
格式:
	str.reverse()

x = [1,2,3]
x.reverse()
print(x)			#[3, 2, 1]
print(x.reverse())	#None

#列表是可变数据类型
x = [1,2,3]
print(id(x))
x.reverse()
print(id(x))

sort()函数

作用:
	将列表中的数据排列
    #只能针对列表,默认升序排列

格式:
	str.sort()
    str.sort(reverse=True)
    
x = [1,2,3,3,2,1]
x.sort()
print(x)			#[1, 1, 2, 2, 3, 3]
print(x.sort())		#None

clear()函数

#作用:
	清空列表内的元素
    只能作用于列表,字典,不能用于清空整型、浮点型、字符串、元组
    
#格式:
	list.clear()

#清空列表
a = ['123']
a.clear()
print(a)

#清空字典
a = {'name':'syy'}
a.clear()
print(a)

运算

运算符

数学运算:
print(10 + 3)		
print(10 - 3)
print(10 * 3)
print(10 / 3)		#结果保留小数部分
print(10 // 3)		#只保留整数部分
print(10 % 3)		#取余数
print(10 ** 3)		#次方

#python对数字运算的敏感度不高

比较运算:
	==
    !=
    >
    <
    >=
    <=

print(10 != 9)

字符串的运算,(阿斯克码)
a = 'hello'
b = 'z'
print(b>a) 	#True,原理是asicII码,A-Z a-z

增量运算
	xxx +=1		#等于 xxx = xxx +1
    xxx -=1
    xxx *=1
    xxx /=1
    xxx %=1
    
链式赋值,原理是变量名对id的指向  
    m =1
    n =m
    print(m)	#1
    print(n)	#1
    m =111
    print(n)	#1
    
交叉赋值
	m,n = n,m
    
解压赋值
	l = [1,2,3,4]
    a = l[0]
    b = l[1]
    c = l[2]
    d = l[3]
    
    a,b,c,d = l
    #解压赋值中,前面变量的个数与后面的元素的个数必须相同
    
    a,_,_,d = l
    #解压部分值,然后赋值,此时 print(_) = 3
    
    a,*_,d = l
    #可以使用*_ 代表多个列表中的元素
    
逻辑运算,and or not		#对应与、或、非
print(1 > 0 and 3 > 4)		#False
print(1 > 0 or 3 > 4)		#True
print(not 1 > 0)			#False

流程控制

if判断

if判断:
	让计算机像人一样去工作,那么计算机也应该有对事物的对错、真假、是否可行的判断能力,从而做出不同的响应
    
语法一:
	if 条件:
    	代码1
    代码2

#python用缩进来表示代码的归属,同一缩进的代码,称之为代码块
#布尔值为False的数据有哪些,0、None、''、[]、{}

gender = 'female'
age = 24
is_beautiful = True

if gender == 'female' and age > 18 and age < 30 and is_beautiful:
    print('小姐姐好漂亮')
print('正常执行结束')

语法二:
	if 条件:
    	代码1
    else:
    	代码2
        
if gender == 'female' and age > 18 and age < 30 and is_beautiful:
    print('小姐姐好漂亮')     
else:
    print('什么玩意儿')
        
语法三:
	if 条件:
    	代码1
    elif:
    	代码2    
    elif:
    	代码3   
    else:
    	代码4    

#if ... else ... 和 if ... elif ... else ... 中,只会同时满足一个条件,同时只会执行一个代码块

语法三:
if 条件1:
    if 条件2:
        ...
    ...
...
#成绩查询
#代码一:
score2 = input('please input your score >>>:')
score = int(score)
if score >= 90:
    	print('优秀')
elif score >= 80 and score <90:
    	print('良好')
elif score >= 70 and score <80:
    	print('普通')    
else:
    print('其他')
    
#代码二:
score = input('please input your score >>>:')
score2 = int(score)
if score2 >= 90:
    	print('优秀')
elif score >= 80:
    	print('良好')
elif score >= 70:
    	print('普通')    
else:
    print('其他') 
    
#模拟登陆
db_username = 'syy'
db_password = '123'
username = input('please input your username >>>:')
password = input('please input your password >>>:')
if username == db_username and password == db_password:
    print('登陆成功')
else:
    print('登陆失败')
    
#每个星期的计划
如果今天是Monder,上班
如果今天是Tuesday,上班
如果今天是wednesday,上班
如果今天是Thursday,上班
如果今天是Friday,上班
如果今天是Saturday,出去浪
如果今天是Sunday,出去浪

代码一:
today = input('>>>: ')
if today == 'Monder':
    print('上班')
elif today == 'Tuesday':
    print('上班')
elif today == 'wednesday':
    print('上班')
elif today == 'Thursday':
    print('上班')
elif today == 'Friday':
    print('上班')
elif today == 'Saturday':
    print('出去浪')
elif today == 'Sunday':
    print('出去浪')
else:
    print('必须输入以下其中一个:
          Monder、Tuesday、wednesday、Thursday、Friday、Saturday、Sunday
          ')
代码二:
today = input('>>>: ')
if today in ['Monder','Tuesday','wednesday','Thursday','Friday','Saturday','Sunday']:
    print('出去浪')
elif today in ['Saturday','Sunday']:
    print('出去浪')
else:
    print('必须输入以下其中一个:
          Monder、Tuesday、wednesday、Thursday、Friday、Saturday、Sunday
          ')

while循环

定义:
	只要条件成立,就执行循环体代码,直到条件不成立

作用:
	重复的执行一个或多个代码块
	
语法一:
	while 条件:
        代码
        
语法二:
	while 条件:
        代码
        break
        
语法三:
	while 条件:
        代码
        continue
        
语法四:
	while 条件:
        代码1
    else:
    	print('while循环正常结束')
        
语法五:
	#break执行,else后面的代码将不会执行
	while 条件:
        代码1
        break
    else:
    	print('while循环正常结束')
        
语法六:
	while 条件:
        代码1
        continue
    else:
    	print('while循环正常结束')
        
    #只有当while循环根据条件正常结束才会走else后面的代码块,如果是主动结束(比如:break),那么,将不会走else后面的代码块
        
死循环:
    while True:
    	print('hello world')
        
结束循环-- break,结束整个while循环,不会执行后续的代码:
db_username = 'syy'
db_password = '123'
    while True:
        username = input('please input your username >>>:')
        password = input('please input your password >>>:')
        if username == db_username and password == db_password:
            print('登陆成功')
            break
        else:
            print('登陆失败')  
            
结束循环-- continel,结束本次while循环,不会执行本次后续的代码:
n = 1
while n < 11:
    if n == 4:
        n+=1
        continue
    print(n)
    n+=1
        
结束循环的第三种方式-- 改变条件,这种方式会执行后续的代码
m = True
n = 1
while m:
    if n == 99:
        m = False
    print(n)
    n+=1

while循环嵌套

代码一:
db_username = 'syy'
db_password = '123'
while True:
    username = input('please input your username >>>: ')
    password = input('please input your password >>>: ')
    if username == db_username and password == db_password:
        print('登录成功')
        while True:
            cmd = input('please input your cmd >>>: ')
            if cmd == 'q' or cmd == 'Q':
                break
            print('%s is runing' %cmd)
        break
    else:
        print('登陆失败')
        
代码二:
db_username = 'syy'
db_password = '123'
flag = True
while flag:
    username = input('please input your username >>>: ')
    password = input('please input your password >>>: ')
    if username == db_username and password == db_password:
        print('登录成功')
        while flag:
            cmd = input('please input your cmd >>>: ')
            if cmd == 'q' or cmd == 'Q':
                flag = False
            print('%s is runing' %cmd)
        flag = False
    else:
        print('登陆失败')
限制用户登录错误的尝试次数,
	1.用户尝试三次还不对的情况下直接结束程序。
    2.用户尝试三次错误之后,提示用户是否继续尝试,如果用户输入y,那么再给用户三次机会,如果用户输入q,直接结束程序

代码一:
db_username = 'syy'
db_password = '123'
count = 1
while count < 4:
    username = input('please input your username >>>: ')
    password = input('please input your password >>>: ')
    if username == db_username and password == db_password:
        print('登录成功')
    else:
        print('登陆失败')
        count+=1
else:
    print('登录次数已用尽,程序结束')
    
代码二:
db_username = 'syy'
db_password = '123'
count = 1
while count < 4:
    username = input('please input your username >>>: ')
    password = input('please input your password >>>: ')
    if username == db_username and password == db_password:
        print('登录成功')
    else:
        print('登陆失败')
    	count+=1
else:
    res = input('是否继续尝试>>>: ')
    count2 = 1
    while count2 < 4:
        if res == 'y':
            while count2 < 4:
                username = input('please input your username >>>: ')
                password = input('please input your password >>>: ')
                if username == db_username and password == db_password:
                    print('登录成功')
                else:
                    print('登陆失败')
                	count2 += 1
                print('6次登录次数已用尽,程序结束')
        elif res == 'q':
            print('3次登录次数已用尽,程序结束')
        else:
            print('请输入y/q')
            res = input('是否继续尝试>>>: ')
            
代码三:
db_username = 'syy'
db_password = '123'
n=1
while True:
    if n == 4:
        while True:
            res = input('3次访问次数已用尽,是否要继续输入?(y/n)')
            if res == 'y':
                n = 1
            	break           
            elif res == 'n':
                break
            else:
                print('请输入y/n')
    username = input('please input your username >>>: ')
    password = input('please input your password >>>: ')
    if username == db_username and password ==password:
        print('登录成功')
    else:
        print('登录失败')
        n+=1

for循环

优点:
	不依赖索引取值
    在容器中取完值自动结束
    整型、浮点型不能使用for循环直接取值,字符串、列表、字典可以使用for循环直接取值/key
    
语法一:
	for 变量名 in 容器类型:
        代码
        
语法二:    
    #break,结束整个循环
    for 变量名 in 容器类型:
        if 条件:
        	break
        代码
语法三:
    #continue,结束本次循环
    for 变量名 in 容器类型:
        if 条件:
        	continue
        代码  
        
语法四:    
    #break,结束整个循环,不会运行else中的代码块
    for 变量名 in 容器类型:
        if 条件:
        	break
        代码 
    else:
        代码
        
语法五:
    #continue,结束本次循环,会运行else中的代码块
    for 变量名 in 容器类型:
        if 条件:
        	continue
        代码 
    else:
        代码
        
循环打印:
	for i in range(1,10):		#range()函数顾头不顾尾
    	print(i)
        
range()在python2与python3中的区别:
	python2中range()就是一个列表
    python2中的xrange()就是python3中的range()
    python3中的range()本质上是一个迭代器,不会占用多余的内存

for循环的嵌套

打印99乘法表:
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
...
9*1=9 ... 9*9=81

代码:
    for i in range(1,10):
        for j in range(1,i+1):
            print('%s*%s=%s'%(i,j,i*j),end=' ')
        print()
        
    1*1=1 
    2*1=2 2*2=4 
    3*1=3 3*2=6 3*3=9 
    4*1=4 4*2=8 4*3=12 4*4=16 
    5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 
    6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 
    7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 
    8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 
    9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
    
#print(),打印出空行,相当于回车键
for i in range(1,10):
    print()

#print(end=' '),打印特殊符号,不换行
for i in range(1,10):
    print(i,end='|')
    
#打印金字塔
	#当前层级current_level	空格数		星号数
    	1					9		1
        2					8		3
        3					7		5
        
max_level = 10
for current_level in range(1,max_level+1):
    for i in range(max_level-current_level):
        print(' ',end='')
    for j in range(current_level*2-1):
        print('*',end='')
    print()
    
         *
        ***
       *****
      *******
     *********
    ***********
   *************
  ***************
 *****************
*******************

循环索引取值

#while + 字符串
l = 'hello world'
n =0
while n < len(l):
    print(l[n])
    n+=1

#while + 列表
l = [1,4,7,2,5,8,3,6,9]
n =0
while n < len(l):
    print(l[n])
    n+=1

#while + 字典
	#字典取值的2种方法,字典取值必须要知道键才能取值
    a = {'name':'syy','age':18,'habby':'run'}
    print(a['name'])
    print(type(['name']))
    print(a.get('name'))
    print(type(['name']))

    错误实例:
    L = {'name':'syy','age':18,'habby':'run'}
    # n = 0
    # while n < len(L):
    #     print(L[n])	#字典中没有索引,所以不能使用索引取值,字典必须通过键取值
    #     n+=1
    print(L[*])

#for + 字符串
l = 'hello world'
for i in l:
    print(i)

#for + 列表
    l = [1,4,7,2,5,8,3,6,9]
    for i in l:
        print(i)
    
#for + 字典
    L = {'name':'syy','age':18,'habby':'run'}
    for i in L:
        print(i)

    L = {'name': 'syy', 'age': 18, 'habby': 'run'}
    for i in L:
        print(i,L[i])

队列和堆栈

#队列,先进先出
x = []
x.append('first')
x.append('second')
x.append('third')

print(x.pop(0))
print(x.pop(0))
print(x.pop(0))

#堆栈,先进后出
x = []
x.append('first')
x.append('second')
x.append('third')

print(x.pop())
print(x.pop())
print(x.pop())
原文地址:https://www.cnblogs.com/syy1757528181/p/14059455.html