美文网首页
python代码题

python代码题

作者: 鬼泣_89b6 | 来源:发表于2019-03-07 16:21 被阅读0次

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

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

    ------------ 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'
    

    相关文章

      网友评论

          本文标题:python代码题

          本文链接:https://www.haomeiwen.com/subject/jiacpqtx.html