python中,str1是26个字母,str2是一篇英文文章,如何分别得每个字母在str2中的个数?

2021-03-11 11:46发布

python当中,有两个字符串,str1是26个字母,str2是一篇英文文章,如何分别得出每个字母在str2中的个数?for循环可以自动创建多个变量并一一赋值吗?

python当中,有两个字符串,str1是26个字母,str2是一篇英文文章,如何分别得出每个字母在str2中的个数?

for循环可以自动创建多个变量并一一赋值吗?


1条回答
Anonyem
2021-03-18 14:45





Python中str.format()方法详解

转载请注明出处:https://blog.csdn.net/jpch89/article/details/84099277




文章目录

Python中str.format()方法详解0.参考资料1.术语说明2.简单字段名2.1简单字段名的说明2.2省略字段名2.3数字形式的简单字段名2.4变量名形式的简单字段名2.5简单字段名的混合使用2.6使用元组和字典传参

3.复合字段名3.1复合字段名的说明3.2`.`点号的使用3.3`[]`方括号的使用

4.转换字段5.格式说明符5.1标准格式说明符的格式5.2填充与对齐方式5.3正负号5.4#号5.5最小宽度5.6分组选项5.7精度5.8类型码5.8.1字符串类型5.8.2整数类型5.8.3浮点数类型


6.补充说明





0.参考资料

FormatStringSyntaxPEP3101–AdvancedStringFormattingPythonformat格式化函数Python之format详解Python高级编程


  1. 术语说明

  2. str.format()方法通过字符串中的花括号{}来识别替换字段replacementfield,从而完成字符串的格式化。替换字段由字段名fieldname和转换字段conversionfield以及格式说明符formatspecifier组成,即一般形式为{字段名!转换字段:格式说明符}。字段名分为简单字段名simplefieldname和复合字段名compoundfieldname。而转换字段和格式说明符都是可选的。

2.简单字段名

2.1简单字段名的说明

简单字段名有三种写法:

省略不写{}数字{十进制非负整数}变量名{合法的Python标识符}

2.2省略字段名

花括号内省略字段名,传递位置参数。

替换字段形式:{}注意:花括号个数可以少于位置参数的个数,反之不然。

#省略字段名传递位置参数

print('我叫{},今年{}岁。'.format('小明',18))

"""

我叫小明,今年18岁。

"""


#花括号个数可以少于位置参数的个数

print('我爱吃{}和{}。'.format('香蕉','苹果','大鸭梨'))

"""

我爱吃香蕉和苹果。

"""


#花括号个数多于位置参数的个数则会报错

#print('我还吃{}和{}。'.format('西红柿'))

"""

IndexError:tupleindexoutofrange

"""


2.3数字形式的简单字段名

可以通过数字形式的简单字段名传递位置参数。

数字必须是大于等于0的整数。带数字的替换字段可以重复使用。数字形式的简单字段名相当于把format中的所有位置参数整体当作一个元组,通过字段名中的数字进行取值。即{0}等价于tuple[0],所以花括号内的数字不能越界。

#通过数字形式的简单字段名传递位置参数

print('身高{0},家住{1}。'.format(1.8,'铜锣湾'))

"""

身高1.8,家住铜锣湾

"""


#数字形式的简单字段名可以重复使用。

print('我爱{0}。她今年{1}。{0}也爱我。'.format('阿香',17))

"""

我爱阿香。

她今年17。

阿香也爱我。

"""


#体会把所有位置参数整体当成元组来取值

print('阿香爱吃{1}、{3}和{0}。'.format(

'榴莲','臭豆腐','皮蛋','鲱鱼罐头','螺狮粉'))

"""

阿香爱吃臭豆腐、鲱鱼罐头和榴莲。

"""


#尝试一下越界错误

#print('{1}'.format('错误用法'))

"""

IndexError:tupleindexoutofrange

"""


2.4变量名形式的简单字段名

使用变量名形式的简单字段名传递关键字参数。

关键字参数的位置可以随意调换。

#使用变量名形式的简单字段名传递关键字参数

print('我大哥是{name},今年{age}岁。'.format(name='阿飞',age=20))

"""

我大哥是阿飞,今年20岁。

"""


#关键字参数的顺序可以随意调换

print('我大哥是{name},今年{age}岁。'.format(age=20,name='阿飞'))

"""

我大哥是阿飞,今年20岁。

"""


2.5简单字段名的混合使用

混合使用数字形式和变量名形式的字段名,可以同时传递位置参数和关键字参数。关键字参数必须位于位置参数之后。混合使用时可以省略数字。省略字段名{}不能和数字形式的字段名{非负整数}同时使用。

#混合使用数字形式和变量名形式的字段名

#可以同时传递位置参数和关键字参数

print('这是一个关于{0}、{1}和{girl}的故事。'.format(

'小明','阿飞',girl='阿香'))

"""

这是一个关于小明、阿飞和阿香的故事。

"""


#但是关键字参数必须位于位置参数之后

#print('这是一个关于{0}、{1}和{girl}的故事。'.format(

#'小明',girl='阿香','阿飞'))

"""

SyntaxError:positionalargumentfollowskeywordargument

"""


#数字也可以省略

print('这是一个关于{}、{}和{girl}的故事。'.format(

'小明','阿飞',girl='阿香'))


#但是省略字段名不能和数字形式的字段名同时出现

#print('这是一个关于{}、{1}和{girl}的故事。'.format(

#'小明','阿飞',girl='阿香'))

"""

ValueError:cannotswitchfromautomaticfieldnumberingtomanualfieldspecification

"""



2.6使用元组和字典传参

str.format()方法还可以使用*元组和**字典的形式传参,两者可以混合使用。位置参数、关键字参数、*元组和**字典也可以同时使用,但是要注意,位置参数要在关键字参数前面,*元组要在**字典前面。

#使用元组传参

infos='钢铁侠',66,'小辣椒'

print('我是{},身价{}亿。'.format(*infos))

"""

我是钢铁侠,身家66亿。

"""

print('我是{2},身价{1}亿。'.format(*infos))

"""

我是小辣椒,身家66亿。

"""


#使用字典传参

venom={'name':'毒液','weakness':'火'}

print('我是{name},我怕{weakness}。'.format(**venom))

"""

我是毒液,我怕火。

"""


#同时使用元组和字典传参

hulk='绿巨人','拳头'

captain={'name':'美国队长','weapon':'盾'}

print('我是{},我怕{weapon}。'.format(*hulk,**captain))

print('我是{name},我怕{1}。'.format(*hulk,**captain))


"""

我是绿巨人,我怕盾。

我是美国队长,我怕拳头。

"""


#同时使用位置参数、元组、关键字参数、字典传参

#注意:

#位置参数要在关键字参数前面

#*元组要在**字典前面

tup='鹰眼',

dic={'weapon':'箭'}

text='我是{1},我怕{weakness}。我是{0},我用{weapon}。'

text=text.format(

*tup,'黑寡妇',weakness='男人',**dic)

print(text)

"""

我是黑寡妇,我怕男人。我是鹰眼,我用箭。

"""



3.复合字段名

3.1复合字段名的说明

同时使用了数字和变量名两种形式的字段名就是复合字段名。复合字段名支持两种操作符:

[]方括号.点号

3.2.点号的使用

传递位置参数

替换字段形式:{数字.属性名}只有一个替换字段的时候可以省略数字

#复合字段名中使用点号传递对象属性

classPerson:

def__init__(self,name,addr):

self.name=name

self.addr=addr



p=Person('辣妹子','重庆')


#点号用法:传递位置参数

print('我是{0.name},家在{0.addr}。'.format(p))

"""

我是辣妹子,家在重庆。

"""


#当只有一个替换字段的时候可以省略数字

print('{.name}辣!'.format(p))

"""

辣妹子辣!

"""


#试试传递文件对象的属性

f=open('out.txt','w')

print('文件名为:{.name}'.format(f))

f.close()

"""

文件名为:out.txt

"""


传递关键字参数

替换字段形式:{关键字参数名.属性名}

#点号用法:传递关键字参数

print('我是{girl.name},家在{girl.addr}。'.format(girl=p))

#和上一句等价

print('我是{p.name},家在{p.addr}。'.format(p=p))

"""

我是辣妹子,家在重庆。

我是辣妹子,家在重庆。

"""


3.3[]方括号的使用

传递位置参数

用列表传递位置参数用元组传递位置参数用字典传递位置参数

#方括号用法:用列表传递位置参数

infos=['阿星',9527]

food=['霸王花','爆米花']

print('我叫{0[0]},警号{0[1]},爱吃{1[0]}。'.format(

infos,food))

"""

我叫阿星,警号9527,爱吃霸王花。

"""


#方括号用法:用元组传递位置参数

food=('僵尸','脑子')

print('我叫{0[0]},年龄{1},爱吃{0[1]}。'.format(

food,66))

"""

我叫僵尸,年龄66,爱吃脑子。

"""


#方括号用法:用字典传递位置参数

dic=dict(name='阿星',pid=9527)

print('我是{[name]}!'.format(

dic))

#多个替换字段,不能省略数字

print('我是{0[name]},警号{0[pid]}。'.format(

dic))

"""

我是阿星!

我是阿星,警号9527。

"""


传递关键字参数

用列表传递关键字参数用元组传递关键字参数用字典传递关键字参数

#方括号用法:传递关键字参数

names=['皮卡丘']

dic={'name':'妙蛙花'}

skills=('十万伏特','飞叶快刀')

text='我是{names[0]},我会{skills[0]}。我是{dic[name]},我会{skills[1]}。'

text=text.format(names=names,skills=skills,dic=dic)

print(text)

"""

我是皮卡丘,我会十万伏特。我是妙蛙花,我会飞叶快刀。

"""



4.转换字段

转换字段conversionfield的取值有三种,前面要加!:

s:传递参数之前先对参数调用str()r:传递参数之前先对参数调用repr()a:传递参数之前先对参数调用ascii()


ascii()函数类似repr()函数,返回一个可以表示对象的字符串。但是对于非ASCII字符,使用\x,\u或者\U转义。


#转换字段

print('Iam{!s}!'.format('BruceLee李小龙'))

print('Iam{!r}!'.format('BruceLee李小龙'))

print('Iam{!a}!'.format('BruceLee李小龙'))

"""

IamBruceLee李小龙!

Iam'BruceLee李小龙'!

Iam'BruceLee\u674e\u5c0f\u9f99'!

"""



5.格式说明符

在替换字段中,格式说明符前面有一个冒号::{字段名!转换字段:格式说明符}其中格式说明符本身可以是一个字段名,比如:

print('{0:{1}}'.format(3.14159,'.4f'))

"""

3.1416

"""


5.1标准格式说明符的格式

如果不通过重写__format__方法来进行自定义的话,标准格式说明符的形式如下。其中方括号是可选的。[[fill]align][sign][#][0][width][grouping_option][.precision][type]中文形式可以写作:[[填充]对齐方式][正负号][#][0][宽度][分组选项][.精度][类型码]

5.2填充与对齐方式

填充:

只能是一个字符不指定默认用空格填充如果指定填充字符,则必须要同时指定对齐方式

对齐方式的取值:

<:左对齐>:右对齐^:居中=:在正负号(如果有的话)和数字之间填充,该对齐选项仅对数字类型有效。它可以输出类似+0000120这样的字符串。

注意:

如果不给定最小宽度width,对齐方式毫无意义。

5.3正负号

正负号选项仅对数字类型生效取值有三种:

+正数前面添加正号,负数前面添加负号-仅在负数前面添加负号(默认行为)空格:正数前面需要添加一个空格,以便与负数对齐

#正负号

print('{:哈=+8.2f}'.format(3.14159))

print('{:哈=+8.2f}'.format(-3.14159))

print('{:哈=+8.2f}'.format(0))

print('{:哈=+8.2f}'.format(-0))

"""

+哈哈哈3.14

-哈哈哈3.14

+哈哈哈0.00

+哈哈哈0.00

"""


5.4#号

#号:

给u二进制数加上0b前缀给八进制数加上0o前缀给十六进制数加上0x前缀

5.5最小宽度

最小宽度width:

如果不指定,最小字段宽度由内容决定,与内容相等如果最小宽度前面有一个前导0,意味着用0填充这等价于指定了0=的填充和对齐方式

5.6分组选项

分组选项grouping_option的取值有两种:

逗号,:使用逗号对数字以千为单位进行分隔。n类型的数字可以使用本地化的分隔符。


n类型在本机无法使用分组选项,原因可能是中文没有数字分隔符


#n类型使用本地化的分组选项,

#此项报错,我怀疑是因为中文没有数字的分隔符

#print('数字:{0:,n}'.format(6666))

"""

ValueError:Cannotspecify','with'n'.

"""


#使用d类型确实是可以的

print('数字:{0:,d}'.format(6666))

"""

数字:6,666

"""


下划线_:使用下划线对浮点数和d类型的整数以千为单位进行分隔。对于b、o、x和X类型,每四位插入一个下划线,其他类型都会报错。

#分组选项_作用于b类型

print('数字:{0:_b}'.format(0b100111011))

"""

数字:1_0011_1011

"""


#分组选项_作用于o类型

print('数字:{0:_o}'.format(0o426754316))

"""

数字:4_2675_4316

"""


#分组选项_作用于x类型

print('数字:{0:_x}'.format(0x2a846e98d))

"""

数字:2_a846_e98d

"""


#分组选项_作用于X类型

print('数字:{0:_X}'.format(0X2a846e98d))

"""

数字:2_A846_E98D

"""


#分组选项_作用于其他类型(比如n类型)

#print('字符串:{0:_n}'.format(1234567))

"""

ValueError:Cannotspecify','with'n'.

"""


5.7精度

精度:

精度指定了小数点后面要展示多少位小数对于非数字类型,精度指定了最大字段宽度整数类型不能指定精度

#对于非数字类型,精度指定最大字段宽度

print('{0:.3}'.format('哇哈哈哈哈哈'))

"""

哇哈哈

"""

#整数类型不能指定精度

print('{:.3d}'.format(666))

"""

ValueError:Precisionnotallowedinintegerformatspecifier

"""


5.8类型码

类型码可以分为三大类:

字符串类型整数类型浮点数类型

5.8.1字符串类型

s字符串类型。这是字符串的默认类型,可以省略。None不指定类型。同s类型。

#s类型

print('{0:s}'.format('略略略'))

#s类型可以省略

print('{0:}'.format('略略略'))

"""

略略略

略略略

"""


5.8.2整数类型

b二进制。

#b类型:二进制

print('{0:b}'.format(3))

"""

11

"""


c字符。把整数转换为相应的Unicode字符,然后再打印。

#c类型:把整数转换成unicode字符

print('{:c}'.format(97))

"""

a

"""


d十进制整数。

#d类型:十进制整数

print('{:d}'.format(666))

"""

666

"""


o八进制数。

#o类型:八进制数

print('{:o}'.format(10))

"""

12


x十六进制数,a到f小写。

#x类型:十六进制数,a到f小写

print('{:x}'.format(15))

"""

f

"""


X十六进制数,A到F大写。

#X类型:十六进制数,A到F大写

print('{:X}'.format(15))

"""

F

"""


n数字number类型,与d相同,只不过它会使用本地化的数字分隔符。


经试验,在本机为n类型指定任何分组选项(,和_)都会报错。ValueError:Cannotspecify','with'n'.


#n类型:与d相同,会插入本地化的分隔符

print('{:n}'.format(66666))

#经试验,本机无法为n指定任何分组选项(,_)

#print('{:,n}'.format(66666))

"""

ValueError:Cannotspecify','with'n'.

"""

#print('{:_n}'.format(66666))

"""

ValueError:Cannotspecify','with'n'.

"""


None不指定类型,与d相同。

5.8.3浮点数类型

e科学记数法,用e来表示指数。默认精度为6位

#e类型:科学记数法

#默认精度为6位

print('{:e}'.format(1234567.1234567))

"""

1.234567e+06

"""


E与e相同,但是使用大写的E表示指数。

#E类型:与e相同,用大写E表示指数

#默认精度为6位

print('{:E}'.format(1234567.1234567))

#修改精度为10位

print('{:.10E}'.format(1234567.1234567))

"""

1.234567E+06

1.2345671235E+06

"""


f定点记法,默认精度为6。

#f类型

#默认精度为6位

print('{:f}'.format(1234567.1234567))

"""

1234567.123457

"""


F定点记法,同f,但是会把nan转换成NAN,把inf转换成INF

#F类型

nan=float('nan')

inf=float('inf')

print('{:F}{:F}'.format(nan,inf))

"""

NAN

INF

"""


g通用general格式。自动转换到e或者f格式,具体的转换规则在此省略。正无穷、负无穷、正零、负零和非数字分别显示为inf,-inf,0,-0,nan。指定精度为0时等价于精度为1。默认精度为6位。

#g类型

print('{:g}'.format(1234567.1234567))

print('{:g}'.format(1234.1234))

"""

1.23457e+06

1234.12

"""


G通用general格式。自动转换到E或者F格式,转换规则同上,相应表示方式换成大写。

#g类型

print('{:g}'.format(1234567.1234567))

print('{:g}'.format(1234.1234))

"""

1.23457e+06

1234.12

"""


n数字number类型。跟g一样,只不过用本地化的分隔符来分隔数字。

#n类型

print('{:n}'.format(1234567.1234567))

print('{:n}'.format(1234.1234))

"""

1.23457E+06

1234.12

"""


#经试验,本机指定分组选项会报错

#print('{:,n}'.format(1234.1234))

"""

ValueError:Cannotspecify','with'n'.

"""

#print('{:_n}'.format(1234.1234))

"""

ValueError:Cannotspecify','with'n'.

"""


%百分号类型。会将数字乘以100,然后以f定点fixed-point格式显示,最后加上一个百分号%。

#%类型

print('{:%}'.format(1))

"""

100.000000%

"""


None不指定类型。输出效果类似调用str()函数。


6.补充说明

输出花括号需要用花括号本身来转义

#打印花括号需要使用花括号转义

print('{{{}}}'.format('张无忌'))

"""

{张无忌}

"""


对象可以自定义格式说明符来替换标准格式说明符,比如datetime类。

fromdatetimeimportdatetime

print("Todayis:{0:%a%b%d%H:%M:%S%Y}".format(datetime.now()))

"""

今天是:ThuNov1513:05:092018

"""



完成于2018.11.15




一周热门 更多>