python最新笔试题

这是笔者面试小十家公司后呕心沥血总结的一些笔试编程题~具体公司就不透露了。哎,说多了都是泪啊。

1.二分法查找:

l = [1, 2, 3, 4, 5, 6, 7, 8, 9]
find_num = int(input(‘请输入一个数字:‘))
start = 0
end = len(l) - 1

while True:
    middle = (start + end) // 2
    if find_num == l[middle]:
        print(‘找到了!索引是:‘, middle)
        break
    elif find_num > l[middle]:
        start = middle + 1
    elif find_num < l[middle]:
        end = middle - 1
    if start > end:
        print(‘没找到!‘, find_num)
        break

2.二分法查找序列

#一个有序数列类似[1,2,3,3,4,4,5,5,5,6,7,8,8]
#输入5 用二分法 输出 5 的起始下标和 末尾下标

def searchRange(nums, target):
    if len(nums) == 0:
        return [-1,-1]
    elif target < nums[0] or target > nums[-1]:
        return [-1,-1]
    else:
        l, r = 0, len(nums) - 1
        while l <= r:
            mid = (l + r) // 2
            if target > nums[mid]:
                l = mid + 1
            elif target < nums[mid]:
                r = mid - 1
            elif target == nums[mid]:
                l = r = mid
                while l-1 >= 0 and nums[l-1] == target:
                    l -= 1
                while r+1 <= len(nums)-1 and nums[r+1] == target:
                    r += 1
                return [l,r]
    return [-1,-1]

nums = [1,3,4,6,8,8,9,10]
a = searchRange(nums,8)
print(a)

3.冒泡排序

‘‘‘
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。
它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。
走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名“冒泡排序”。
‘‘‘

import random
# 步骤2:创建一个空列表,用于存放待排序随机数据集
data = [random.randint(0, 100) for i in range(10)]
print(‘待排序的随机数列: {0}‘.format(data))
# 步骤3:使用嵌套循环实现冒泡排序
# 外层循环控制排序的次数
for i in range(10):
    # 内层循环控制每次对比的次数
    for j in range(len(data)-1-i):
        # 如果前项值大于后项值则对位交换,将大的在列表中后移1位
        if data[j] > data[j+1]:
            temp = data[j]
            data[j] = data[j+1]
            data[j+1] = temp
            pass
# 步骤4:输出排序后的结果
print(‘排序后的有序序列: {0}‘.format(data))

#交换排序.冒泡排序
L = [1, 3, 2, 32, 5, 4]
def Bubble_sort(L):
    for i in range(len(L)):
        for j in range(i+1,len(L)):
            if L[i]>L[j]:
                # temp = L[j]
                # L[j] = L[i]
                # L[i] = temp
                L[i], L[j] = L[j], L[i]#交换顺序

    print (L)
Bubble_sort(L)

4.列表去重

ids = [1,2,3,3,4,2,3,4,5,6,1,6,4,3,2,3,]
news_ids = []
for id in ids:
    if id not in news_ids:
        news_ids.append(id)
print (news_ids)
#python 列表去重(数组)的几种方法 - 朝阳的向日葵 - 博客园  https://www.cnblogs.com/zknublx/p/6042295.html
ids = list(set(ids))
print(ids)  #一句话列表去重

#lambda 一句话列表去重
a=(lambda x,y:x if y in x else x + [y], [[],] + ids)
print(a)

5.列表嵌套

l=[1,2,[3,4,[5,6],[7,8],9],10]
l1=[]
#递归函数实现:
def getitem(l):
    for item in l:
        if isinstance(item,list):
            getitem(item)
        else:
            print(item)
            l1.append(item)

getitem(l)
print(l1)
#python利用递归函数输出嵌套列表的每个元素 - lincappu - 博客园  https://www.cnblogs.com/lincappu/p/8146055.html

6.统计列表数值出现次数

a=[1,2,3,3,3,3,7,7,8,8,10]
print(a)
news_ids = []
for id in a:
    if id not in news_ids:
        news_ids.append(id)
print (news_ids)
for i in news_ids:
    if a.count(i) >= 1:
        print(‘%s 出现了%d 次!‘%(i, a.count(i)))

#纯手写

7.列表逆输出

a=[0,1,2,3,4,5,6,7,8,9,10]
b=[]
print(a[::-1]) #逆输出

#手写代码
count=len(a)
for i in range(len(a),0,-1):
    count-=1
    b.append(a[count])
print(b)

8.字符串统计

str=‘mynameisbobiamfromchina嘿嘿嘿嘿‘
str=‘,‘.join(str) #以逗号分隔字符串
print(str)
li=str.split(‘,‘)
print(li) #变成列表了
#统计每一个字符出现的次数:
for i in set(li):
    if li.count(i) >= 1:
        print(‘%s 出现了%d 次!‘%(i, li.count(i)))

print(‘*‘*50)
#方式二
from collections import Counter
res = Counter(li)
print(res)

9.字节型字典

dic=b‘{"name":"ltf","school":"tyut"}‘
str(dic, encoding="utf-8")
print(dic)
dicBytes = dic.decode(‘utf-8‘)
print(dicBytes)
print(eval(dicBytes)) #字符串转换为字典
print(eval(dicBytes).keys())

#修改key
dict = {‘a‘:‘ltf‘,‘b‘:‘fjf‘}
dict.update({‘1‘:dict.pop("a")})
dict.update({‘2‘:dict.pop("b")})
print(dict)

10.快速排序

#coding:utf-8
#author:徐卜灵
#交换排序.快速排序
# 虽然快速排序称为分治法,但分治法这三个字显然无法很好的概括快速排序的全部步骤。因此我的对快速排序作了进一步的说明:挖坑填数+分治法:
# import sys
# sys.setrecursionlimit(150000)
L = [6, 3, 2, 32, 5, 4]

def Fast_sort(L, left,right):
    if left >= right:
        return L
    key = L[left]
    low = left
    high = right
    while left < right:
        # if L[right] > key:
        #     right-=1
        # else:
        #     L[left] = L[right]
        # if L[left] <= key:
        #     left += 1
        # else:
        #     L[right] = L[left]
        # L[left] = key
        while left < right and L[right] >= key:
            right -= 1
        L[left] = L[right]
        while left < right and L[left] <= key:
            left += 1
        L[right] = L[left]
    L[left] = key
    Fast_sort(L, low, left - 1)
    Fast_sort(L,left + 1,high)
    return L
print (Fast_sort(L,0,5))

#1.高质量代码
def quick_sort(lists, left, right):
    # 快速排序
    if left >= right:
        return lists
    key = lists[left]
    low = left
    high = right
    while left < right:
        while left < right and lists[right] >= key:
            right -= 1
        lists[left] = lists[right]
        while left < right and lists[left] <= key:
            left += 1
        lists[right] = lists[left]
    lists[left] = key
    quick_sort(lists, low, left - 1)
    quick_sort(lists, left + 1, high)
    return lists
print (quick_sort(L,0,5))

#2.高质量代码
# # 设置最低位和最高位
# def quickSort(nums, low, high):
#     # 设置一个比较基准key
#     key = nums[low]
#     while low<high:
#         # 如果最高位的数 大于等于 key则向前走
#         while low<high and nums[high] >= key:
#             high -= 1
#         # 如果最低位的数 小于等于 key则向后走
#         while low<high and nums[low] <= key:
#             low += 1
#         # 交换值
#         nums[low], nums[high] = nums[high], nums[low]
#
#     #最后low=high, 此时交换key和high位上的值, 使小于key的值在key左边, 大的在key右边
#     nums[nums.index(key)], nums[low] = nums[low], nums[nums.index(key)]
#     # 返回最低位的位置
#     return low
#
#
# # 进行重复操作
# def interval(nums, low, high):
#     if low<high:
#         # 进行排序并得到最低位位置以循环操作
#         key_index = quickSort(nums, low, high)
#         interval(nums, low, key_index)
#         interval(nums, key_index+1, high)
#
#
# nums = [64,3,9,2,4,7,0,12,45,]
# interval(nums, 0, len(nums)-1)
# print nums
#

11.打印三角形

for i in range(10):
    for j in range(0, 10 - i):
        print(end=" ")
    for k in range(10 - i, 10):
        print("*", end=" ")

    print("")

for l in range(10):
    for m in range(l):
        print(" ",end="")
    for n in range(10-l):
        print("*",end=" ")
    print("")

12.数字转中文输出

num=[1,2,3,4,5,6,7,8,9,0]
cn=[‘壹‘,‘贰‘,‘叁‘,‘肆‘,‘伍‘,‘陆‘,‘柒‘,‘捌‘,‘玖‘,‘零‘]
dw=[‘元‘,‘十‘,‘百‘,‘千‘,‘万‘,‘十‘,‘百‘,‘千‘]
n=str(input(‘请输入数字:‘))
c=len(n)-1
# print c
ln=‘‘
c1=0
for i in n:
    nb = int(i) - 1
    if i==‘0‘ and c1==0:
        c1=1
        pass
    else:
        if c1==1:
           c1=0
        ln=ln+ cn[nb]+dw[c]
        print(ln)
    c=c-1
print(ln)

13.数字逆输出

# num=input(‘请输入一个数:‘)
# a=[]
# li=list(num)
# print(li)
# count=len(li)
# for i in range(len(li),0,-1):
#     count-=1
#     a.append(li[count])
# print(a)

num=input(‘请输入一个数:‘)
a=[]
str=‘‘
print(num)
count=len(num)
for i in range(len(num),0,-1):
    count-=1
    a.append(num[count])
b=str.join(a)
print(int(b))

14.斐波那契数列

#最简单的方法为数组,其次为循环,最垃圾的为递归,到了40就算好久。。日后再琢磨数组

a=[1,1]
def fn(n):
    count=0
    f0=1
    f1=1
    f2=0
    while count<n:
        count+=1
        f2=f1+f0
        f0=f1
        f1=f2
        a.append(f2)
    print(‘第%s项的项数为:%s‘%(b,f2))
    print(‘斐波那契数列为:‘)
    print(a)
b=int(input(‘请输入项数:‘))
fn(b-2)

15.有序数组合并

def merge_sort(a, b):
    ret = []
    i = j = 0
    while len(a) >= i + 1 and len(b) >= j + 1:
        if a[i] <= b[j]:
            ret.append(a[i])
            i += 1
        else:
            ret.append(b[j])
            j += 1
    if len(a) > i:
        ret += a[i:]
    if len(b) > j:
        ret += b[j:]
    return ret

if __name__ == ‘__main__‘:
    a = [1,3,4,6,7,78,97,190]
    b = [2,5,6,8,10,12,14,16,18]
    print(merge_sort(a, b))

16.生成器

#如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?
# 这样就不必创建完整的list,从而节省大量的空间。
# 在Python中,这种一边循环一边计算的机制,称为生成器(Generator)

def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        yield b
        a, b = b, a + b
        n = n + 1
fib(8)
#生成器调用方法,其实是

17.装饰器

#装饰器的应用场景:比如插入日志,性能测试,事务处理,缓存等等场景。
def outer(func):
    def inner(*args,**kwargs):
        print("认证成功!")
        result = func(*args,**kwargs)
        print("日志添加成功")
        return result
    return inner

@outer
def f1(name,age):
    print("%s 正在连接业务部门1数据接口......"%name)

# 调用方法
f1("jack",18)
#装饰器调用方法,其实是把函数 f1 当成 outer的参数 

18.直接插入排序

#1.直接插入排序
L = [1, 3, 2, 32, 15, 5, 4]
def Insert_sort(L):
    for i in range(1,len(L)):
        for j in range(0,i):#这里面其实也是从前向后比较
            if L[i]<L[j]:
                L.insert(j,L[i])#在不大于的位置插入L[i],这个时候,列表加长了1位,L[i]插入到指定位置了,但它的值也向后移动了一位
                L.pop(i+1)#把原来L[i]的值删除。
    print(L)
    #空间复杂度为O(1),时间复杂度为O(n*n)
Insert_sort(L)
# print sorted(L)#自带的两种排序
# L.sort()
# print L

19.简单选择排序

L = [6, 3, 2, 32, 5, 4]
def Select_sort(L):
    for i in range(0,len(L)):
        for j in range(i,len(L)):
            if L[i] > L[j]:         #打擂台的形式
                # temp = L[i]
                # L[i] = L[j]
                # L[j] = temp
                L[i],L[j] = L[j],L[i]
    return  L
print (Select_sort(L))

20.驼峰命名规则

‘‘‘
bob_ltf 输出 bobLtf
‘‘‘
s=‘bob_ltf_lsq_fjf‘
s1=‘‘
s2=‘‘
arr=s.split(‘_‘) #列表
print(arr)
s1=s1.join(arr[1:])
print(s1.capitalize())
s2=s2.join(arr[:1])
s3=s2+s1.capitalize()
print(s3)
‘‘‘
输出结果
[‘bob‘, ‘ltf‘, ‘lsq‘, ‘fjf‘]
Ltflsqfjf
bobLtflsqfjf
‘‘‘

暂时总结这么多,以后的面试或者笔试题我也会加入到这里面。。。笔试的时候全部要求手写代码,而且不能用第三方库的方法。。。这就很难受了

以上源码GitHub地址:

https://github.com/tyutltf/python_bishi/tree/master

原文地址:https://www.cnblogs.com/yuxuanlian/p/10110548.html

时间: 2024-10-07 11:19:35

python最新笔试题的相关文章

Python 的笔试题

其实大多数说学习Python 是纯兴趣,真的我不信,许多人已经工作了,没有那么多时间搞自己的纯兴趣了,都会为了生活奋斗,可以说转行来学python 就是未来加薪,当然,小编现在也快要准备工作了,所以也开始准备笔试,面试. 所以为了充实自己,小编决定写自己见到的笔试题和面试题.可能要写好长时间,一时半会写不了多少,只能说遇到多少写多少吧,但是只要小编有时间,会持续上传. 2017.9.6 问题一:以下代码将输出什么? list = ['a', 'b', 'c', 'd', 'e'] print l

华为C语言笔试题集合

①华为笔试题搜集 1.static有什么用途?(请至少说明两种)    1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变.    2) 在模块内(但在函数体外),一个被声明为静态的变量能够被模块内所用函数訪问,但不能被模块外其他函数訪问.它是一个本地的全局变量.    3) 在模块内,一个被声明为静态的函数仅仅可被这一模块内的其他函数调用.那就是,这个函数被限制在声明它的模块的本地范围内使用 2.引用与指针有什么差别?    1) 引用必须被初始化,指针不必.    2)

2018春招-今日头条笔试题-第三题(python)

题目描述:2018春招-今日头条笔试题5题(后附大佬答案-c++版) 解题思路: 本题的做法最重要的应该是如何拼出'1234567890',对于输入表达试获得对应的结果利用python内置函数eval()即可以实现.利用5个字符串来表达'1234567890',如下(为了好看,里面加了tab空格符) '66666 ....6 66666 66666 6...6 66666 66666 66666 66666 66666''6...6 ....6 ....6 ....6 6...6 6.... 6

python 饥饿的小易(网易笔试题)

本周早些时候,学弟给我发了一道网易的笔试题,饥饿的小易,感觉有点意思-分享给大家 题目描述: 小易总是感觉饥饿,所以作为章鱼的小易经常出去寻找贝壳吃.最开始小易在一个初始位置x_0.对于小易所处的当前位置x,他只能通过神秘的力量移动到 4 * x + 3或者c.因为使用神秘力量要耗费太多体力,所以它只能使用神秘力量最多100,000次.贝壳总生长在能被1,000,000,007整除的位置(比如:位置0,位置1,000,000,007,位置2,000,000,014等).小易需要你帮忙计算最少需要

经典的阿里前端笔试题

1 请说明下面各种情况的执行结果,并注明产生对应结果的理由. function doSomething() { alert(this); } ① element.onclick = doSomething,点击element元素后. ② element.onclick = function() {doSomething()}, 点击element元素后. ③ 直接执行doSomething(). 参考答案: 1.element:调用执行时直接指向事件元素. 2.window:函数调用中的 thi

php 笔试题

1.用PHP打印出前一天的时间格式是2006-5-10 22:21:21 解:echo date(‘Y-n-d H:i:s’, strtotime(‘-1 day’)); 原因: format 字符说明返回值例子a小写的上午和下午值am 或 pmA大写的上午和下午值AM 或 PMd月份中的第几天,有前导零的 2 位数字01 到 31D星期中的第几天,文本表示,3 个字母Mon 到 SunF月份,完整的文本格式,例如 January 或者 MarchJanuary 到 Decemberg小时,12

计算机网络笔试题 详细分析复习知识点

1.在无盘工作站向服务器申请IP地址时,使用的是(     )协议. A.ARP B.RARP C.ICMP D.IGMP 解析: ARP工作机制 : A的ARP表中没有B的IP MAC 对应条目则发送ARP广播包,请求B的MAC地址 在全网"呼叫" 当B听到有机器"嚎叫"就返回一个数据包告诉你"我的MAC是X"然后双方就可以通信了,在A"嚎叫"的时候,A需要把IP和MAC地址广播出去用于B返回信息, 之后AB更新自己的ARP

网易2018校招笔试题-数组能不能满足重排列后任意相邻的元素积都是4的倍数

今天看了一下网易最新的校招笔试题: 小易有一个长度为N的正整数数列A = {A[1], A[2], A[3]..., A[N]}.牛博士给小易出了一个难题:     对数列A进行重新排列,使数列A满足所有的A[i] * A[i + 1](1 ≤ i ≤ N - 1)都是4的倍数.     小易现在需要判断一个数列是否可以重排之后满足牛博士的要求. 代码如下: 1 import java.util.Scanner; 2 3 /** 4 * Created by jy on 2017/9/9. 5

精选30道Java笔试题解答

个人觉得整理的超级好的Java笔试题,原文请见 http://blog.csdn.net/lanxuezaipiao/article/details/16753743 1. 下面哪些是Thread类的方法() A start()       B run()       C exit()       D getPriority() 答案:ABD 解析:看Java API docs吧:http://docs.oracle.com/javase/7/docs/api/,exit()是System类的方