我的python面试题记录(一)

标签: 面试题

1.走路相遇问题:在这里插入图片描述

def steps(M,N):
    if M == 0:
        return N
    k = 1
    while True:
        if k * N >= M:
            return k*N
        k += 1

  1. 下面的代码是做什么的?用 Python/C/C++/Java 或其他你擅长的语言重新实现它。注意,在重新实现时不可照搬伪代码的逻辑,而需要在对样例代码理解的基础上使用更简洁高效的方式。

    作用:如果字符串 a 和字符串 b 相等,并且,组成 a 的元素正好也是组成 b 的元素,那么返回 true,否则返回 false
    也可以理解成,a 是 b 的元素重新排列的一种的话,返回 true.

 1: def Boolean no_name(a : String, b : String)
 2:     if a.length != b.length
 3:         return false
 4:
 5:     for(x : Integer = 0; x < b.length; x++)
 6:         if a[0] == b[x]
 7:             return no_name(utilityFunction(a, 0), utilityFunction(b, x))
 8:         end
 9:     end
10:
11:     return b.length == 0
12: end
13:
14: def String utilityFunction(s : String, j : Integer)
15:     ret = new char[s.length - 1]
16:     int d = 0
17:     for (k : Integer = 0; k < s.length; k++)
18:         if (k == j)
19:             d = 1
20:         else
21:             ret[k - d] = s[k]
22:         end
23:     end
24:     return new String(ret)
25: end
def fun(a: str, b: str) -> bool:
    # 如果长度不相等,返回false
    if len(a) != len(b):
        return False
    res = {}
    for v_b in b:
        # 把值作为key,出现次数作为value存入字典
        res[v_b] = res.get(v_b, 0) + 1
    for v_a in a:
        v_a_num = res.get(v_a)
        # 如果字段里不存在该key,直接返回false
        if not v_a_num:
            return False
        # 每循环到1次,在字典里把对应的value-1
        res[v_a] = v_a_num - 1
        # 当value为0时,移除该key-value
        if res[v_a] == 0:
            res.pop(v_a)
    return res == {}
  1. 为你在上一题中实现的代码编写单元测试。
import unittest
class TestFun(unittest.TestCase):
    def test_result_true_1(self):
        a = 'abc'
        b = 'bca'
        self.assertTrue(fun(a,b))
        a = 'aacc'
        b = 'ccaa'
        self.assertTrue(fun(a, b))

    def test_result_false(self):
        a = ''
        b = 'a'
        self.assertFalse(fun(a,b))
        a = 'a'
        b = 'b'
        self.assertFalse(fun(a, b))
        a = 'aacc'
        b = 'acaa'
        self.assertFalse(fun(a, b))

if __name__ == '__main__':
    unittest.main()
# ---------------------------------
#Ran 2 tests in 0.000s
#OK
  1. 实现Python 3 的 max 函数。需要实现 Python 3 标准库的 max 完整的 API,包括 key, default 等 keyword only 参数的支持。考察点不是基础算法,而是工程上去写用于生产的代码需要关注的点:API 的设计,文档,代码逻辑的清晰等。

函数文档:

  • 函数名:my_max
  • 参数:
参数名类型默认值描述
argstuple/需要查询的对象,多个无名参数
keyfuncNone对 args 对象进行操作的函数
default/None当 args 仅为长度为空的可迭代对象时,返回 default 值
import unittest
from collections import Iterable
"""
@overload def max(iterable: Iterable[_T], key: (_T) -> Any = ..., default: _T = ...) -> _T
Possible types:
• (arg1: _T, arg2: _T, args: Tuple[_T, ...], key: (_T) -> Any) -> _T
• (iterable: Iterable[_T], key: (_T) -> Any, default: _T) -> _T
"""
def my_max(*args, key=None, default=None):
    if len(args) == 1 and isinstance(args[0], Iterable):
        # 情况1.max(iterable, *[, default=obj, key=func]) -> value
        if len(args[0]) == 0:
            # (a).iterable是空的时返回default
            return default
        # (b).取出args[0]的以key的函数对象为判断的标准的最大值
        if callable(key):
            max_num = args[0][0]
            for i in args[0][1:]:
                if key(i) > key(max_num):
                    max_num = i
            return max_num
        # (c).取出args[0]的最大值
        max_num = args[0][0]
        for i in args[0][1:]:
            if i > max_num:
                max_num = i
        return max_num
    elif len(args) > 1:
        # 情况2.max(arg1, arg2, *args, *[, key=func]) -> value
        # (a).取出args[0]的以key的函数对象为判断的标准的最大值
        if callable(key):
            max_num = args[0]
            for x in args[1:]:
                if key(x) > key(max_num):
                    max_num = x
            return max_num
        # (b).取出args[0]的最大值
        max_num = args[0]
        for x in args[1:]:
            if x > max_num:
                max_num = x
        return max_num
    else:
        # len(args) ==1 但是args[0]不可迭代,或者len(args)<1,都是参数错误
        raise Exception('参数错误')

# 单元测试
class TestMax(unittest.TestCase):
    def test_max_none(self):
        obj = []
        self.assertEqual(max(obj, default=0), my_max(obj, default=0))

    def test_max_iterable(self):
        obj = [1, 4, -5]
        self.assertEqual(max(obj), my_max(obj))
        # 带有key的函数测试
        self.assertEqual(max(obj, key=abs), my_max(obj, key=abs))

    def test_max_more_args(self):
        obj = 1, 4, -5
        self.assertEqual(max(obj), my_max(obj))
        # 带有key的函数测试
        self.assertEqual(max(obj, key=abs), my_max(obj, key=abs))

    def test_max_more_with_tuple(self):
        obj = (1, 2), (3, 5), (3, 7), (2, 1)
        self.assertEqual(max(obj), my_max(obj))


if __name__ == '__main__':
    unittest.main()
# Ran 4 tests in 0.008s
# OK
版权声明:本文为qq_41854273原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41854273/article/details/109152417

智能推荐

TYVJ 4864 天天去哪吃 || 清北学堂金秋杯大奖赛

题目描述: 记录一下i这个值上次出现的位置在哪里,就是pre...

java反编译

jvm 把Boolean类型的值flag当做int类型处理。​​​ Foo.java: 由 class 文件生成 jasm 文件:java -jar asmtools.jar jdis Foo.class > Foo.jasm  修改jasm文件: 执行反编译: java -jar jd-gui-1.6.6.jar File 打开Foo.class文件:b修改为2 重新执行java...

【学习笔记】03-v-html的学习和示例

v-html的认识和使用 示例: 显示结果: 注意:v-html是有复制的...

Java实现在线考试系统(系统介绍)

1.和现在有的考试系统有以下几种优势: a.和现在有的系统比较起来,本系统有科目、章节、老师、学生、班级等信息的管理,还有批阅试卷查看已批阅试卷等。传统的考试系统划分并不细,业务功能简单。 b.和学校的考试系统还有外面的考试系统比较起来,本系统是B/S结构,学校的考试系统一般为C/S结构,性能方面不如B/S结构,并且C/S接口需要安装客户端,客户端压力很大,我的系统只需要电脑具有浏览器,在同一局域...

计算机视觉--多视几何初步尝试

基础矩阵的原理 K和K’分别是两个相机的参数矩阵。p和p’是X在平面π的坐标表示。所以可以得出 具体计算过程 代码: #!/usr/bin/env python coding: utf-8 from PIL import Image from numpy import * from pylab import * import numpy as np from imp ...

猜你喜欢

java初学者怎么学习才可以快速入门

java初学者怎么学习才可以快速入门 一、了解JAVA 我们要知道:Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言。 Java之父:詹姆斯·高斯林 1.1 java的三个体系 Java SE(Java Platform Standard Edition)。Java SE 以前称为 J2SE。它允许开发和部署在桌面、服务器、嵌入式环境...

字段属性之主键&增删改查&自增长&唯一键约束

字段属性之主键&自增长&唯一键约束 主键 主键:primary key 主要的键 一张表中只有一个字段可以使用对应的键,用来唯一的约束该字段里面的数据,不能重复,这种称之为主键 一张表只能最多一个主键 增加主键 SQL操作中有多种方式增加主键大体分为三种 1.在创建表的时候直接在字段之后跟primary key关键字(主键本身不允许为空) 优点:非常直接:缺点:只能使用一个字段作为...

linux下 基于libmad的socket多用户mp3音频在线播放服务器

在众多大神的帮助下,这个在线播放流媒体服务器终于完成啦。。。。 这个mp3流媒体服务器设计的思路是,服务器程序server用多线程实现和多个客户端的通信(这是必然的),然后发送给客户端当前的音频列表公客户端选择,之后根据k客户端的选择给多个客户端传输相应mp3文件的数据,同时,客户端进行实时地音频解码并播放。 关于libmad开源mp3音频解码库的使用,见上一篇博客吧。。。。 在服务器程序这一端,...

Nginx

Nginx Nginx简介: Nginx是一个高性能的http和反向代理服务器,特点是有内存少,并发能力强,事实上Nginx的并发能力确实在同类型网页服务器中表现较好, Nginx用作web服务器:Nginx可以作为静态页面的web服务器,同时还支持CGI语言,但不支持java,java程序只能通过Tomcat配合完成。Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受...

SpringCloud Alibaba - Sentinel入门案例(二)(流控规则 | 直接 / 关联 / 链路 / 快速失败 / Warm Up / 排队等待)

SpringCloud Alibaba - Sentinel入门案例(二)(流控规则 | 直接 / 关联 / 链路 / 快速失败 / Warm Up / 排队等待) 回溯 Sentinel 基本概念 正文 环境准备 流控规则介绍 简单介绍 对 阈值类型 / 单机阈值做 测试 流控模式 直接流控模式 关联流控模式 链路流控模式 资源名称的修改 链路模式正文 坑来了,怎么解决? 禁止收敛URL的入口 ...