九.格式化
格式化字符串(通过center,ljust,rjust方法做居中,左对齐和右对齐的处理,在字符串左侧补零,使用zfill方法。)
s='hello,world'
#center方法以宽度20将字符串居中并在两侧填充*
print(s.center(20,'*') )
运行后:
#****hello,world****
(123456789...........)
#rjust方法以宽度20将字符串右对齐并在左侧填充空格.
print(s.rjust(20) )
运行后:
# hello,world
123456789...... .....
#ljust方法以宽度20将字符串左对齐并在右侧填充~
print(s.ljust(20,'~') )
运行后:
#hello,world~~~~~~~~
#在字符串左侧补0
print('33',zfill(5))
运行后:
#00033
print('-33',zfill(5))
运行后:
#-0033
print函数输出字符串
a=321 b=123 print('%d*%d=%d'%(a,b,a*b)运行后: #321*123=39483
字符串的方法
a=321 b=123 print('{0}*{1}={2}'.format(a,b,a*b)
运行后: #321*123=39483
如需进一步控制格式化变量值形式,参考以下:
| 变量值 | 占位符 | 格式化结果 | 说明 |
| 3.1415926 | {:.2f} | '3.14' | 保留小数点后两位 |
| 3.1415926 | {:+.2f} | '+3.14' | 带符号保留小数点后两位 |
| -1 | {:+.2f} | '-1.00' | 带符号保留小数点后两位 |
| 3.1415926 | {:.0f} | '3' | 不带小数 |
| 123 | {:0>10d} | '0000000123' | 左边补0,补够十位 |
| 123 | {:x<10d} | '123xxxxxxx' | 右边补x,补够十位 |
| 123 | {: >10d} | ' 123' | 左边补空格,补够十位 |
| 123 | {: <10} | '123 ' | 右边补空格,补够十位 |
| 123456789 | {:, } | '123,456,789' | 逗号分隔格式 |
| 0.123 | {:.2%} | '12.30%' | 百分比格式 |
| 123456789 | {:.2e} | '1.23e+08' | 科学计数法格式 |
修剪操作(将原字符串修剪掉左右两端空格之后的字符串)
S=' tuling_python@126.com /t/r/n' #strip方法获得字符串修剪左右两侧空格之后的字符串 print(s.strip() ) 运行后: #tuling_python@126.com
替换操作:replace
S='hello,world' print(s.replace('o','@')) 运行后: #hell@,w@rld print(s.replace('o','@',1)) 运行后: #hell@,world
拆分/合并操作 split(默认空格进行拆分)
S='I love you' words=s.split() print(words) 运行后: #['I','love','you'] print('#'.join(words)) 运行后: #I#love#you
不默认空格,指定其他字符拆分
S='I#love#you#so#much' words=s.split('#') print(words) 运行后: #['I','love','you','so','much'] words=s.split('#',3) print(words) 运行后: #['I','love','you','so#much']
十.集合
常用数据结构之集合(set)
集合定义:把一定范围的,确定的,可以区别的事物当作一个整体来看待。集合中的各个事物通常称为集合的元素。
集 1.无序性:一个集合中,每个元素的地位都是相同的,元素之间是无序的。
合 2.互异性:一个集合中,任何两个元素都是不相同的。即元素在集合中只能出现一次。
特 3.确定性:给定一个集合和一个任意元素,该元素要么属这个集合,要么不属这个集 合,二者必居其一。
性
集合的运算
一.成员运算(通过成员运算in和not检查元素是否在集合中)
set1={11,12,13,14,15} (支持数字)
print(10 in set1) #False (说明十不在集合中)print(15 in set1) #True (在集合中)
set2={'python','Java','Go','Swift'} (支持字符串)
print('Ruby' in set2) #False
print('Java' in set2) #True
取反print('Ruby' not in set2) #True
二.交并差运算
set1={1,2,3,4,5,6,7}
set2={2,4,6,8,10}
#交集
#方法一:使用&运算符
print(set1&set2) #{2,4,6}
#方法二:使用inter section方法
print(set1.intersection(set2)) #{2,4,6}
#并集
#方法一:使用 | 运算符
print(set1|set2) #{1,2,3,4,5,6,7,8,10}
#方法二:使用union方法
print(set1.union(set2)) #{1,2,3,4,5,6,7,8,10}
差集
#方法一:使用——运算符
print(set1——set2) #{1,3,5,7}
#方法二:使用difference方法
print(set1.difference(set2)) #{1,3,5,7}
#对称差
#方法一:使用^运算符
print(set1^set2) #{1,3,5,7,8,10}
#方法二:使用symmetric_difference方法
print(set1.symmetric_difference(set2)) #{1,3,5,7,8,10}
#方法三:对称差相当于两个集合的并集减去交集
print(set1|set2)-(set1&set2)) #{1,3,5,7,8,10}
三.比较运算
两个集合用==和!=进行相等性判断,若两个集合中元素相同,那么==比较结果为True,反之为False。
若集合A的任意一个元素都是集合B的元素,那么集合A称为集合B的一个子集,即A是B的子集,反过来也可称B是A的超集。若A是B的子集且A不等于B,那么A就是B的真子集。
set1={1,3,5}
set2={1,2,3,4,5}
set3=set2
# < 运算符表示真子集,<=运算符表示子集
print(set1
print(set2
#通过issubset方法也能进行子集判断
print(set1.issubset(set2)) #True
#反过来可用issuperset或>运算符进行超集判断
print(set2.issuperset(set1)) #True
print(set2>set1) #True
集合的方法
python中的集合是可变类型,可添加或删除元素。
#创建一个空集合
set1=set ( )
#通过add单独添加元素
set1.add(33)
set1.add(55)
set1.update{1,10,100,1000}
print(set1) #{1,10,33,55,100,1000}
#通过discard方法删除指定元素
set1.discard(1)
print(set1) #{10,33,55,100,1000}
#通过remove方法删除指定元素,建议先做成员运算再删除
#否则元素如果不在集合中就会引发Key Error异常
if 10 in set1:
set.remove(10)
print(set1) #{33,55,100,1000}
#pop方法可以从集合中随机删除一个元素并返回元素
print(set1.pop() )
#clear方法可以清空整个集合
set.clear()
print(set1) #set( )
若要判断两个集合有无相同元素可用isdisjoint方法,没有相同元素返回True,否则返回False。
set1={'Java','Python','Go','kotlin'}
set2={'kotlin','Swift','Java','Objective_c','Dart'}
set3={'HTML','CSS','JavaScript'}
print(set1.isdisjoint(set2)) #False
print(set1.isdisjoint(set3)) #True
不可变集合
Python中还有一种不可变类型的集合,名字叫frozenset.
set跟 frozenset的区别如同list跟tuple的区别。
frozenset可计算出哈希码,因此它可以作为set中的元素,除了不能添加和删除元素,frozenset在其他方面与set基本一致。
set1=frozenset({1,3,5,7})
set2=frozenset(range(1,6))
print(set1&set2) #frozenset({1,3,5})
print(set1|set2) #frozenset({1,2,3,4,5,7})
print(set1—set2) #frozenset({7})
print(set1
十一.函数基础
函数基本使用
一.函数的定义
def函数名( ):
函数封装的代码
……
1)def是英文define缩写
2)函数名称要表达函数封装代码的功能,以便后续调用
3)函数名称的命名应该符合标识符的命名规则
·可以由字母,下划线,数字组成
·不能以数字开头
·不能与关键字重名
二.pycharm的调试工具
·F8Step Over可以单步执行代码,会把函数调用看作是一行代码直接执行
·F7Step Into可以单步执行代码,若是函数,则进入函数内部。
三.函数的文档注释
·在开发中,若希望给函数添加注释,可在定义函数的下方,使用连续的三对引号
·在连续的三对引号之间编写对函数的说明文字
·在函数调用位置,使用快捷键ctrl+Q可查看函数的说明信息
注:因函数体相对比较独立,函数定义的上方,应该和其他代码(包括注释)保留两个空行.
四.函数参数的使用
#关于函数的参数使用
def sum_2_num():
num1=10
num2=20
res=num1+num2
print('%d+%d=%d'%(num1,num2,res))
sum_2_num() #10+20=30
#当前的函数计算的值被固定的
'''
需求:
用户可以自行传入两个值
针对两个值进行计算
'''
def sum_2_num_1(num1,num2):
res=num1+num2
print('%d+%d=%d'%(num1,num2,res))
sum_2_num_1( , )
# 用户自行输入,例:50 20
#50+20=70
五.函数的返回值(注:return表示返回,后续代码不能被执行)
def sum_2_num(num1,num2):
return num1+num2
print('这是一个测试’)
#在函数中使用return后续的代码是不会被执行的,return代表当前函数已经执行完毕
#我们可以使用一个变量进行函数的返回值的接收.
res=sum_2_num( , )
# 自行输入,例:20 30
print('计算结果:%d'%res) #计算结果:50 (只执行return之前的操作)
六.函数的嵌套调用
·一个函数里又调用了另外一个函数。
·在函数test2中,调用了另一个函数test1,则先将test1中任务执行完,才回到test2中调用test1的位置,继续执行。
#需求2 定义一个函数能够打印5行分割线且符合需求1
def print_line_1(char,num):
print(char*num)
def print_line_2(char,num):
row=0
while row<5:
print_line_1(char,num)
row +=1
print_line_2('*',3)
运行后:
#***
***
***
***
***
七.使用模块中的函数(模块是python程序架构的一个核心概念)
·模块好比工具包,要想使用,就需导入import这个模块。
·每一个以扩展名py结尾的python源代码文件都是一个模块。
·在模块中定义的全局变量,函数都是模块能提供给外界使用的工具。
python 笔记1.0 完



