一道面试题的最终答案

简介: 一道面试题的最终答案

前两天看见一个人这样说,面试的时候考试一道题,深入的问,很多人败下阵来。


但是要看是什么题目了。


编写函数,判断一个传入参数是不是奇数。


这之前什么无脑科技和短路电子提供的答案比如print 不返回true false的咱们略过不表。


我们先来看一个非常直观的答案:

def isOdd(number):
    return ( (number % 2) == 1)


这样,比如传入一个number=21,则输出True。挺简单的不是吗。相信有些人会想这家公司疯了吧,拿一道都没超过程序设计课程第二章的题目来做面试题,有什么目的?

确实有点问题在里面。


你算了个被2求余数不假,但是………………谁告诉你负数就没有奇数啊?那么,一个数%2,负数的结果是什么呢?python程序员就比较幸运了……呼呼,version 3.7运行结果是1,这个没问题。怎么样,是不是很想打开IDE或者启动一个notebook看一下?建议还是看看另一算式:number % -2 在您的惯用语言是什么结果,省的面试官问了现场想哦。


如果fu—cking缺德的语言底层,给你处理成一个………………number mod 2 = -1,不就麻烦了?为了可移植性,来吧,做一个-1版本-version for -1:


def isOdd(number):
    return ( abs(number % 2) == 1)


哇哈哈,abs函数真好用。但是文章作者显然没想过放开可怜的面试者,这样的运算时间是多少?还有更快的答案吗?拐来拐去,最后落到了位运算。最后是这么一个不直观的答案:

1. def isOdd(number):
2. return ((1 & number) == 1)


其实上面的答案因为运算符优先级(看看,优先级没背熟吃亏了吧我天)的关系,可以不要括号,1 & number ==1 是一样的,加上括号可以防止读起来有歧义啊。


因为number不管是奇数偶数,表示成二进制就是1和0组合,奇数的末尾一位是1。和1按位与,前面若干个位都成0,符号位也是0,最后一位是1。这样,奇数按位与就是1,偶数就是0。


然后发现还少点啥?异常?传入参数校验?对啊,你怎么知道传入参数不是字符串不是float。还得写校验啊:


def isOdd(number):
    if type(number) != int:
        raise TypeError("parameter is NOT an Integer.")
    return ((1 & number) == 1)


然后验算一下:

>>> isOdd(22)
False
>>> isOdd(23)
True
>>> isOdd(23.5)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in isOdd
TypeError: parameter is NOT a Integer.
>>> isOdd("hello")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in isOdd
TypeError: parameter is NOT a Integer.
目录
相关文章
|
缓存 监控 Java
ThreadLocal 源码解析get(),set(), remove()用不好容易内存泄漏
ThreadLocal 源码解析get(),set(), remove()用不好容易内存泄漏
146 1
|
10月前
|
安全 Linux 数据安全/隐私保护
深入Linux操作系统:文件系统和权限管理
在数字世界的海洋中,操作系统是连接用户与硬件的桥梁,而Linux作为其中的佼佼者,其文件系统和权限管理则是这座桥梁上不可或缺的结构。本文将带你探索Linux的文件系统结构,理解文件权限的重要性,并通过实际案例揭示如何有效地管理和控制这些权限。我们将一起航行在Linux的命令行海洋中,解锁文件系统的奥秘,并学习如何保护你的数据免受不必要的访问。
|
11月前
|
设计模式 Swift iOS开发
探索iOS开发:从基础到高级,打造你的第一款App
【10月更文挑战第40天】在这个数字时代,掌握移动应用开发已成为许多技术爱好者的梦想。本文将带你走进iOS开发的世界,从最基础的概念出发,逐步深入到高级功能实现,最终指导你完成自己的第一款App。无论你是编程新手还是有志于扩展技能的开发者,这篇文章都将为你提供一条清晰的学习路径。让我们一起开始这段旅程吧!
|
人工智能 自然语言处理 物联网
智能体进化发展了一年,现在的RPA Agent迭代到什么程度了?
智能体技术在过去一年迅速发展,RPA Agent已成为连接多种应用系统的关键工具。实在智能推出的实在Agent 7.0,通过自然语言处理和屏幕识别技术,实现了从需求输入到任务执行的全流程自动化,大幅降低了智能体构建门槛。该平台不仅能在企业级应用中提供专业服务,还能满足个人用户的多样化需求,真正实现了端到端的自动化解决方案。
346 6
智能体进化发展了一年,现在的RPA Agent迭代到什么程度了?
|
JSON 资源调度 Kubernetes
实时计算 Flink版操作报错合集之解析JSON数组时,遇到报错,该怎么解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
245 0
|
存储 自然语言处理 算法
OpenIM Bot: 用LLM构建企业专属的智能客服
OpenIM Bot 通过结合LLM和RAG技术,构建企业专属的智能客服系统。该系统通过优化向量存储、混合检索和查询分析,解决了LLM的幻觉、新鲜度、token长度和数据安全问题,提升了用户体验。向量存储和预处理步骤确保文档高质量,而混合检索结合文本和语义搜索,增强了检索结果的准确性。通过迭代优化,OpenIM Bot 提供了高效、智能的支持服务,减轻了支持团队的负担,提升了问题解决效率。
1317 3
OpenIM Bot: 用LLM构建企业专属的智能客服
|
12月前
|
前端开发 JavaScript IDE
React 事件处理
10月更文挑战第8天
73 1
|
供应链 物联网 分布式数据库
未来技术的浪潮:区块链、物联网和虚拟现实的融合与创新
【6月更文挑战第4天】随着科技的不断进步,新兴技术如区块链、物联网和虚拟现实正在逐渐改变我们的生活和工作方式。这些技术的发展趋势和应用场景不仅令人兴奋,也引发了许多有趣的讨论。本文将探讨这些新兴技术的发展趋势,并分析它们在未来可能的应用场景。
|
设计模式 前端开发 NoSQL
设计模式第八讲:观察者模式和中介者模式详解
 定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。
291 0
|
XML Java Maven
多个仓库源配置及repositories和mirrors的配置
在实际项目中会存在多个仓库,包括我们自建的Nexus私有仓库和阿里仓,这里就需要设置多仓的顺序,防止jar包不在其中一个仓库时会自动从另外一个仓库中拉取。
1997 1