30 字符串的基本操作 格式化字符串(%,Template类,format方法*****)

Python视频课程(5)—Python字符串
第一课 字符串的基本操作
# 字符串:基本操作 字符串取单个字母
s1 = "I love python."
print(s1[7]) # p
print(s1[11]) # o
# print(s1[15]) # 超过字符串长度 会报错

# 利用分片截取字符串的子字符串 取一段区间的字符串
print(s1[7:13]) # python
print(s1[7:]) # python.

print(s1[::2]) # Ilv yhn 取奇数位置的字母

s2 = "a b c d e f g"
print(s2[::2]) # abcdefg 取奇数位置的字母

s3 = "abc"
print(s3 * 10) # abcabcabcabcabcabcabcabcabcabc

print("python" in s1) # True
print("java" in s1) # False
print("java" not in s1) # True

# 求程度 求最大值 最小值
print(len(s1)) # 14
print(max(s1)) # y
print(min(s1)) # 一个空格 字符串的大小上已acall吗值来判断的

小结:
讲了字符串的取单个单词 字符串的索引取单词(取一段区间的字符串) 分片截取子字符串(需要指定开始索引和结束索引) 过滤不需要的值 用*来使得字符串想成复制字符串 用函数in 或者not in来判断单词是否在字符串中

下面讲解python中的字符串 有哪些高级的用法  很重要
第二课 格式化字符串基础  # 字符串格式化就是把一个或多个值替换另一个字符串的某个标记 通俗一点讲 就是替换字符串的标记
# 字符串格式化基础

# 什么叫字符串格式化:静态和动态两部分
# Hello Bill    Hello 李宁   Hello 张三
# Hello param_name  模板
# 字符串格式化就是把一个或多个值替换另一个字符串的某个标记
# 也就是把 静态不变的变成一个模板,把动态部分就像一个函数一下,在要用的时候,把值再放进去 // 在特定的场景下 最后形成一个完成的问候语句 

小结:
# %:格式化字符串   %s:字符串  %f 浮点数   %d 整数   (把格式化的值原样输出,也可以改变输出的值,比如下面的例子求pi的值保留2位)

# step1:定义一个模板  %s:字符串 模板中会有静态部分 和 动态部分
formatStr = "Hello %s,Today is %s,Are there any activities today?"
# step2:准备要替换标记的值 这2个值我们可以用元组来指定
values = ("John", "Wednesday")
# step3:替换标记
print(formatStr % values) # Hello John,Today is Wednesday,Are there any activities today?

# %f 浮点数   %d 整数
from math import pi
formatStr = "PI是圆周率,PI的值是%.2f(保留小数点后%d位)"
values1 = (pi,2)
print(formatStr % values1) # PI是圆周率,PI的值是3.14(保留小数点后2位)

formatStr1 = "这件事的成功率是%d%%,如果有%s参与的话,成功率会提升至%d%%"   # %d%% 后面的2个% 表示 保留 %
values2 = (56, "John", 70)
print(formatStr1 % values2) # 这件事的成功率是56%,如果有John参与的话,成功率会提升至70%

formatStr2 = "这件事的成功率是%d%%,如果有%s参与的话,成功率会提升至%d%%"
values2 = (56, "John",70,33)
print(formatStr2 % values2) # values2定义的元组值多了或者少了,都会抛出异常
第三课 使用Template类格式化字符串 (把格式化的值原样输出)
# 用Template类格式化字符串  无论用什么方法去格式化字符串 都少不了2个 一个是标记 一个是用什么方法启格式化字符串
# 标记 $name   $age   $price    // 这个和我们的 shell 中的 引用变量有点像
# 用什么方式来格式化字符串:substitute 方法

from string import Template
template1 = Template("$lang是我最喜欢的编程语言,$lang非常容易学习,而且功能强大.")
print(template1.substitute(lang = ‘Python‘))    # 这里 调用 关键字参数 lang
# Python是我最喜欢的编程语言,Python非常容易学习,而且功能强大.

template2 = Template("${s}stitute")
print(template2.substitute(s = "sub"))
# substitute

template3 = Template("$dollar$$相当于多少$pounds")         # $dollar$$  后面的就表是 原始的值
print(template3.substitute(dollar =20, pounds = "英镑"))
# 20$相当于多少英镑

template4 = Template("$dollar$$相当于多少$pounds")
data = {}   # 这是用字典的方式 这个后面详细都讲到      这一部分用的是字典来进行格式化的
data[‘dollar‘] = 100
data[‘pounds‘] = ‘英镑‘ 

print(template4.substitute(data))
# 100$相当于多少英镑 

from string import Template
template01 = Template("Hello $name,Today is $date,Are there any activities today?")
print(template01.substitute(name = "majihui",date = "Wednesday"))
#Hello majihui,Today is Wednesday,Are there any activities today?

template02 = Template("PI是圆周率,值为$pi(保留$num位小数)")
print(template02.substitute(pi = pi ,num = 2))
# PI是圆周率,值为3.141592653589793(保留2位小数)

template03 = Template("这件事的成功率是$num1,如果有$name参与的话,成功率会提升至$num2")
print(template03.substitute(num1 = ‘50%‘ ,name = "majihui", num2 = ‘60%‘))
# 这件事的成功率是50%,如果有majihui参与的话,成功率会提升至60%
第四课  使用format方法格式化字符串 (把格式化的值原样输出)
# 使用format方法格式化字符串   也就是说,我们用字符串本身的format方法去格式化字符串本身 

# 标记(格式化参数):{...}
# 如何进行格式化:"template".format(...)

# 按顺序来指定格式化参数值
s1 = "Today is {}, the temperature is {} degrees."
print(s1.format("Saturday", 30))
# Today is Saturday, the temperature is 30 degrees.

# 使用命名格式化参数
s2 = "Today is {week}, the temperature is {degree} degrees."
print(s2.format(week = "Sunday", degree= 21))
print(s2.format(degree= 21,week = "Sunday"))
# Today is Sunday, the temperature is 21 degrees.

# 混合使用顺序格式化参数和命名格式化参数
s3 = "Today is {week}, {}, the {} templature is {degree} degrees."
print(s3.format("abcd", 1234, degree = 43, week="Sunday"))
# print(s3.format("abcd", degree = 43,1234,  week="Sunday"))  # 抛出异常 前面必须为顺序的传入参数值
# Today is Sunday, abcd, the 1234 templature is 43 degrees.

# 使用序号格式化参数   加序号,从0开始
s4 = "Today is {week}, {1}, the {0} temperature is {degree} degrees."
print(s4.format("abcd",1234,degree=44,week="Sunday"))
# Today is Sunday, 1234, the abcd temperature is 44 degrees.

# 获取列表中的指定值
fullname = ["Bill", "Gates"]
s5 = "Mr. {name[1]}"
print(s5.format(name = fullname)) # Mr. Gates
#s7 = "Mr. {fullname[0]}"                #  我用都这种方法不对  这个是不对的
#print(s7.format("Mr. {fullname[0]}")) 

import math
s6 = "The {mod.__name__} module defines the value {mod.pi} for PI"    # .__name__ 就是模块的一个方法,可以直接用
print(s6.format(mod = math))
# The math module defines the value 3.141592653589793 for PI 

print("-----------------------")
s1 = "Hello {},Today is {},Are there any activities today?"
print(s1.format("majihui","Wednesday"))
# Hello majihui,Today is Wednesday,Are there any activities today?

s2 = "PI是圆周率,值为{pi}(保留2位小数)"
print(s2.format(pi = pi))
# PI是圆周率,值为3.141592653589793(保留2位小数)

s3 = "这件事的成功率是{},如果有{}参与的话,成功率会提升至{}"
print(s3.format(‘50%‘,‘majihui‘,‘60%‘))
# 这件事的成功率是50%,如果有majihui参与的话,成功率会提升至60%
第五课 更进一步控制字符串格式化参数  字符串格式化类型符  format方法
# 更进一步控制字符串格式化参数

# 字符串格式化类型符
# repr函数  repr(‘a‘) = ‘a‘  str(‘a‘) = a      repr输出的就是py的字符串的输出格式
# 原样输出的 用 !s        调用repr函数输出用 !r       Unicode编码输出用 !a
s1 = "原样输出:{first!s}  调用repr函数:{first!r}  输出Unicode编码:{first!a}"
print(s1.format(first = "中"))
# 输出的结果为  : 原样输出:中  调用repr函数:‘中‘  输出Unicode编码:‘\u4e2d‘

# 将一个整数按浮点数格式输出         :f 字符串格式化类型符
s2 = "整数:{num}  浮点数:{num:f}"
print(s2.format(num=123))
# 整数:123  浮点数:123.000000

# 进制转换
s3 = "十进制:{num}  二进制:{num:b}  八进制:{num:o}   十六进制:{num:x}"
print(s3.format(num = 78))
# 十进制:78  二进制:1001110 八进制:116  十六进制:4e 

# 原有的方式是这样的
n = 78
print(bin(n))   # 0b1001110
print(oct(n))   # 0o116
print(hex(n))   # 0x4e

# 将整数按科学计数法
s4 = "科学计数法:{num:e}"
print(s4.format(num =6789))
# 科学计数法:6.789000e+03
m = 6789
print(format(m,‘e‘))
# 6.789000e+03

#  将浮点数按百分比输出
s5 = "百分比:{num:%}"
print(s5.format(num = 0.34))
# 百分比:34.000000%

小结
‘‘‘
a  将字符串按Unicode编码输出
b  将一个整数格式化为一个二进制数
c  将一个整数解释成ASCII
d  将整数格式化为十进制的数
e/E  科学计数法表示
f/F  将一个整数格式化为浮点数,(nan和inf)转换为小写
g/G  会根据整数值的位数,在浮点数和科学计数法之间切换,在整数位超过6位时,与e相同,否则与f相同
o   将一个整数格式化为八进制
s   按原样格式化字符串
x/X 将一个整数格式化为十六进制数
%   将一个数值格式化为百分比形式

‘‘‘

小结:
推荐使用format 去格式化字符串,也可以格式化数字,其实都是可以的,看个人的选择。
参考链接: 07 python 数字的格式化输出 format(重要) https://blog.51cto.com/12445535/2463368

原文地址:https://blog.51cto.com/12445535/2464339

时间: 2024-10-13 06:42:21

30 字符串的基本操作 格式化字符串(%,Template类,format方法*****)的相关文章

.net的字符串插值,格式化字符串

之前一直用老版本的.net,那时候基本都是string.Format(),最近用了下新版本的还有dotnet core2.0 发现有了种新的插值方法,或者叫格式化方法.就是用$"..."的方式实现直接插值的方法,这样就不用老formatter,而且更直观. 我举个例子 string who = "I"; string where = "in the office"; DateTime when = DateTime.Now; string thi

格式化字符串利用小结

格式化字符串利用小结 格式化字符串漏洞基本原理: Printf()函数的一般形式为printf("format",输出表列),其第一个参数就是格式化字符串,用来告诉程序以什么格式进行输出.正常情况下,这样使用: char str[100]; scanf("%s",str); printf("%s",str); 但也有人这么用: char str[100] scanf("%s",str); printf(str) 也许代码编写者

python_Python中用format函数格式化字符串的用法

这篇文章主要介绍了Python中用format函数格式化字符串的用法,格式化字符串是Python学习当中的基础知识,本文主要针对Python2.7.x版本,需要的朋友可以参考下 自python2.6开始,新增了一种格式化字符串的函数str.format(),可谓威力十足.那么,他跟之前的%型格式化字符串相比,有什么优越的存在呢?让我们来揭开它羞答答的面纱. 语法 它通过{}和:来代替%. “映射”示例 通过位置 In [1]: '{0},{1}'.format('kzc',18) Out[1]:

【Python】格式化字符串和format函数

## 本文基于Python3,可能存在部分内容不适配Python2 1. 最简单的字符串的输出: str1 = 'popma is so cool' print(str1) 输出: popma is so cool 2. '%S'格式化字符串输出: 格式化字符串时,字符串中有格式符,字符串就变成一个模板了: 例如: str2 = '%s is so cool' %'popma' print(str2) 输出还是像上面的一样,可以试试看. 但是如果有多个格式符,如何处理呢?Python用一个tup

Python进阶-----通过类的内置方法__format__自定制格式化字符串

__format__方法可以自定格式化字符串,不定义的话会执行默认格式format(obj) 等同于--> obj.__format__ format_dic = { 'y-m-d':'{obj.year}-{obj.mon}-{obj.day}', 'd/m/y':'{obj.day}/{obj.mon}/{obj.year}' } class Date: def __init__(self,year,mon,day): self.year = year self.mon = mon self

Python格式化字符串知多少

字符串格式化相当于字符串模板.也就是说,如果一个字符串有一部分是固定的,而另一部分是动态变化的,那么就可以将固定的部分做成模板,然后那些动态变化的部分使用字符串格式化操作符(%) 替换.如一句问候语:“Hello 李宁”,其中“Hello”是固定的,但“李宁”可能变成任何一个人的名字,如“乔布斯”,所以在这个字符串中,“Hello”是固定的部分,而“李宁”是动态变化的部分,因此,需要用“%”操作符替换“李宁”,这样就形成了一个模板. Hello %s 上面的代码中,“%”后面的s是什么呢?其实字

格式化字符串攻击原理及示例

一.类printf函数簇实现原理 类printf函数的最大的特点就是,在函数定义的时候无法知道函数实参的数目和类型. 对于这种情况,可以使用省略号指定参数表. 带有省略号的函数定义中,参数表分为两部分,前半部分是确定个数.确定类型的参数,第二部分就是省略号,代表数目和类型都不确定的参数表,省略号参数表中参数的个数和参数的类型是事先的约定计算出来的,每个实参的地址(指针)是根据确定参数表中最后一个实参的地址算出来的. 这里涉及到函数调用时的栈操作.函数栈的栈底是高地址,栈顶是底地址.在函数调用 时

格式化字符串攻击原理及示例.RP

格式化字符串攻击原理及示例 一.类printf函数簇实现原理 类printf函数的最大的特点就是,在函数定义的时候无法知道函数实参的数目和类型. 对于这种情况,可以使用省略号指定参数表. 带有省略号的函数定义中,参数表分为两部分,前半部分是确定个数.确定类型的参数,第二部分就是省略号,代表数目和类型都不确定的参数表,省略号参数表中参数的个数和参数的类型是事先的约定计算出来的,每个实参的地址(指针)是根据确定参数表中最后一个实参的地址算出来的. 这里涉及到函数调用时的栈操作.函数栈的栈底是高地址,

.NET中DateTime.Now.ToString的格式化字符串

.NET中DateTime.Now.ToString显示毫秒:DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") DateTime.Now.ToString的其他格式化字符串:   格式化字符串 释义 示例 D long date Thursday, 10 April 2008 d short date 04/10/2008 F full date long Thursday, 10 April 2008 06:30:00 f full d