当前位置: 首页 > 知识库问答 >
问题:

在Python中同时使用IF、AND、OR和相等操作数[重复]

赫连骏
2023-03-14

我正在尝试创建一个函数,其中检查给定值(作为字符串传递)以查看位数是4还是6,并且它是一个数字。

我的第一个冲动是遵循以下准则:

def number(x):
    if (len(x) == (4 or 6)) and x.isdigit():
        print "True"
    else:
        print "False"

上面的代码只通过了下面的第一个测试…我不明白为什么它通过了这个测试,但没有通过其他测试:

number("1234")

只有当我分离len()函数时,它才能正常工作。

def number(x):
    if (len(x) == 4 or len(x) == 6) and x.isdigit():
        print "True"
    else:
        print "False"


## Checks
number("1234")
number("123456")
number("abcd")
number("abcdef")
number("1")
number("a")

以上代码通过了所有测试。

因此,我的问题是:

  1. 这是怎么回事?
  2. 有没有办法为此编写更干净的代码?

谢谢你的帮助!

**这不是一个重复的问题,因为尽管这个问题与布尔运算符有相同的基本概念,但由于使用了len()、isdigit(),以及如何最好地改进它的附加问题(有人评论了return的用法),问题本身是不同的。不过,这无疑为另一个问题增加了另一个视角。

共有3个答案

汪明德
2023-03-14

你可能想写

if (len(x) in (4, 6)) and x.isdigit():

而不是

if (len(x) == (4 or 6)) and x.isdigit(): 
汝开畅
2023-03-14
匿名用户

您可以使用中的操作符,如下所示:

def number(x):
    if len(x) in (4, 6) and x.isdigit():
    print "True"
else:
    print "False"

其中in检查给定容器中的容器。请注意,4或对自己的评估是不希望的,这就是为什么你的第一个代码段失败。你可以在python shell上查看:

>>> 4 or 6
4

芮祺
2023-03-14

它有助于检查这一行的逻辑:

if (len(x) == (4 or 6)):

(4或6)子句包含逻辑短路。值4为真,因此将对其进行计算并返回到=关系比较。

的工作方式是,它的左侧被计算为布尔值,如果为true,则返回其值。如果左侧不是布尔值true,则计算右侧并返回其值。

因为4或...的左边在布尔意义上是真的,所以永远不会计算右边。Python甚至不看过去的4或。如果左边的值是一个假值(如0),那么将计算的右边。

要查看此操作,请尝试打印4或6。输出为4。

因此,由于4是硬编码的真值,所以如果(len(x)==4),您的比较在语义上与相同-也就是说,由于4是true,因此从不计算6。

我想你真正想知道的是len(x)是4还是6。您可以通过以下两种方式将其编码:

if(len(x) == 4 or len(x) == 6 ...

if(len(x) in (4,6) ...

 类似资料:
  • 问题内容: 我有以下代码: 在哪里。 如果第一个陈述为真会怎样? Java还会检查第二条语句吗?因为为了使第一条语句为真,所以HashMap不应包含给定的键,因此如果选中了第二条语句,则将获得。 简单来说,如果我们有以下代码 Java将在第一种情况下检查b是否a为false,a在第二种情况下是否为true? 问题答案: 不会被评估。这非常有用。例如,如果你需要测试String是否为null或为空,

  • 问题内容: 我正在通过LPTHW,遇到了一些我听不懂的东西。您何时会需要布尔值或返回布尔值以外的其他值?LPTHW文本指出所有语言(如python)都具有此行为。他是说解释型语言还是编译型语言,还是鸭子类型的还是静态类型的语言? 我运行了以下代码: 请帮助我了解这里发生了什么。 根据文档:http : //docs.python.org/2/library/stdtypes.html 除非另有说明

  • 问题内容: 我知道and表达式存在于python中,但是有任何表达式吗?还是通过某种方式组合它们以产生与表达式相同的效果? 我的代码看起来像这样: 这样,我的意思是,如果用户输入“ a”并且任何类型的“ a”都包含在先前定义的列表中,我是否可以从给定列表中删除所有类型的“ a”? python告诉我在以下方面存在问题: 他告诉我: 问题答案: 正如Matt Ball的回答所解释的, 是“和/或”。

  • 给你一个整数列表,长度为偶数。考虑这样一个操作,您在nums中选择任意数字,并用[1,max(nums)]之间的值更新它。返回所需的操作数,使得对于每个i,nums[i]+nums[n-1-i]等于相同的数。问题可以贪婪地解决。 注意:n是数组的大小,max(nums)是nums中的最大元素。 null 设i=0,nums[0]+nums[6-1-0]=4。 i=1,nums[1]+nums[6-

  • 本文向大家介绍Nginx中IF、AND、OR语句用法实例,包括了Nginx中IF、AND、OR语句用法实例的使用技巧和注意事项,需要的朋友参考一下 在上一篇文章:《Nginx if语句加正则表达式实现字符串截断》中, 我们介绍过了使用if来进行截断字符串的用法, 这次我们来了解下if的逻辑用法: 什么是逻辑用法呢, 就程序中的and、or关系, 就叫做逻辑了. NGINX支持if的 and 与 o

  • 我正在从命令行运行cucumber方案 以下命令对我有用 mvn测试-Dcumber。options=“--tags@Admin--tags@sanity” 当我运行复杂命令时,它不起作用。 我想运行带有标签(管理和健全)或(雇员和健全)的cucumber场景 mvn test-dcu number . options = "-tags(@ Admin和@sanity)或(@Employee和@s