首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我的三元运算符会给if一个不同的结果?

三元运算符是一种简化if-else语句的表达式,它由三个部分组成:条件表达式、真值表达式和假值表达式。它的语法形式为:条件表达式 ? 真值表达式 : 假值表达式。

当使用三元运算符时,它会根据条件表达式的结果来选择执行真值表达式还是假值表达式。如果条件表达式的结果为真,则执行真值表达式;如果条件表达式的结果为假,则执行假值表达式。

可能导致三元运算符给if语句一个不同结果的原因有以下几种情况:

  1. 条件表达式的结果不是布尔类型:三元运算符要求条件表达式的结果必须是布尔类型(true或false)。如果条件表达式的结果不是布尔类型,那么它会被隐式转换为布尔类型。在这个转换过程中,一些非布尔类型的值可能会被转换为true或false,导致条件表达式的结果与预期不符。
  2. 真值表达式或假值表达式中包含副作用:如果真值表达式或假值表达式中包含有副作用的代码,例如修改变量的值或调用函数,那么这些副作用可能会导致if语句的结果与三元运算符的结果不一致。这是因为if语句会根据条件表达式的结果来选择执行代码块,而三元运算符会直接执行真值表达式或假值表达式。
  3. 真值表达式和假值表达式的结果类型不一致:如果真值表达式和假值表达式的结果类型不一致,那么三元运算符会根据条件表达式的结果来选择执行不同类型的表达式。这可能导致if语句的结果与三元运算符的结果不一致。

综上所述,当三元运算符给if语句一个不同的结果时,可能是由于条件表达式的结果不是布尔类型、真值表达式或假值表达式中包含副作用,或者真值表达式和假值表达式的结果类型不一致等原因导致的。在使用三元运算符时,需要确保条件表达式的结果是布尔类型,并且真值表达式和假值表达式的结果类型一致,避免出现不一致的结果。

(注:本回答中没有提及云计算、IT互联网领域的名词词汇和腾讯云相关产品,因为问题与这些内容无关。)

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

概率统计——为什么条件概率的结果总和直觉不同?

所以另一个孩子也是女孩的概率是1/3。 这个答案的计算过程没什么问题,我想大家应该都能看明白,但是不知道会有多少人觉得奇怪。为什么答案不是 1/2 呢?难道两个孩子的性别不是独立的吗?...不同的是,假设有一天我们在公园碰见了这一对夫妻。不过,与此同时,夫妻还带了一个孩子。这个孩子是一个女孩,那么,请问,另一个孩子也是女孩的概率是多大? 答案是 1/3 呢还是 1/2 呢?...我们之前一通分析,用上各种公式进行计算,得到的结果明明是1/3,为什么这里就变成 1/2 了呢?这两道题难道不是一样的吗?...我们遇见一个女孩的条件下,两个都是女孩的概率是 ? 这里潜在的信息是,我们在公园遇见一个孩子,他是男是女的概率是不同的。我们遇见了女孩,会改变剩下一个孩子是女孩的概率。...这样理解都行得通,但还是没有解决我们之前的疑惑,为什么看起来完全一样的两件事,得到的结果不同呢?就因为我们看到了其中的一个孩子吗?可是我们看到孩子,与孩子的性别的概率应该无关才对。

1.3K20

#PY小贴士# 我的PyCharm为什么执行结果很诡异?

今天讲的这个小问题,没有用过 PyCharm 的同学会完全不知所云,但用过的人,可能有一半以上概率会遇到这个算不上 bug 但也可能让人迷惑的坑。...情况就是:当你写了一段代码,点击 PyCharm 右上角的绿色小三角运行程序时,发现结果跟你预期的完全不相干。然后,无论你怎么修改代码,结果丝毫不会改变。甚至你一怒之下删光所有代码,竟然仍有输出!...其实原因也很简单:在 PyCharm里面,切换了当前编辑的 py 文件后,默认运行的代码文件是不会跟着变的。这时候用快捷键或者点运行按钮执行的都还是一开始设定的那个代码文件。 ?...新手学习经常会依次写好几个习题,于是会发生修改了代码,但执行效果没变化的情况。一来一回就把人给弄糊涂了。 一个简单的方法,就是用右键点击空白处运行代码: ?...不过这样一来,如果你不是写单个文件的代码,而是开发有固定执行入口的项目,就反倒不方便了。所以具体就看你自己的需要了。 ?

1.3K20
  • C++ sizeof()运算符的参数为指针和数组的值为什么不同

    sizeof()的参数为指针和数组 C++或C语言中,都可以使用sizeof()运算符来计算数组的字节大小,除此之外,在C++和C语言中,都可以使用一个指向数组第一个元素的内存地址的指针来引用数组,因此...,如果要计算数组的字节大小,或长度,传递数组本身或传递指向数组的指针给sizeof()运算符似乎都是可以的,实际上则不然,二者有本质上的区别。.../ 计算arr的大小 int n = sizeof(arr); // 定义一个指针指向数组arr int *p = arr; // 将指针p传递给sizeof()...和m的值是不同的!...这是为什么呢? 不同值的原因 这主要是因为当sizeof()运算符的参数是数组本身,将计算的是数组的大小,而如果传递的是指针作为参数,那计算的便是指针的大小,而不是整个数组的。

    18221

    LIME:我可以解释任何一个分类模型的预测结果

    LIME:我可以解释任何一个分类模型的预测结果 ? image-20210630115214018 论文标题:“Why Should I Trust You?”...因此,我们需要能够对模型的预测进行解释,从而帮助我们来判断模型是否可靠。 何谓“解释一个预测结果”,作者的定义是:通过文本的或者视觉的方式来呈现样本的具体组成部分跟模型预测结果之间的关系。...LIME流程图 重点注意: 这里g和f使用的训练数据是不同的,但我们希望他们的输出结果是逼近的。 我们是针对一个样本进行解释,即给定一个样本,解释为什么模型这样预测。 先“转换”,再“转换回来”。...g的各个w可以可视化出来,看出不同特征的贡献程度。比如下面的例子: ? 通过对两个模型,在同一个样本上的解释,我们可以发现第一个模型解释性更好,因为找到了正确的特征。...而第二个模型找到的特征是错误的,这是由于训练集中的偏差导致的。 对于图像分类问题,也是类似的: ? 上图的结果,是通过对g的正权重对应的区域进行高亮。从而可以解释为什么模型预测出了相应的类别。

    1.7K30

    HttpURLConnection调用get方法碰到奇怪的编码问题--不同的方式调用同一个方法竟然有不同的结果

    今天在调用某接口查询企业名称的时候碰到奇怪的问题。 在页面上输入拼音能搜索到数据,输入汉字则不行。 询问了对方的技术人员,他说我传的内容是空的,这就奇怪了,我后台明明已经接收到“浙江”这个值了。...它们之间的区别仅仅是调用的路径不同,一个是从单元测试调用的,一个是从页面上调用的。...页面调用 通过页面ajax调用接口: 参数也能正常传到Controller,问题是sendUrl我已经在方法里写死了,却得到了不一样的结果: /** * 获取公司列表...这是通过单元测试的方法发送的请求,编码没有问题: 这是通过页面发送的请求,编码就有问题了: 不同的方式调用同一个方法,为什么会有这样的区别呢?真是搞不明白。。。...但是单元测试的时候,为什么不编码也可以呢?而从页面上通过Controller调用就有编码问题? 这个疑问还没解开。。。 如果有大神知道原因,请不吝赐教,谢谢!

    1.4K10

    MYSQL 一个特殊需求在不同的MYSQL配置产生不同的结果 与 update 0 是否需要应用程序判断

    最近有一个需求关于数据的清理的需求,但是这个需求里面有一个部分有一个部分是特殊,也就是在数据清理中,是需要进行数据的导出和导入的,并确定在导入和导出的过程中,导出数据在导出到清理的整个过程中中不能被改变...配置中会产生什么样的结果,不同的结果开发是否能接受的问题。...这里需要在不同的情况下来分析,同样的设置给应用程序带来的不同的问题。 这里先从互联网的方案来说,死锁探测为0 innodb_lock_wait_timeout = 3 当然有的地方更短设置成1秒。...具体什么成因这里就不讨论了,同时这里还有一个不同就是隔离级别,我们在每次测试使用不同的隔离级别来看看会有什么影响。...数据还在的情况下,你会获得update 对应结果的结果,如果相关的行不在的情况下,获得结果也是UPDATE 0 的结果。

    11810

    为什么在 Eclipse 中,运行本程序却是另外一个程序的结果?

    文章目录 前言 一、错误产生场景 1.1、执行一个无误的 Java 程序(即产生结果的程序) 1.2、执行未出结果的 Java 程序 二、错误处理 总结 ---- 前言 你使用 Eclipse 敲代码的时候...,有没有遇到过这样一种情况,明明我点击运行本程序结果却是另外一个程序的结果?...这是为什么呢?话不多说,我们从实际案例来分析错误原因。...---- 一、错误产生场景 1.1、执行一个无误的 Java 程序(即产生结果的程序) 首先我们先执行一个 Java 程序SwitchToIfElseWithSwitch如下: package review3...要做一个细心的程序员哦! ---- 我是白鹿,一个不懈奋斗的程序猿。望本文能对你有所裨益,欢迎大家的一键三连!若有其他问题、建议或者补充可以留言在文章下方,感谢大家的支持!

    2.6K41

    我为什么要创建一个不能被实例化的类

    但如果有一天,你发现我写了这样一个类: class People: def say(self): print(f'我叫做:{self.name}') def __new...一个不能被初始化的类,有什么用? 这就要引入我们今天讨论的一种设计模式——混入(Mixins)。 Python 由于多继承的原因,可能会出现钻石继承[1]又叫菱形继承。...每个 Mixins 类只有一个或者少数几个方法。不同的 Mixin 的方法互不重叠。...('kingname', 28) pm = People('pm', 25) kingname > pm 显然,这样写会报错,因为两个类的实例是不能比较大小的: 但在现实生活中,当我们说 某人比另一个人大时...但是 在写 Mixins 类的时候,我们不会写__init__方法,也不会写类属性。并且 Mixin 类中的方法看起来更像是工具方法。 我们可以写很多个 Mixin 类,然后用一个子类去继承他们。

    3.4K10

    为什么 Python、Go 和 Rust 都不支持三元运算符?

    在编程时,我们经常要作条件判断,并根据条件的结果选择执行不同的语句块。...本文将主要分析 Python 在设计条件选择语法时的过程,科普为什么它会采用现今的与众不同的实现方案,同时,我们也将考察为什么其它语言也要抛弃传统的三元运算符。...在开篇之前,我再声明一下:就像“Python为什么”系列的大部分文章一样,本文关注的仅是一个很小的语法点,但它并不是“茴香豆有几种写法”那种毫无意义的话题。...总体而言,Python 设计者非常看重可读性与可维护性,不采用三元运算符而创造条件表达式语法,这是一个经过了开放讨论、谨慎评估与权衡取舍的结果。 Go、Rust 为什么不支持三元运算符?...为什么三元运算符在 Rust 是多余的呢?

    4.3K10

    AI看脸就知道性取向,不服气的我做了一个实验,结果……

    斯坦福有一个看脸预测性取向的AI,如同相面一般,根据面部特征就能判断一个人是直是弯,而且准确度喜人: 男生81%,女生74%。 研究结果一公布,网友沸腾。也有不少人怀疑:AI哪有这么准?...这个结果,又引来网友们的一波激烈讨论。这一次,大家的关注点不仅仅是准确率本身,还有少年在复现研究中展现出的对AI的观察: 凭什么说我是直男 AI到底是靠哪些线索,来判断人类的性向?...为了做这些探索,约翰复现了一个深度神经网络模型和一个基于面部形态学(FM)的模型,还从约会网站中抓取了50万张照片,从中选取2万多张,做成性别、取向平衡分布的数据集。...然后作者根据面部特征训练了一个回归模型来预测性取向。2017年斯坦福大学的研究就是这么做的。当时,Kosinski教授把人脸所有相同性取向的脸合成了4张图片: ?...准确率91%的结果会误认9%的直男为同性恋,也就是85人。 该算法还会将9%的同性恋者视为直男,也就是会识别出45人为同性恋。结果在130个“同性恋”中,有三分之二的人其实并不是同性恋。

    42130

    不服气的我做了一个实验,结果……

    导读:斯坦福有一个看脸预测性取向的AI,如同相面一般,根据面部特征就能判断一个人是直是弯,而且准确度喜人: 男生81%,女生74%。 研究结果一公布,网友沸腾。也有不少人怀疑:AI哪有这么准?...这个结果,又引来网友们的一波激烈讨论。这一次,大家的关注点不仅仅是准确率本身,还有少年在复现研究中展现出的对AI的观察: 01 凭什么说我是直男 AI到底是靠哪些线索,来判断人类的性向?...为了做这些探索,约翰复现了一个深度神经网络模型和一个基于面部形态学(FM)的模型,还从约会网站中抓取了50万张照片,从中选取2万多张,做成性别、取向平衡分布的数据集。...然后作者根据面部特征训练了一个回归模型来预测性取向。2017年斯坦福大学的研究就是这么做的。当时,Kosinski教授把人脸所有相同性取向的脸合成了4张图片: ?...准确率91%的结果会误认9%的直男为同性恋,也就是85人。 该算法还会将9%的同性恋者视为直男,也就是会识别出45人为同性恋。结果在130个“同性恋”中,有三分之二的人其实并不是同性恋。

    66360

    Python中的三目运算符(三元表达式)

    参考链接: Python中的三元运算符 Python中的三目运算符(三元表达式)  一般支持三目运算符的语言(如C语言)的语法格式一般是这样的:  判断条件(返回布尔值)?...为真时的结果:为假时的结果  比如:  x = x%2==1 ? x+1:x;  python并不支持? :这种符号所表达的先判断再选择的含义,但仍然有相应的语法支持:  1....Python 的语法支持  为真时的结果 if 判断条件 else 为假时的结果(注意,没有冒号)  顺序略有不同,  x = x+1 if x%2==1 else x  在比如我们欲实现一个基础版本(...递归版本)的斐波那契数列:  def fn(n):     return n if n < 2 else fn(n-1)+fn(n-2)  Python 中的三目运算符目的是得到一个结果,未必就是将该结果...return,或者进行简单的变量赋值,如下:  l = [] l.append(1 if x>=1. else 0)                     # 将会给形式带来巨大的简洁  一个应用实例请见

    1.5K30

    阶段01Java基础day03JAVA基础

    03.03_Java语言基础(位运算符的基本用法1) A:位运算符有哪些 B:案例演示 位运算符的基本用法1 &,|,^,~ 的用法 &:有0则0 |:有1则1 ^:相同则0,不同则1 ~...B:面试题: 请自己实现两个整数变量的交换 注意:以后讲课的过程中,我没有明确指定数据的类型,默认int类型。...1 >>>:无符号右移 无论最高位是0还是1,左边补齐0 03.06_Java语言基础(三元运算符的基本用法) A:三元运算符的格式 (关系表达式) ?...03.15_Java语言基础(if语句的格式2和三元的相互转换问题) A:案例演示 if语句和三元运算符完成同一个效果 B:案例演示 if语句和三元运算符的区别 三元运算符实现的,都可以采用...什么时候if语句实现不能用三元改进呢? 当if语句控制的操作是一个输出语句的时候就不能。 为什么呢?因为三元运算符是一个运算符,运算符操作完毕就应该有一个结果,而不是一个输出。

    61610

    Java基础第三天学习笔记

    * &:有0则0 * |:有1则1 * ^:相同则0,不同则1 * ~:按位取反 03.04_Java语言基础(位异或运算符的特点及面试题)(掌握) * A:案例演示 * 位异或运算符的特点...* B:面试题: * 请自己实现两个整数变量的交换 * 注意:以后讲课的过程中,我没有明确指定数据的类型,默认int类型。...0;最高为是1,左边补齐1 * >>>:无符号右移 无论最高位是0还是1,左边补齐0 * 最有效率的算出2 * 8的结果 03.06_Java语言基础(三元运算符的基本用法)(掌握) * A:三元运算符的格式...03.15_Java语言基础(if语句的格式2和三元的相互转换问题)(掌握) * A:案例演示 * if语句和三元运算符完成同一个效果 * B:案例演示 * if语句和三元运算符的区别 * 三元运算符实现的...* 什么时候if语句实现不能用三元改进呢? * 当if语句控制的操作是一个输出语句的时候就不能。 * 为什么呢?因为三元运算符是一个运算符,运算符操作完毕就应该有一个结果,而不是一个输出。

    80970

    Java基础笔记03

    有1则1 ^:相同则0,不同则1 ~:按位取反 03.04_Java语言基础(位异或运算符的特点及面试题)(掌握) A:案例演示 位异或运算符的特点 ^的特点:一个数据对另一个数据位异或两次,该数本身不变...B:面试题: 请自己实现两个整数变量的交换 注意:以后讲课的过程中,我没有明确指定数据的类型,默认int类型。...最高为是1,左边补齐1 ">>>":无符号右移 无论最高位是0还是1,左边补齐0 最有效率的算出2 * 8的结果 03.06_Java语言基础(三元运算符的基本用法)(掌握) A:三元运算符的格式...03.15_Java语言基础(if语句的格式2和三元的相互转换问题)(掌握) A:案例演示 if语句和三元运算符完成同一个效果 B:案例演示 if语句和三元运算符的区别 三元运算符实现的,都可以采用...什么时候if语句实现不能用三元改进呢? 当if语句控制的操作是一个输出语句的时候就不能。 为什么呢?因为三元运算符是一个运算符,运算符操作完毕就应该有一个结果,而不是一个输出。

    68680

    Java运算符-三元运算符,这你必须得会!

    摘要三元运算符是一种具有简洁语法特性的运算符,可以根据某个条件的真假来返回两个值中的一个。它相比于传统的if-else语句更加简洁,适用于一些简单的条件判断。正文简介三元运算符的使用格式为:条件 ?...在这个例子中,由于a的值大于b,所以最大值为10。因此,控制台将输出"最大值为:10"。应用场景案例三元运算符在很多场景中都有广泛的应用,例如:求两个数的最大值或最小值。根据条件判断返回不同的结果。...然后使用三元运算符来比较a和b的大小,如果a大于b,则将a的值赋给变量max;否则将b的值赋给变量max。最后打印出最大值max。运行结果为:"最大值为:10",因为a的值大于b,所以最大值为a。...执行结果:全文小结本文介绍了Java中的三元运算符的基本使用方法,通过源代码解析、应用场景案例、优缺点分析等方式深入了解它的使用。...三元运算符能够简化条件判断的编写和提高代码的可读性,但只适用于简单的条件判断。总结三元运算符是Java开发中常用的一种运算符,能够根据条件的真假返回两个值中的一个。

    15521

    通俗易懂PHP基础【4-运算符与表达式】

    $x $x为假时为真 同一个逻辑结构的两个运算符号之间却有着不同的优先级,and与or 的优先级要高于||与 &&。 测试代码了解一下逻辑运算: 运行结果: ? 5 字符串运算符 字符串的运算是用于将字符串拼接起来。不同于其他的编程语言,其他的编程语言拼接字符串使用加号(+),PHP拼接字符串的运算符号使用点(.)。..."; //先自增,再执行输出,所以$x的值会变为7 ?> 运行结果: ? 8 其他运算符 三元运算符 所谓三元运算符,就是根据一个表达式的成立与否,去执行两件事。...举个例子,如果明天是周末,我就在家看书,不然只能上班了。 用三元运算符,来表达就是,如下: 表达式能成立,执行?之后的事情,不成立,就执行:后的事情。 的语句来组织我们的代码。一个语句可以是一个变量,一个函数,一个运算符。我们之前写的测试的代码,一行一行以分号(;)结束的语句,都是一个个表达式。

    86430

    Numpy模块中的where函数

    前言 学习过编程语言的话一定知道一个称为"三目运算符"(三元表达式)的东西,一般来说我们可以把它看成是一个简单的"if-else"语句。...如果是true,就把表达式1作为结果。 如果是false,就把表达式2作为结果。 这里为什么要提一下其它编程语言中的三目表达式呢?...我们知道在java中"三目运算符"是对"if-else"语句的一个简化,如果能用"三目运算符"实现的一定能用"if-else"语句来实现,当然它们肯定是有区别的,由于"三目运算符"是一个运算符,所以它必须返回的是一个结果而不是输出...,但是"if-else"返回的结果不仅可以是一个结果还可以是一个输出。...不过在Python中虽然可以称为"三目运算符"或者"三元表达式",但是我认为在Python中仅仅能称为"三元表达式",因为此时返回的结果只能是一个输出,而且单单看Python中实现"三元表达式"语句,其实怎么看都像是

    1.5K10

    N 个值得一看的后端代码片段

    点赞再看,Java进阶一大半三元运算符大家肯定有使用过,国外论坛有这么一个问题:Ternary operator: bad or good practice?三元运算符:坏习惯还是好习惯?...最高赞的回答是一个名为Ted Dziuba的老哥说的。为了便于阅读,如果三元组适合一行 80 个字符,我才会使用它。...这实际上是Java语言的一个特性,对于实例变量即成员变量,如果是基本数据类型都会有一个默认值。不同的基本类型默认值不同,我们看看以下各种基本类型的默认值。...程序执行结果:true2. 程序运算2.1 类型提升三元运算符的坑,相信不少南友遇到过。。。我们来看看三元运算符是什么?Java中的三元运算符是一种简洁的条件表达式工具,其语法格式为:条件 ?...new Double(1.0) : new Double(2.0);三元运算符的一个非常关键的细节就是类型的统一化。

    1371210
    领券