python面试题总结(三)

在这里插入图片描述

1、输入日期, 判断这一天是这一年的第几天?

import datetime

def dayofyear():
    year=input('请输入年份:')
    month=input('请输入月份:')
    day=input('请输入天:')
    date1=datetime.date(year=int(year),month=int(month),day=int(day))
    date2=datetime.date(year=int(year),month=1,day=1)
    return (date1-date2).days+1

res=dayofyear()
print(res)

2、现有字典 d={} 请按value值进行排序?(新)

d= {'a':24,'g':52,'i':12,'k':33}
d2=sorted(d.items(), key=lambda d: d[1])
d3={key:value for key,value in d2}
print(d3)

3、字典推导式

D={i[0]:i[1] for i in [["a","b"],["c","d"]]}
print(D)

4、将字符串 “k:1 |k1:2|k2:3|k3:4”,处理成字典

方法1

s="k:1|k1:2|k2:3|k3:4"

def str_fun(str_num):
    new_dict = {}
    for items in str_num.split("|"):
        key,value=items.split(":")
        new_dict[key]=value
    print(new_dict)
str_fun(s)

方法2

str1 = "k:1|k1:2|k2:3|k3:4"
d = {k.split(":")[0]: k.split(":")[1] for k in str1.split("|")}
print(d)

5、请按alist中元素的age由大到小排序

alist = [{'name':'a','age':20},{'name':'b','age':30},{'name':'c','age':25}]
alist_1=sorted(alist,key=lambda x:x['age'],reverse=True)
print(alist_1)

6、下面代码的输出结果将是什么?

list = ['a','b','c','d','e'] 
print(list[10:])

代码将输出[],不会产生IndexError错误,就像所期望的那样,尝试用超出成员的个数的index来获取某个列表的成员。例如,尝试获取list[10]和之后的成员,会导致IndexError,然而,尝试获取列表的切片,开始的index超过了成员个数不会产生IndexError,而是仅仅返回一个空列表。这成为特别让人恶心的疑难杂症,因为运行的时候没有错误产生,导致Bug很难被追踪到。

7、写一个列表生成式,产生一个公差为11的等差数列

print([x*11 for x in range(10)])

8、给定两个列表,怎么找出他们相同的元素和不同的元素?

set1=set(list1)
set2=set(list2)
li=list(set1 & set2)
li1=list(set1 ^ set2)

print(li)
print(li1)

9、请写出一段python代码实现删除list里面的重复元素

方法1:

lis=[1,2,1,2,3,5,7,4,2]
lis1=list(set(lis))
print(lis1)

方法2:

lis=[1,2,1,2,3,5,7,4,2]

lis1=[]
for i in lis:
    if i not in lis1:
        lis1.append(i)
print(lis1)

10、反转一个整数,例如-123 --> -321

class Solution(object):
    def reverse(self, x):
        if -10<x<10:
            return x
        str_x=str(x)
        if str_x[0]!="-":
            str_x=str[::-1]
            x=int(str_x)
        else:
            str_x=str_x[1:][::-1]
            x=int(str_x)
            x=-x
        return x if -2147483648<x<2147483647 else 0
if __name__ == '__main__':
    s=Solution()
    st=s.reverse(-210)
    print(st)

11、用一行python代码写出1+2+3+10248

方法1:

print(sum(range(10249)))

方法2:

from functools import reduce
num1=reduce(lambda x,y:x+y,range(10249))
print(num1)

12、一句话解决阶乘函数

num=reduce(lambda x,y : x*y,range(1,4))
print(num)

13、面向对象中怎么实现只读属性?

将对象私有化,通过共有方法提供一个读取数据的接口

class person: 
	def __init__(self, x): 
		self.__age = 10 
	def age(self): 
		return self.__age 
t = person(22)
# t.__age =100 
print(t.age())

最好的方法

class MyCls(object): 
	__weight = 50 
	@property 
	def weight(self): 
		return self.__weight

14、什么是lambda函数? 有什么好处?

lambda 函数是一个可以接收任意多个参数(包括可选参数)并且返回单个表达式值的函数

1.lambda函数比较轻便,即用即仍,很适合需要完成一项功能,但是此功能只在此一处使用,连名字都很随意的情况下

2.匿名函数,一般用来给filter,map这样的函数式编程服务

3.作为回调函数,传递给某些应用,比如消息处理

15、递归函数停止的条件?

递归的终止条件一般定义在递归函数内部,在递归调用前要做一个条件判断,根据判断的结果选择是继续调用自身,还是return,返回终止递归。

终止的条件:判断递归的次数是否达到某一限定值

2.判断运算的结果是否达到某个范围等,根据设计的目的来选择

def func_sum(number):
    if number>=1:
        sum=number+func_sum(number-1)
    else:
        sum=0
    return sum
print(func_sum(6))

16、写一个匿名函数求两个数的和

sum=lambda a,b:a+b
print(sum(3,4))

17、对装饰器的理解,使用装饰器来给所有的work增加记录日志的功能

class Logs:

    def __init__(self,log_file,level):
        self.log_file=log_file
        self.level=level

    def __call__(self, func,*args,**kwargs):
        def write_logging(*args,**kwargs):
            log=f'[{self.level}--时间是:{time.strftime("%H:%M:%S",time.localtime())}]'
            print(log)
            with open(self.log_file,'a') as f:
                f.write(log+'\n')
            func(*args,**kwargs)
        return write_logging

@Logs(log_file='out.log',level='info')
def work():
    print('我在工作')

work()

18、对列表进行乘积运算

对列表进行乘积运算的结果相当于对列表的数据进行复制拷贝到当前列表中

list=[3,6,9,1]
print(list*2)

执行结果:

[3, 6, 9, 1, 3, 6, 9, 1]

在这里插入图片描述

  • 17
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 22
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲代码敲到头发茂密

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值