python代码题

2019-03-07  本文已影响0人  鬼泣_89b6

常用字符串格式化有哪几种

现在有一需求,问用户的姓名、年龄、工作、爱好,然后打印成以下格式

------------ 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 = [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()))  # 将字典的键转化成列表
集合是会自动去重的
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'
上一篇下一篇

猜你喜欢

热点阅读