python相关岗位算法面试题总结(持续更新)

一、统计字符串中出现最多的字符并输出

def fun_dict(list):
    dt = {}
    for item in list:
        if item not in dt:
            dt[item] = 1
        else:
            dt[item] += 1
    return dt


def fun_list(str):
    lt = []
    for item in str:
        lt.append(item)
    return fun_dict(lt)


str1 = "aaaccccdef"
print(fun_list(str1))

执行结果:
{‘a’: 3, ‘c’: 4, ‘d’: 1, ‘e’: 1, ‘f’: 1}

二、输出 9*9 乘法口诀表

def fun_9():
    for i in range(1,10):
        for j in range(1,i+1):
            print("{}*{}={}".format(i,j,i*j),end="\t")
        print()

fun_9()
1*1=1	
2*1=2	2*2=4	
3*1=3	3*2=6	3*3=9	
4*1=4	4*2=8	4*3=12	4*4=16	
5*1=5	5*2=10	5*3=15	5*4=20	5*5=25	
6*1=6	6*2=12	6*3=18	6*4=24	6*5=30	6*6=36	
7*1=7	7*2=14	7*3=21	7*4=28	7*5=35	7*6=42	7*7=49	
8*1=8	8*2=16	8*3=24	8*4=32	8*5=40	8*6=48	8*7=56	8*8=64	
9*1=9	9*2=18	9*3=27	9*4=36	9*5=45	9*6=54	9*7=63	9*8=72	9*9=81	

三、输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数

def fun_str():
    s=input('请输入字符串:')
    letters,space,digit,others=0,0,0,0
    for c in s:
        if c.isalpha():
            letters+=1
        elif c.isspace():
            space+=1
        elif c.isdigit():
            digit+=1
        else:
            others+=1
    print('英文字母={},空格={},数字={},其他字符={}'.format(letters,space,digit,others))

fun_str()

请输入字符串:werwe34534 e564
英文字母=6,空格=2,数字=8,其他字符=0

四、求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),

#求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字
def fun_a():
    '''
    2+22+222+2222+22222
    可以理解为:
    20000 + 2*2000 + 3*200 + 4*20 + 5*2
    也就是:
    1*2*10^4 + 2*2*10^3 + 3*2*10^2 + 4*2*10^1 + 5*2*10^0
    所以简单迭代就可以出结果
    '''
    a=2
    t=5
    num=0
    for i in range(1,t+1):
        num+=i*a*(10**(t-i))
    print(num)

fun_a()

五、题目025:求1+2!+3!+…+20!的和

def fun_tm():

    s=0
    t=1
    for n in range(1,21):
        t=t*n
        s=s+t
    print(s)
fun_tm()

六、利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。

def fun_output(s,l):
    if l==0:
        return
    print(s[l-1])
    fun_output(s,l-1)

def fun_tm1():
    s=input('请输入字符串:')
    l=len(s)
    fun_output(s,l)

fun_tm1()

七、一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

def tm_2():
    num=12321
    s=str(num)
    for i in range(len(s)//2):
        if s[i]!=s[-i-1]:
            print(False)
            break
    else:
        print(True)

tm_2()

八、求100之内的素数。

def tm036():
    '''
    素数就是质数
    '''
    arr = [2]
    for i in range(3,100):
        for j in arr:
            if i%j==0:
                break
        else:
            arr.append(i)
    print(arr)

[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

九、有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。

def tm_3():
    a=[1,4,6,8,9,23,24,55,88]
    b=99
    for i in a:
        if b<i:
            a.insert(a.index(i),b)
            break
    else:
        a.append(b)
    print(a)

tm_3()

十、取一个整数a从右端开始的4-7位

写的时候注意一下python切片是[-7:-4)左闭右开的,不包含[-4]的,所以要写成-3才能取到

def num():
    a=123456
    b=str(a)

    print(b[-3:-1])
num()

十一、输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。

def fun_tm(list):
    max_a=max(list)
    i=list.index(max_a)
    list[0],list[i]=list[i],list[0]
    print(list)

    min_b=min(list)
    j=list.index(min_b)
    list[-1],list[j]=list[j],list[-1]
    print(list)

lt=[7,2,3,6,8,5,4]
fun_tm(lt)

十二、从键盘输入一些字符,逐个把它们写到磁盘文件上,直到输入一个 # 为止。

def fun_tm():

    while True:
        c=input("请输入字符:")
        if c=="#":
            break
        else:
            with open('1.log', 'a') as f:
                f.write(c)

fun_tm()

十三、有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列), 输出到一个新文件C中

def fun_tm1():
    with open('1.log',r) as f:
        a=f.read()
    with open('2.log',r) as f:
        b=f.read()
    with open('3.log',a) as f:
        f.write(a+b)

fun_tm1()

十四、找到年龄最大的人,并输出。

person = {"li":18,"wang":50,"zhang":20,"sun":22}
def fun_tm4():
    dt=sorted(person.items(),key=lambda x:x[1],reverse=True)
    person1={}
    for i in dt:
        person1[i[0]]=i[1]
    print(person1)
fun_tm4()

十五、写一个函数比较两个列表是否相等

l1=[1,2,3]
l2=[2,3,1]
l3=[1,4,3]

def fun_t1(l1,l2):
    lt=[]
    for i in l1:
        if i in l2:
            lt.append(i)

    if len(lt)==len(l2):
        print(True)
    else:
        print(False)
fun_t1(l1,l3)

十六、查找字符串中的重复和非重复子字符串

def fun_s(s):
    li=[]
    li1=[]
    for i in s:
        if s.count(i)>1:
            li.append(i)
        else:
            li1.append(i)
    print(li)
    print(li1)

s='wertyt'
fun_s(s)

十七、给定文件的路径,返回文件名及所在目录

import os
def test():
    path=os.path.dirname(os.path.dirname(__file__))
    filename=os.path.basename(path)
    docname=os.path.dirname(path)
    return filename,docname
print(test())

十八、单例模式

class One_Bject:
    obj=None

    def __new__(cls, *args, **kwargs):
        if obj is not None:
            cls.obj=super().__new__(cls)
        return cls.obj

if __name__ == '__main__':
    obj=One_Bject
    obj1=One_Bject
    print(id(obj))
    print(id(obj1))

执行结果:

2371821596192
2371821596192

十九:写一个函数统计传入的列表中每个数字出现的次数并返回对应的字典。

方法一:

def fun(list):
    dic={}
    for i in list:
        if i not in dic:
            dic[i]=1
        else:
            dic[i]+=1
    print(dic)
fun([12,3,4,5,3,2])

方法二:

def fun1(list):
    dic={}
    for index,item in enumerate(list):
        dic[item]=dic.get(item,0)+1
    print(dic)
fun1([12,3,4,5,3,2])

二十、使用Python代码实现遍历一个文件夹的操作。

g = os.walk('D:\second_hand_car\SecondHand_list_query')
for path, dir_list, file_list in g:
    for dir_name in dir_list:
        print(os.path.join(path,dir_name))
    for file_name in file_list:
        print(os.path.join(path,file_name))

二十一、给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。

例如输入:[1,2,3,3,3]输出3
例如输入:[1,2,3]输出False

def tm_2(s):

    for i in s:
        if s.count(i)>len(s)*0.5:
            print(i)
            break
    else:
        print(False)

s=[2,1,2,1]
tm_2(s)

来源:YZL40514131

物联沃分享整理
物联沃-IOTWORD物联网 » python相关岗位算法面试题总结(持续更新)

发表评论