zoukankan      html  css  js  c++  java
  • python面试_总结02_代码题

    - 代码题

    1、创建一个函数,接收一个字符串参数,判断其做为Python标识符是否合法。

    具体要求:

    • 如果合法则输出 True,否则输出 False。
    • 如果该字符串与Python内置的关键字,或Bifs冲突,则打印'conflict'
    • 注: Python标识符的规则,关键字和Bifs可搜索得到
    import keyword, string
    print(keyword.kwlist)
    print()
    print(string.ascii_letters)
    print()
    print(string.digits)
    ['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 
    'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise',
    'return', 'try', 'while', 'with', 'yield'] abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789

    import keyword, string
    
    def Identifier(s):
        kw = keyword.kwlist # 内置关键字
        # 请用if-else完成检测,打印conflict或者False
        # your code here
        
        # 标识符命名规范
        # 1.数字,下划线,字母构成
        # 2.避开关键字,这里s != kw
        # 3.不能用数字开头
        
        # 不能是关键字
        if s in kw:
            print(s, "标识符不能是关键字")
            return False
        # 开头必须是字母或者下划线
        elif s[0] == "_" or s[0] in string.ascii_letters:
            # 除开头以外,必须是数字+下划线+字母
            for i in s[1:]:
                if (i == "_") or (i in string.digits) or (i in string.ascii_letters):
                    pass
                else:
                    print(s, "既不是关键字,开头也合法,但是后面有非法字符")
                    return False
            print(s, "合法的标识符")
            return True
        else:
            print(s, "不是关键字,开头已经不合法(后面不晓得)")
            return False
        
    
    print("01", Identifier("list"))
    print("02", Identifier("abc#"))
    print("03",Identifier("1a"))
    list 合法的标识符
    01 True
    abc# 既不是关键字,开头也合法,但是后面有非法字符
    02 False
    1a 不是关键字,开头已经不合法(后面不晓得)
    03 False

    2、编写一个函数,能生成包含20个随机整数的列表,然后将前10个元素升序排列,后10个元素降序排列,并分别打印输出

    提示:本题考察对列表的切片和排序操作,注意切片下标。

    import random
    def sort2part():
        # 用random生成20个随机数并完成本题要求
        # your code here
        # 创建一个列表用于保存随机数
        total_list = []
        list_asc = []
        list_dec = []
        # 1、生成20个随机数
        for i in range(20):
            total_list.append(random.randint(1, 20))
        print("生成的随机数列表是这个样子:", total_list)
        # 2、对列表进行切片
        list_asc = total_list[:10]
        list_dec = total_list[10:]
        print("切片后前10的列表:", list_asc)
        print("切片后后10的列表:", list_dec)
        
        assert len(list_asc) + len(list_dec) == len(total_list), "长度需要满足一致"
        
        # 3、分别进行排序
        list_asc = sorted(list_asc)
        list_dec = sorted(list_dec, reverse=True)
        print("升序后前10的列表:", list_asc)
        print("降序后后10的列表:", list_dec)
    
        return 
    
    sort2part()

     3、有一分数序列为:2/1,3/2,5/3,8/5,13/8,21/13,  请使用Python代码生成,并打印该数列的前30(演示代码取5项)项,并求和返回

    提示:观察分数的分子和分母,每1项都和前2项有关系,也可检索“斐波那契数列”

    # 显示分数的包
    import fractions
    from functools import reduce
    
    def fab(max_num): 
        # 完成分子分母的生成并计算求和返回结果
        # your code here
        
        # 创建列表保存数据
        _list = []
        
        # 1、首先生成斐波那契数列
        a = 1  # 注意这里a从1开始
        b = 1
        for i in range(max_num):
            # a是分母,b是分子
            a, b = b, a + b
            '''
            上式等同于下面3式:
            temp = b
            b = a + b
            a = temp
            '''
            # print("a = ", a, "b = ", b)
            
            # 2、生成分数
            _list.append(fractions.Fraction(b, a))
            # _list.append(b / a)
    
        print("看一眼生成的列表长啥样:", _list)
        # 分数要遍历才能打印...
        for elm in _list:
            print(elm)
    
        assert len(_list) == max_num, "长度一致"
        
        # 3、求前30项的和
        sum_ = reduce(lambda x, y: x + y, _list)
        return sum_
    
    print("该数列的前5项和: ",fab(5))
    看一眼生成的列表长啥样: [Fraction(2, 1), Fraction(3, 2), Fraction(5, 3), Fraction(8, 5), Fraction(13, 8)]
    2
    3/2
    5/3
    8/5
    13/8
    该数列的前5项和:  1007/120


    4、BMI编写

    身体质量指数(BMI)是根据人的体重和身高计算得出的一个数字,BMI是可靠的身体肥胖指标,其计算公式:BMI = Weight / High2,其中体重单位为公斤,身高单位为米。

    • 计算公式为:BMI=kg÷ 2m

    • 提示用户输入体重(kg)和身高的数字(m)(注意单位),然后计算BMI。

    • 根据BMI指数范围,定义当前健康状态。BMI指数在18至25之间定义为健康的标准体重, 小于该范围定义为偏瘦,超过该范围定义为偏重。

    • 将BMI指数和其所代表状态输出

    weight = float(input('请输入您的体重:'))
    high = float(input('请输入您的身高:'))
    # 完成BMI计算并返回结果提示信息
    # your code here
    high = high / 100
    BMI = weight / (high ** 2)
    
    if 18 <= BMI <= 25:
        print("您的身体质量指数是:%.2f, 很健康哦" % BMI)
    elif BMI < 18:
        print("您的身体质量指数是:%.2f, 有些偏瘦哦" % BMI)
    else:
        print("您的身体质量指数是:%.2f, 你这个胖纸" % BMI)
    请输入您的体重:65
    请输入您的身高:173
    您的身体质量指数是:21.72, 很健康哦

    5、字符统计

    • 创建一个函数,接收字符串输入,分别统计出其中英文字母、空格、数字和其它字符的个数后打印。
    • 提示:
      • ord('a') 能将字符 'a' 转化为 ASCII 码表上对应的数值
      • 例如,空格为32
      • 数字 0-9 对应的码值为 48-57
      • 大写字母 A-Z 对应 65-90
      • 小写字母 a-z 对应 97-122
      • 比122高的都是其它。
    def str_count(s):  
        # 完成对应要求的统计,并返回对应的数量
        # your code here
    
        # 初始化计数变量
        count_s, count_z, count_a, count_o = 0, 0, 0, 0
        for i in s:
            # 得到对应ASCII码的数值
            num_asc = ord(i)
            if num_asc == 32:
                count_s += 1
            elif 48 <= num_asc <= 57:
                count_z += 1
            elif 65 <= num_asc <= 90 or 97 <= num_asc <= 122:
                count_a += 1
            elif num_asc > 122:
                count_o += 1
    #     assert (count_s + count_z + count_a + count_o) == total_num, "最终个数相符"
        
        print("空格个数:%d个" % count_s)  
        print("数字个数:%d个" % count_z)
        print("英文字母个数:%d个" % count_a)
        print("其他字符个数:%d个" % count_o)  
        
    str_count("我是xiao ming ming, 今年27岁")
    空格个数:3个
    数字个数:2个
    英文字母个数:12个
    其他字符个数:5个

     6、创建一个函数,可以将去除给定列表中中相邻且重复的元素(只保留一个)后,打印输出结果。

    • 说明
      • 输入参数为 l1 = [1,2,3,4,4,4,4,4,4,5,6,6,8,8,12,12,12,12,13]
      • 操作后,保证原有整体排序不变,仅处理相邻且重复的元素
      • 请勿使用set
    def remove_same(ll):
        # 完成题目要求的任务,并返回结果
        # your code here
        # 逆序,这样就不会出现下标溢出的情况
        for i in range(len(ll) - 1, 0, -1):
            # print("现在到了第%d步" % i)
            print(ll)
            if ll[i] == ll[i-1]:
                # 删除相邻且重复的元素
                del ll[i]
        return ll
        
    lst = [4,4,5,6,5,6,6,8,7,8,12,12]
    # lst = [1,1,2,3,4,4,4,4,4,4,5,6,6,8,8,12,12,12,12,13]
    # lst1 = [1,2,3,4,4,4,4,4,4,5,6,6,8,8,12,12,12,12,13, 4, 8, 4, 12, 13, 13, 17, 3, 3, 3]
    
    print(remove_same(lst))
    [4, 4, 5, 6, 5, 6, 6, 8, 7, 8, 12, 12]
    [4, 4, 5, 6, 5, 6, 6, 8, 7, 8, 12]
    [4, 4, 5, 6, 5, 6, 6, 8, 7, 8, 12]
    [4, 4, 5, 6, 5, 6, 6, 8, 7, 8, 12]
    [4, 4, 5, 6, 5, 6, 6, 8, 7, 8, 12]
    [4, 4, 5, 6, 5, 6, 6, 8, 7, 8, 12]
    [4, 4, 5, 6, 5, 6, 8, 7, 8, 12]
    [4, 4, 5, 6, 5, 6, 8, 7, 8, 12]
    [4, 4, 5, 6, 5, 6, 8, 7, 8, 12]
    [4, 4, 5, 6, 5, 6, 8, 7, 8, 12]
    [4, 4, 5, 6, 5, 6, 8, 7, 8, 12]
    [4, 5, 6, 5, 6, 8, 7, 8, 12]

    7、创建一个函数,接收一个由整数组成的列表(需对输入列表做检查,长度最少为2, 数据类型为整型),并检验后下列条件后输出:

    • 如列表是升序排列的,则输出"ASC";
    • 如列表是降序排列的,则输出"DESC";
    • 如列表无序,则输出"WRONG"。
    def check_data(l):
        # 请完成题目要求的任务,并输出对应信息
        # your code here
        # 得到列表的总长度
        count = len(l)
        if count < 2:
            print("长度不够,短拒")
            return None
        # 判断数据类型是否位int
        for i in range(count):
            if not isinstance(l[i], int):
                print("数据类型有非int型")
                return None
        # 判断是否是升序
        if sorted(l) == l:
            print("ASC")
        # 判断是否降序
        elif sorted(l, reverse=True) == l:
            print("DESC")
        # 无序
        else:
            print("WRONG")
        
    
    check_data([1])
    check_data([1,"2"])
    check_data([1,2,3,4])
    check_data([4,3,2,1])
    check_data([1,3,2,4])
    长度不够,短拒
    数据类型有非int型
    ASC
    DESC
    WRONG

     8、高阶函数综合运用

    l1=[1,3,6,8,10,11,17]

    请仅使用map,reduce,filter对上方数组依次进行如下三次操作:

    • 剔除掉所有的偶数后打印

    • 对剩下的数字每个数字进行平方后打印

    • 对数组求和后打印

    # 剔除掉所有的偶数后打印
    # your code here
    l1=[1,3,6,8,10,11,17]
    print("原始的l1:", l1)
    
    def f(x):
        return x % 2 != 0
    
    l1 = list(filter(f, l1))
    print("剔除偶数后的l1:", l1)
    原始的l1: [1, 3, 6, 8, 10, 11, 17]
    剔除偶数后的l1: [1, 3, 11, 17]
    # 对剩下的数字每个数字进行平方后打印
    # your code here
    print("现在的l1:", l1)
    
    l1 = list(map(lambda x: x ** 2, l1))
    print("求平方后的l1:", l1)
    现在的l1: [1, 3, 11, 17]
    求平方后的l1: [1, 9, 121, 289]
    # 对数组求和后打印
    # your code here
    print("现在的l1:", l1)
    
    # 对数组中国的数求和
    from functools import reduce
    
    l1_sum = reduce(lambda x, y: x + y, l1)
    print("所求数字之和:", l1_sum)
    现在的l1: [1, 9, 121, 289]
    所求数字之和: 420

    9、Python类设计

    设计一个公司类,完成以下要求,并实例化不同对象进行验证

    类变量

    • 类下公司的总个数,类下公司实例的名称列表

    类方法

    • 返回公司类共有多少个公司实例
    • 返回公司类的公司实例有名称列表

    实例变量

    • 公司名,简介,利润,销售额,总成本,雇员姓名列表,雇员详细信息列表(这里可能会考察到*号对参数解包)

    实例方法:

    • 招聘人才(每招一个人会有成本产生,影响该实例雇员列表、人数、总成本,默认成本cost=10000)
    • 解雇人员(每解雇一个人会有成本产生,影响该实例雇员列表、人数 、总成本,默认成本cost=5000)
    • 公司广告推广(影响该实例总成本,自定义成本cost)
    • 交社保(按公司雇员总人数计算,影响该实例总成本,默认单人社保缴纳1000)
    • 交税(按公司雇员总人数计算,影响该实例总成本,默认单人税费缴纳500)
    • 销售(按销售件数*价格计算销售额,利润按销售额*利润率进行计算利润。默认利润率50%)
    • 获取公司雇员列表
    • 获取公司净利润

    提示:具体的函数方法与变量定义,请参考下述实例化代码确定。初始化雇员的地方,大家看到调用的时候会包含年龄等信息,这里可能会用到不定长参数输入,详细可以参考python参数说明(https://blog.csdn.net/qinyilang/article/details/5484415)

    class Company(object):
        # 完成题目对应的要求
        # your code here
    
        # 类变量: 类下公司的总个数,类下公司实例的名称列表
        companyNum = 0
        companyList = []
    
        def __init__(self, companyName, brief, profit=0, sale_=0, cost=0, name_list=[], *args):
            '''
            实例变量
            公司名,简介,利润,销售额,总成本,雇员姓名列表,雇员详细信息列表(这里可能会考察到*号对参数解包)
            '''
            # 公司名
            self.companyName = companyName
            # 简介
            self.brief = brief
            # 利润,销售额,总成本,雇员姓名列表,雇员详细信息列表
            self.profit = profit
            self.sale_ = sale_
            self.cost = cost
            self.name_list = name_list
            # self.name_detail = name_detail
    
            # 每实例化一个对象,公司数+1
            Company.companyNum += 1
            # 每实例化一个对象,公司实例的名称列表追加一个公司名
            Company.companyList.append(self.companyName)
    
        def recruit(self, name, age, cost=10000):
            '''
            招聘人才
            每招一个人会有成本产生,影响该实例雇员列表、人数、总成本,默认成本cost=10000
            '''
            self.name_list.append(name)
            self.cost += cost
            # self.name_detail.append(age)
    
        def dismiss(self, name, cost=5000):
            '''
            解雇人员
            每解雇一个人会有成本产生,影响该实例雇员列表、人数 、总成本,默认成本cost=5000
            '''
            self.name_list.remove(name)
            self.cost -= cost
    
        def adPromotion(self, cost):
            '''
            公司广告推广
            影响该实例总成本,自定义成本cost
            '''
            self.cost += cost
    
        def payInsurance(self):
            '''
            交社保
            按公司雇员总人数计算,影响该实例总成本,默认单人社保缴纳1000
            '''
            self.cost -= 1000 * len(self.name_list)
    
        def payTax(self):
            '''
            交税
            按公司雇员总人数计算,影响该实例总成本,默认单人税费缴纳500
            '''
            self.cost -= 500 * len(self.name_list)
    
        def sale(self, num, price):
            '''
            销售
            按销售件数*价格计算销售额,利润按销售额*利润率进行计算利润。默认利润率50%
            '''
            # 销售额
            self.sale_ = num * price
            # 利润
            self.profit += self.sale_ * 0.5
    
        def getEmployeeList(self):
            '''
            获取公司雇员列表
            '''
            return self.name_list
    
        def getProfit(self):
            '''
            获取公司净利润
            '''
            # 利润 = 收入 - 支出
            # 收入
            return self.profit - self.cost
    
        # 类方法
        # 返回公司类共有多少个公司实例
        # 返回公司类的公司实例有名称列表
        @classmethod
        def Company_num(cls):
            return len(cls.name_list)
    
        @classmethod
        def Company_list(cls):
            return cls.name_list
    #功能验证
    c0 = Company('网易','高科技互联网公司')
    c0.recruit('张三',18, cost=20000)
    c0.recruit('王五',20, cost=10000)
    print('{}公司员工详细信息列表:{}'.format(c0.companyName, c0.getEmployeeList()))
    
    c0.dismiss('王五')
    
    c0.adPromotion(5000)
    c0.payInsurance()
    c0.payTax()
    c0.sale(50,100)
    print('{}公司员工详细信息列表:{}'.format(c0.companyName, c0.getEmployeeList()))
    print('{}公司当前利润:{}'.format(c0.companyName, c0.getProfit()))
    
    c1 = Company('百度','搜索引擎')
    c1.recruit('李四',30, cost=50000)
    c1.recruit('赵六',50, cost=40000)
    print('{}公司员工详细信息列表:{}'.format(c1.companyName, c1.getEmployeeList()))
    
    print('公司名列表:',Company.companyList)
    print('公司总个数:',Company.companyNum)
    网易公司员工详细信息列表:['张三', '王五']
    网易公司员工详细信息列表:['张三']
    网易公司当前利润:-26000.0
    百度公司员工详细信息列表:['张三', '李四', '赵六']
    公司名列表: ['网易', '百度']
    公司总个数: 2

    10、结合PIL库,制作一个能生成5位随机数验证码图片的函数

    生成5位随机数验证码并存储为verify.png名称的图片。

    提示:PIL库的使用方法可以参考python中PIL库的使用PIL库简易教程与验证码生成

    %matplotlib inline
    from PIL import Image
    from PIL import ImageDraw
    from PIL import ImageFont
    from PIL import ImageFilter
    
    import random
    # 完成题目指定的任务
    # your code here
    
    # 随机ASCII码生成数字
    def rndChar():
        return chr(random.randint(48, 57)) # 0-9的ASCII码是48-57
    
    # 随机颜色1:
    def rndColor():
        return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255))
    
    # 随机颜色2:
    def rndColor2():
        return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127))
    
    # 300 x 60:
    num = 5  # 生成num位的验证码
    width = 60 * num  # 图宽
    height = 60
    image = Image.new('RGB', (width, height), (255, 255, 255))
    # 创建Font对象:
    font = ImageFont.truetype('Arial.ttf', 36)
    # 创建Draw对象:
    draw = ImageDraw.Draw(image)
    # 填充每个像素:
    for x in range(width):
        for y in range(height):
            draw.point((x, y), fill=rndColor())
    # 输出文字:
    for t in range(num):
        draw.text((60 * t + 10, 10), rndChar(), font=font, fill=rndColor2())
    # 模糊:
    image = image.filter(ImageFilter.BLUR)
    image.save("verify.png", "jpeg")













  • 相关阅读:
    c++学习记录(七)
    c++学习记录(六)
    c++学习记录(五)
    c++学习记录(四)
    2020面向对象寒假作业(二)
    2020面向对象寒假作业(二)
    HTML学习记录(一)
    我罗斯方块
    我罗斯
    面向对象程序设计3
  • 原文地址:https://www.cnblogs.com/kongweisi/p/12095955.html
Copyright © 2011-2022 走看看