常用字符串格式化有哪几种
现在有一需求,问用户的姓名、年龄、工作、爱好,然后打印成以下格式
------------ info of Alex Li -----------
Name : XXX
Age : XX
job : XXX
Hobbie: XXX
------------- end -----------------
1、format 格式化输出
三种方式
1、
name = input('姓名')
age = int(input('年龄'))
job = input('工作')
Hobbie = input('爱好')
mingpian = '''
------------ info of {} -----------
Name : {}
Age : {}
job : {}
Hobbie: {}
------------- end -----------------
'''.format(name,name,age,job,Hobbie)
print(mingpian)
2、按索引添加
#同上
# 注意:索引必须从 0 开始计算
mingpian = '''
------------ info of {0} -----------
Name : {0}
Age : {1}
job : {2}
Hobbie: {2}
------------- end -----------------
'''.format(name,age,job) # 只用三个词表示 5个量
print(mingpian)
3、利用关键字参数
#同上
mingpian = '''
------------ info of {a} -----------
Name : {a}
Age : {b}
job : {c}
Hobbie: {c}
------------- end -----------------
'''.format(a=name,b=age,c=job) # 关键字:a b c
print(mingpian)
还有一种简化方法
mingpian = f'''
------------ info of {name} -----------
Name : {name}
Age : {age}
job : {job}
Hobbie: {Hobbie}
------------- end -----------------
'''
print(mingpian)
2、占位符 % 格式化输出
两种方法
第一种采用占位符[%s:字符串形式, %d:数字形式]
mingpian = '''
------------ info of %s -----------
Name : %s
Age : %d
job : %s
Hobbie: %s
------------- end -----------------
'''%( '张帅','张帅',56,'农民工','钱') #在里面添加你需要的信息 有几个未知数就填几个信息
print(mingpian)
第二种用自定义模式
name = input('姓名')
age = int(input('年龄'))
job = input('工作')
Hobbie = input('爱好')
info = '''
------------ info of %s -----------
Name : %s
Age : %d # 只能输入数字
job : %s
Hobbie: %s
------------- end -----------------
''' %(name , name , age , job , Hobbie)
最后行的%就是把前面的字符串与括号后面的变量关联起来
三个引号引起来的功能很强大,它可以表示注释,似“info”的就代表文本,且是换行的文本在这样的文本中不# 能在注释了
注意事项:如何在占位符%中使用单纯的%(百分号)
在%d%后面再加一个% 即:%d%% 就可以使用单纯的 % 了
msg = "我是%s,年龄%d,目前学习进度为%d%%" % ('金鑫',18,30)
print(msg)
我是金鑫,年龄18,目前学习进度为30%
3、利用字典和 %相结合
dic(字典) = { 'name':'老男孩', 'age':56, 'job':'老板','hobbie':'钱'}
mingpian = '''
------------ info of %(name)s -----------
Name : %(name)s
Age : %(age)d
job : %(job)s
Hobbie: %(hobbie)s
------------- end -----------------
'''%dic
print(mingpian)
a = range(10) a[::-3]的结果是___
a = range(10)
a = a[::-3]
print(a) 相当于range(9, -1, -3)
for i in a:
print(i) 9 6 3 0
如果range(9, -1, -3)你看不懂那你可以试试 range(0, 10, 3)
起始 0 终止到9(10取不到) 步长为3
赋值、深浅copy
import copy
a = [1,2,3,[4,5],6]
b = a
c = copy.copy(a)
d = copy.deepcopy(a)
b.append(10)
c[3].append(11)
d[3].append(12)
print(a)
print(b)
print(c)
print(d)
注意:浅copy仅仅复制了第一层,第二层的内存地址还是指向 a
找出两个列表的相同元素和不同元素
集合的交集(&) 反交集(^) 并集(|) 差集(-) 子集超集(><)
listA = [1,2,3,4,5]
listB = [1,2,5,6,7,8,9]
a = set(listA)
b = set(listB)
jiao = a & b
fanjiao = a ^ b
print(jiao) {1, 2, 5}
print(fanjiao) {3, 4, 6, 7, 8, 9}
找出字典中是否存在 "AA","bb" 之类的键
该题考察的是字典的查 dict.get(键,'有还是没有呢')
dict = {'aaa':111,'bb':22,'c':3,'dd':44,'eee':555}
print(dict.get('AA','没有啊')) 没有啊
print(dict.get('bb','没有啊')) 22
在循环中删除元素
li = [2,4,5,6,7]
for i in li:
if i%2 == 0:
li.remove(i)
li 的最终结果是
正确答案:[4,5,7]
这道题迷惑性很强,在往常我们遇到的是在循环中删除奇数位,导致索引超出列表的范围,总结:在循环中是以最初的索引进行循环
第一次循环 索引为0 2%2 == 0 成立 删除2 li = [4,5,6,7]
第二次循环 索引为1 li[1] = 5 5%2 == 0 不成立 li = [4,5,6,7]
第三次循环 索引为2 li[2] = 6 6%2 == 0 成立 删除6 li = [4,5,7]
第四次循环 索引为3 但是不存在,循环完成 li = [4,5,7]
按绝对值大小进行排序 li = [3,1,-4,-2]
这道题考察的是python的内置函数: sorted 对所有可迭代对象进行排序操作 abs 是求数值的绝对值
简单方法:
lis = sorted(li,key=abs) #对li进行有序操作,操作规则是 abs
复杂方法:
li = [3,1,-4,-2]
dic = {}
for i in li: dic[abs(i)] = i
x = list(dic.keys())
x.sort()
li = []
for i in x: li.append(dic[i])
print(li)
现有列表 lis 请写出两种去除 lis 中重复元素的方法
- 要求保持 lis 元素的原有顺序
可以利用字典保存元素和索引,因为字典的键不能重复,所以让需要保存的元素做键
lis = [9,2,8,7,3,6,4,5,8,2,4,6,7,2,1,6]
dic = {}
for i in range(len(lis)):
dic[lis[i]] = i #这样使排在后面的重复值覆盖前面,当然你也可以修改规则
print(list(dic.keys())) # 将字典的键转化成列表
- 无需考虑 lis 元素的元素顺序
集合是会自动去重的
list(set([9,2,8,7,3,6,4,5,8,2,4,6,7,2,1,6]))
用python代码实现99乘法表(两种方法)
- 第一种
for a in range(1,10):
for b in range(a,10):
print(f'{a}*{b}={a*b}', end=' ')
print()
- 第二种
和第一种方法相同
for a in range(1,10):
for b in range(1,a+1): #要修改了
print(f'{a}*{b}={a*b}', end=' ')
print()
请说出下面的答案
x = 'foo'
y = 2
print( x + y )
这道题很容易跟 JS 搞混,因为在前端中,字符串是可以跟数字直接相加的但在python中不行
python: An exception is thrown must be str, not int(引发异常,必须是str,不能是int)
JS: 将 int 类型强制转化为 str 结果为 'foo2'
lis = [{'age':20},{'age':30},{'age':25},{'age':12}] 对年龄进行排序
还是利用sorted的内置函数 sorted( list , key= 排序方法 ) 用 lambda (匿名函数) 定义排序方法
s = sorted( lis, key=lambda x:x['age'])
# 结果是: [{'age': 12}, {'age': 20}, {'age': 25}, {'age': 30}]
从大到小排序
s = sorted( lis, key=lambda x:x['age'] , reverse = True) # 反转 = 真
第二种方法
import operator
s = sorted(li,key=operator.itemgetter('age'),reverse=True)
Python不是一门为函数式编程设计的语言。但是得益于Python中强大的工具包,我们可以轻松地实现函数式的编程风格。其中重要的一个模块:operator .
而使用itemgetter()从元组记录中取回特定的字段
关于 operator 模块 可以查看一下
Python operator模块学习 https://www.jianshu.com/p/1a3a2ae01c06
Python基础学习:operator模块 https://blog.csdn.net/zhtysw/article/details/80510113
一个100G的文件,etl_log.txt 文件,要取读文件的内容,写出代码
with open('./etl_log.txt' , 'r' , encoding='utf-8') as fp:
for i in fp:
print i
文件句柄常用操作方法:
read(n) n 读取n行 不写默认全部读取 # 适用于小型文件,如果文件过大,会很卡
for循环读取 适用于所有文件
write('写入的内容') 将内容写进文件中
replace('原内容','替换后的内容') 文件的修改
Python代码如何获取命令行参数
参考:https://www.cnblogs.com/ouyangpeng/p/8537616.html
一、sys模块
sys 模块是一个非常常用且十分重要的模块,通过模块中的 sys.argv 就可以访问到所有的命令行参数,它的返回值是包含所有命令行参数的列表(list)
在 测试.py 中编写的代码
import sys
def main():
print('参数个数为:', len(sys.argv), '个参数。')
print('参数列表:', str(sys.argv))
print('脚本名为:', sys.argv[0])
for i in range(1, len(sys.argv)):
print('参数 %s 为:%s' % (i, sys.argv[i]))
if __name__ == "__main__":
main()
单个参数
多个参数
二、getopt模块
getopt模块是专门处理命令行参数的模块,用于获取命令行选项和参数,也就是sys.argv。命令行选项使得程序的参数更加灵活。支持短选项模式(-)和长选项模式(--)。
该模块提供了两个方法及一个异常处理来解析命令行参数
详细情况可以查看:https://www.cnblogs.com/ouyangpeng/p/8537616.html
字符串压缩问题
有很多公司的面试题都是随机给你一个字符串,然后让你计算字符串的元素个数如
把 s = 'aaabbcccd' 压缩成 'a3b2c3d1' 的格式
循环字符串,获得里面的每一个元素,利用字符串的内置函数 count() 计算出每一个元素一共有多少个;在利用字典保存,字典的键,不可重复
dic = {}
for i in s:dic[i] = s.count(i)
print dic # {'a': 3, 'b': 2, 'c': 3, 'd': 1}
接下来让字典的键值相加即可
Sstr = ''
for i in dic: Sstr = Sstr + i + str( dic[i] )
print Sstr # a3b2c3d1
如果从网上搜 字符串压缩 的话 会有一个
zlib模块
这个模块确实可以压缩,但是压缩的是字节串
字节串:使用zlib.compress可以压缩字节串。使用zlib.decompress可以解压字节串。
数据流:压缩:compressobj,解压:decompressobj压缩文件
import zlib
s = b'xbcnosoutjjcoa'
zlib_s = zlib.compress(s) # 压缩
print(zlib_s) # b'x\x9c\xabHJ\xce\xcb/\xce/-\xc9\xcaJ\xceO\x04\x00,\xdc\x05\xed'
ss = zlib.decompress(zlib_s) # 解压缩
print(ss) # b'xbcnosoutjjcoa'
网友评论