基于网络课程《Python全栈开发专题》 记录笔记,请支持正版课程。
字符串格式化
%
的使用
# %s 代表字符串的占位符
formatStr = 'Are you %s? I\'m %s.'
values = ('OK', 'XiaoMing')
print(formatStr % values)
# %f 浮点数
# %d 整数
from math import pi;
# formatStr = 'PI是圆周率,PI的值是:%f'
formatStr = 'PI是圆周率,PI的值是:%.2f (保留小数点后%d位)'
values = (pi, 2)
print(formatStr % values)
# %转义: %%
formatStr = '降水概率%d%%'
values = (57)
print(formatStr % values)
用Template类格式化字符串
from string import Template
template1 = Template('$lang是一种编程语言,$lang很容易学习,给你打$score分。')
# 用命令参数传入
print(template1.substitute(lang='Python', score=100))
# 可以使用${}
template2 = Template('${s}stitute')
print(template2.substitute(s='sub'))
# 转义:$$
template3 = Template('$dollar$$相当于多少$pounds英镑')
print(template3.substitute(dollar=20, pounds=25))
# 也可以传入字典
template4 = Template('姓别$sex,爱好$like')
data = {}
data['sex'] = '男'
data['like'] = '女'
print(data)
print(template4.substitute(data))
使用format格式化字符串
# 匿名,按顺序传参
s1 = '今天是 {}, 温度{}。'
print(s1.format('星期三', '24摄氏度'))
# 使用命名参数传参
s2 = '今天是 {week}, 温度{x}。'
print(s2.format(week = '星期三', x = '26度'))
# 匿名和命名的混用
s3 = '一{}, 二{two}, 三{three}, 四{}'
# 把所有匿名的放在前面,命名的随便写
print(s3.format(1, 4, two=2, three=3))
# 使用序号格式化参数
s4 = '一{1}, 二{two}, 三{0}, 四{four}'
print(s4.format(3, 1, two=2, four=4))
# 获取列表中的指定值
nums = [1, 2, 3, 4]
s5 = '一{nums[0]}, 二{nums[1]}, 三{nums[2]}, 四{nums[3]}'
print(s5.format(nums=nums))
# 使用属性
import math
s6 = 'The {mod.__name__} module defines the vlaue for {mod.pi}'
print(s6.format(mod=math))
format字符串格式化类型符
- a 将字符串按unicode编码输出
- b 将一个整数格式化为一个二进制数
- c ASCII
- d 十进制
- e/E 科学计数法
- f/F 浮点数
- g/G 会根据整数时的位数在浮点数和科学计数法之间切换,在整数位超过6位时与E相同,否则与F相同
- o 八进制
- s 按原样格式化字符串
- x/X 十六进制(大小写字母)
- % 百分比
s1 = '原样输出: {first!s}; 调用repr函数: {first!r} 输出Unicode:{first!a}'
print(s1.format(first="中"))
# 将一个整数按浮点数格式输出
s2 = '整数:{num}; 浮点数: {num:f}'
print(s2.format(num=5))
# 进制转换
s3 = '十进制:{num}; 二进制:{num:b}; 八进制:{num:o}; 十六进制:{num:x}'
print(s3.format(num=128))
# 科学计数法
s4 = '科学计数法:{num:e}'
print(s4.format(num = 678980000000000000))
# 浮点数按百分比输出
s5 = '百分比:{num:%}'
print(s5.format(num=0.3478)) # 34.780000%
s5 = '百分比:{num:.1%}'
print(s5.format(num=0.3478)) # 34.8%
format 字段宽度、精度、千位分隔符
# 固定宽度
print("a:{num:12}".format(num = 32))
print("a:{num:<12}".format(num = 32))
print("a:{num:^12}".format(num = 32))
# create table
print("{header1:8}{header2:5}".format(header1='姓名', header2='年龄'))
print("{cell11:8}{cell12:5}".format(cell11='张三', cell12=18))
print("{cell21:8}{cell22:5}".format(cell21='李四', cell22=23))
print("{cell31:8}{cell32:5}".format(cell31='二狗', cell32=27))
# 精度
from math import pi
import math
print('float number: {pi:.2f}'.format(pi=pi))
print('float number: {obj.pi:.2f}'.format(obj=math))
print('float number: {pi: 20.4f}'.format(pi = pi))
# 截取字符串
print('{msg:.5}'.format(msg='hello world')) # 截取前5个字符
# 千位分隔符
print('GooGol is {:,}: '.format(10 ** 100))
对齐和填充
from math import pi
print('{pi:012.3f}'.format(pi = pi)) # 00000003.142
print('{pi:0>12.3f}'.format(pi = pi)) # 00000003.142
# < 左对齐 ^ 居中 > 右对齐
print('{pi:#>12.3f}'.format(pi = pi)) # #######3.142
print('{pi:#>12.3f}'.format(pi = -pi)) # ######-3.142
print('{pi:0=12.3f}'.format(pi = -pi)) # -0000003.142
center方法
# < hello >
print('<' + 'hello'.center(30) + '>') # < hello >
print('<{:^30}>'.format("hello")) # 同上
# 填充左右
print('<' + 'hello'.center(20, '*') + '>') # <*******hello********>
print('<{:*^20}>'.format("hello")) # 同上
find方法
s = 'hello world'
print(s.find('world')) # 6
# find一个不存在的
print(s.find('x')) # -1
# 出现多次的,返回第一次出现的位置
print(s.find('o')) # 4
# 从第六个位置开始找
print(s.find('o', 6)) # 7
# 指定起始位置,左闭右开
print(s.find('l', 5, 9))
join方法
myList = ['a', 'b', 'c', 'd', 'e']
s = '*'
print(s.join(myList)) # a*b*c*d*e
print(' | '.join(myList)) # aAAAbAAAcAAAdAAAe
# 生成win/Unix系统路径
# C:/usr/local/nginx
# /usr/local/nginx
dirs = '', 'usr', 'local', 'nginx'
linuxPath = '/'.join(dirs)
winPath = 'C:' + '\\'.join(dirs)
print(linuxPath)
print(winPath)
#
numList = [1, 2, 3, 4, 5]
# 抛出异常
# print('a'.join(numList))
'''
Traceback (most recent call last):
File "H:\PythonWorkSpace\first-python\src\First.py", line 19, in <module>
print('a'.join(numList))
TypeError: sequence item 0: expected str instance, int found
'''
split方法
s1 = 'a b c d e f'
print(s1.split()) # ['a', 'b', 'c', 'd', 'e', 'f']
s2 = 'a**b**c**d**e**f'
print(s2.split('**')) # ['a', 'b', 'c', 'd', 'e', 'f']
path = '/usr/local/nginx'
pathList = path.split('/')
print(pathList) # ['', 'usr', 'local', 'nginx']
winPath = 'D:' + '\\'.join(pathList)
print(winPath) # D:\usr\local\nginx
upper, lower和capwords
print('Apple'.lower())
print('Apple'.upper())
myList = ['Python', 'Ruby', 'Java', 'Kotlin']
if 'KOTLIN' in myList:
print('找到Kitlin!')
else:
print('未找到Kotlin')
for lang in myList:
if 'kotlin' == lang.lower():
print("OK")
break
from string import capwords
s = 'i not only like python, but alse like kotlin.'
print(capwords(s)) # I Not Only Like Python, But Alse Like Kotlin.
replace和strip
s = 'abcdaaefg'
print(s.replace('a', '12345')) # 12345bcd1234512345efg
print(s.replace('xxxxxxx', '12345')) # 没有就不替换
# strip (trim)
print(' asdfasdf asdfasf '.strip())
# 可以输入多种字符,几个字符之间是“或”的关系
s = '*** $$* Hello * World ***$$$'
print(s.strip(' *$')) # Hello * World
translate 和 maketrans
"".translate()替换单个字符串
# translate 替换单个字符
s = "I'm not only like Python, but also like Kotlin."
# 把“a”替换成"*",把“k”替换成“$”
table = s.maketrans('ak', '*$') # {97: 42, 107: 36} ASCII : 97-a ; 42-* ; 107-k ; 36-$
print(s.translate(table)) # I'm not only li$e Python, but *lso li$e Kotlin.
table1 = s.maketrans('ak', '*$', 'P te') # {97: 42, 107: 36, 80: None, 32: None, 116: None, 101: None}
print(s.translate(table1)) #
练习1:统计字符串出现的次数
s = input("请输入一个字符串:")
while True:
subStr = input('请输入要统计的字符串:')
if subStr == 'exit()':
break
i = 0
count = 0
while i < len(s):
index = s.find(subStr, i)
if index > -1:
count += 1
i = index + len(subStr)
else:
break;
print('"{}"在字符串"{}"中出现了{}次。'.format(subStr, s, count))
练习2:生成一个正三角形
方法一:
n = int(input("要生成多少行:"))
# 底边宽度: 2n-1
for i in range(1, n + 1):
print("{}".format((2 * i - 1) * '*').center(2 * n-1))
方法二:
n = int(input("要生成多少行: "))
for i in range(1, n + 1):
if i == n:
print('{}{:*<{char}}'.format('', '', char=(2 * i - 1)))
else:
print('{:{blank}}{:*<{char}}'.format('', '', blank=(n-i), char=(2 * i - 1)))